1. 程式人生 > >redis使用(三):事務,過期時間,排序,訂閱/釋出,持久化

redis使用(三):事務,過期時間,排序,訂閱/釋出,持久化

一.事務
MULTI
COMMAND1
COMMAND2

COMMANDn
EXEC 或者 DISCARD (取消)

127.0.0.1:6379> multi
OK
127.0.0.1:6379> lpush ring left
QUEUED
127.0.0.1:6379> zadd student 88 park
QUEUED
127.0.0.1:6379> exec
1) (integer) 2
2) (integer) 1

redis中事務是一組命令集合,EXEC時會執行這組命令,這組命令執行過程中不會執行其它命令,

1)語法錯誤, 如:命令不存在,命令引數個數不對
如果有語法錯誤,這組命令中的所有命令都不會執行;

2)執行錯誤,命令執行時出現的錯誤,如果對hash型別的key執行lpush命令;

watch命令,監視一個變數,直到下一個exec,discard,unwatch命令,如果exec執行時監視的鍵值有變化,則事務不會執行, watch命令可以用來對鍵值加鎖(樂觀鎖)。

二 .鍵值的過期時間

 #expire key time(s)  設定鍵的過期時間,time秒後會刪除鍵
 #ttl key 檢視鍵多長時間後過期,
 #persist key  設定鍵為永久
127.0.0.1
:6379> expire ring 300 (integer) 1 127.0.0.1:6379> ttl ring (integer) 161 127.0.0.1:6379> ttl ring (integer) 145 127.0.0.1:6379> persist ring (integer) 1 127.0.0.1:6379> ttl ring (integer) -1

三 .排序

#sort 可以對listset,sorted set, (不支援hash型別)排序,預設轉換成浮點數排序,加ALPHA則按字母序排序
127.0.0.1:6379> lrange  letters 0
-1 1) "c" 2) "A" 3) "D" 4) "B" 5) "m" 6) "k" 7) "N" 127.0.0.1:6379> sort letters ALPHA 1) "A" 2) "B" 3) "c" 4) "D" 5) "k" 6) "m" 7) "N"

更多,可以結合BY GET STORE使用

四 .訂閱/釋出

#publish channelname message 在channelname釋出一個訊息,此時訂閱此channel的客戶端會收到訊息
#subscribe channelname 訂閱channelname的訊息
127.0.0.1:6379> subscribe tv1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
1) "message"

#psubscribe globmatch  使用glob萬用字元訂閱
#punsubscribe globmatch  需要與psubscribe成對出現才有用

疑問:訂閱狀態下,unsubscribe命令不起作用,為什麼???

127.0.0.1:6379> subscribe tv1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
1) "message"
2) "tv1"
3) "world"
unsubscribe tv1

五.持久化
Redis支援持久化儲存資料,即儲存資料到硬碟。支援兩種方式持久化,RDB方式和AOF方式;

1)RDB方式

RDB,即快照,把記憶體中的資料生成一份副本儲存在硬碟上;如下幾種情況會執行快照:
1)根據配置規則,如save 100 10 ,表示如果100s內,有10個鍵值被修改,就執行快照;
2)使用者執行save或者bgsave命令,save命令執行期間不會相應客戶端的請求,而bgsave可以立即返回,bgsave通過fork出一個子程序來執行快照,主程序繼續接收客戶端命令;
3)執行flushall(清空所有資料)命令,如果配置了1)中的快照條件,執行flushall時會觸發執行快照;
4)主從複製時,從節點向主節點發sync命令後,主節點會執行快照,並開始快取此後執行的命令,然後把快照和快取的命令傳輸給從節點,從而實現從資料庫的複製初始化。

RDB的缺點:redis一旦異常退出,只能恢復到最後一次執行快照時的資料。

2)AOF方式
AOF方式,通過將執行的沒條命令寫入磁碟來實現持久化,這個過程會降低Redis的效能,AOF檔案的存放位置都是dir配置的路徑,預設沒有開啟AOF方式持久化,可以通過配置appendonly yes啟用。