1. 程式人生 > 實用技巧 >訊息中介軟體學習七--Redis(基礎知識)

訊息中介軟體學習七--Redis(基礎知識)

1.官網:https://www.redis.net.cn/

2.概述

1.Redis是一個開源(BSD許可),記憶體資料結構儲存,用作資料庫,快取和訊息代理

2.它支援資料結構,如字串,雜湊,列表,集合,帶有範圍查詢的排序集
點陣圖,超級日誌,具有半徑查詢和流的地理空間索引

3.Redis具有內建複製,Lua指令碼,LRU驅逐事務和不同級別的磁碟永續性
並通過Redis Sentinel和Redis Cluster自動分割槽

4.您可以對這些型別執行原子操作,例如附加到字串;遞增雜湊值;
將元素推送到列表中;計算集合交集, 並集和差異;
或者在排序集中獲得排名最高的成員

5.
為了實現其出色的效能,Redis使用記憶體資料集。

根據您的使用情況,您可以通過 每隔一段時間將資料集轉儲到磁碟
通過將每個命令附加到日誌來保留它
如果您只需要功能豐富的網路記憶體快取,則可以選擇禁用永續性

6.Redis還支援簡單到設定的主從非同步複製
具有非常快速的非阻塞第一次同步,
自動重新連線以及在網路分割上的部分重新同步。
其他功能包括:交易釋出/訂閱Lua指令碼鑰匙的生存時間有限LRU逐出鑰匙自動故障轉移


7.您可以使用大多數程式語言中的Redis
Redis是用ANSI C編寫的,適用於大多數POSIX系統,如Linux,* BSD,OS X,
沒有外部依賴性。Linux和OS X是Redis開發和測試的兩個作業系統,

我們建議使用Linux進行部署。
ps:lua指令碼可以將redis客戶端的多個命令打包送到伺服器一起執行,保證原子性



3.redis為什麼這麼快?

1.純記憶體操作
2.單執行緒操作,避免了頻繁的上下文切換(多執行緒需要佔用更多的CPU資源)
3.採用了非阻塞I/O多路複用機制

4.redis的資料結構

redis的資料結構為key---value儲存,Key:是String,Value有5個數據型別

1.String: 字串
2.Hash: 類似於map、可以放物件
3.List:linkedlist格式 支援重複的元素
4.Set:不允許重複且無序
5.Sortedset:不允許重複,且元素有順序

5.應用場景

1.快取資料(資料查詢,商品內容……)
2.任務佇列(秒殺、搶購、12306……)
3.應用排行榜、熱門列表、 最新動態
4.資料過期處理
5.分散式叢集架構中session的處理
6.時效性、訪問頻率、計數器
7.社交列表、記錄使用者判定資訊
8.交集、並集和差集、訊息佇列

6.redis在Linux中的操作

啟動方式:

cd /usr/local
cd redis-4.0.8
cd src
1.src目錄下的./redis-server,這個需要一直保持啟動,

當其他操作的時候,ctrl+c退出,redis也退出了。不太方便
2.後臺啟動 1)到redis目錄 2)vim redis.conf 將daemonize no該為yes 3)到src目錄 :通過配置檔案啟動redis: ./redis-server ../redis.conf
3.使用redis指令碼設定開機自動啟動:啟動指令碼 redis_init_script 位於Redis的 /utils/ 目錄下。
瞭解就可以了,我們學習使用第二種就夠了

關閉:

在src目錄下:
./redis -cli -p 6379 shutdown
當然也可以用kill -9 程序號

redis的指令

通用指令
keys *
檢視所有key
flushall
情況資料庫

value為String型別

value為hash型別

value為list型別

lpush key value [value...] : l是left的縮寫 表示從連結串列左邊(連結串列頭)放入資料
lrange key start end : 檢視start---end中的資料,左包右包 end -1表示到最後
rpush key value [value...] :右邊插入資料 r是right的縮寫
lpop key : 彈出左邊第一個元素
rpop key : 彈出右邊第一個元素
llen key : 檢視連結串列的總長度
blpop key [key...] timeout : 左側阻塞式彈出
brpop key [key...] timeout : 右側阻塞式彈出
lpushx : 和lpush類似,但是lpushx會校驗key是否存在,若key不存在則不進行任何操作
rpushx : 和rpush類似,但是lpushx會校驗key是否存在,若key不存在則不進行任何操作
rpoplpush key1 key2 : 彈出key1的右邊的元素 放入key2左邊(醫院體檢業務,排隊做了一項,繼續排隊做第二項)
brpoplpush : 阻塞版本 
lindex key index : 獲取key中index位置的值,負數就反過來數,-1為最後一個
lrem key count value :
count>0從左邊刪除count個value count<0從右邊刪除count個value count=0刪除所有的value

value為set型別

sadd key element [element...] : set集合中新增元素 
smembers key  : 檢視集合所有的元素
sismember key element  : 檢視元素是否屬於該集合,1存在 0不存在 
srem key element [element...]  : 刪除集合元素 |
scard key : 檢視集合元素數量 
srandmember key [n] :
      隨機獲取集合中某一個元素
      n是正數:返回n個不重複的數
      n是負數:返回n個可能重複的數 |
spop key [n] : 預設彈出一個元素,或者彈出指定個數的元素
sinter key1 key2 : 多個集合的交集
sdiff key1 key2.... : 返回第一個集合有 後面集合都沒有的元素(差集) 
sunion key1 key2 key3…. : 所有集合的並集 
sinterstore set set1 set2 : 找到set1與set2的交集 存放在set中 

value為zset(sortedset)型別

zadd key score member1 score member2 : 新增元素 每個元素都會攜帶一個分數
zrange key start end [withscores] : 根據下標檢視元素 預設分數升序排序
zrevrange key start end [withscores] : 類似上面,反取
zrangebyscore key score1 socre2 : 取score1到score2分數 之間的元素
zrevrangebyscore key max min [withscores] : 反取
zrem key member : 刪除元素 
**zcard key ** 個數 zscore key member :檢視某個元素的分數 zrank key member :檢視某個元素在集合中的排名,預設按分數升序(排名從0開始的) zrevrank key member : 反排名 zincrby key increment member: 為某個元素加分 **zcount key min max ** : 統計min到max分數間的個數 zremrangebyscore key min max : 根據分數段刪除 zremrangebyrank key start end : 根據排名刪除 zinterstore destination numkeys key [key...]:這裡numkeys表示需要做交集的key的個數 zunionstore destination numkeys key [key...]:這裡numkeys代表需要做並集的key的個數 |

學習來源:https://www.jianshu.com/p/60b9e30c6cf1

//Linux的五種IO模型(形象例項詳解)

https://blog.csdn.net/qq_36095679/article/details/89641867

https://www.cnblogs.com/jasonZh/p/9513948.html