Redis事務 過期時間 排序 訊息 管道

2021-09-02 12:49:43 字數 3352 閱讀 7215

1:事務,redis中的事務是一組命令的集合,事務同命令一樣都是redis的最小執行單位,乙個事務中的命令要麼都執行,要麼都不執行。

multi開啟事務,exec關閉事務

redis> multi

redis> set key1 value1

redis> queued

redis> set key2 value2

redis> queued

redis> exec

exec命令的返回值就是這些命令的返回值組成的列表,返回值順序和命令的順序相同。

事務中的錯誤處理: 分為語法錯誤和執行錯誤

1)語法錯誤指命令不存在或者命令引數的個數不對,只要有乙個語法錯誤,不管語句順序如何,即使在錯誤語句前面的語句都正確,執行exec命令後redis就會直接返回錯誤,連正確的命令也不會執行。

2)執行錯誤指在命令執行時出現的錯誤,比如使用不同資料型別的命令操作同乙個key,這種錯誤在redis執行之前是不會被發現的。如果事務裡的一條命令出現的執行錯誤,事務裡其他的命令依然會繼續執行(包括錯誤語句之後的命令)。

redis中沒有回滾功能,所以要注意不要發生執行錯誤

2過期時間,redis中可以使用expire命令設定乙個鍵的過期時間,到時間後redis會將其自動刪除

redis> expire key seconds
seconds引數表示鍵的過期時間,單位是秒。注意,不能使用表示式,比如15分鐘不能寫成15*60,而是900

返回值:返回1表示設定成功,0表示失敗

使用ttl命令可以檢視乙個鍵還有多久過期

redis> ttl key
返回值是單位秒,如果鍵沒有設定過期時間則返回-1,當鍵不存在時返回-2。

如果想要取消鍵的過期時間設定,可以使用persist命令。

redis> persist key
返回值:過期時間被成功清除返回1;否則返回0(當鍵不存在或本身就是永久的)。

除了persist以外,使用set或者getset命令為鍵賦值也會清除鍵的過期時間(使用string資料型別的賦值方式,覆蓋了原來的鍵),

還有乙個命令為pexpire,區別是pexpire使用毫秒為單位

另外兩個不常用的命令:expireat,pexpireat;他們使用unix時間表示鍵的過期時間

redis> pexpire key 1000(毫秒)

redis> expireat key seconds

redis> pexpireat key milliseconds

如果用watch命令監控了乙個擁有過期時間的key,當key到期自動清除時,不會被watch認為發生了修改

3:排序,redis提供了sort命令對列表型別、集合型別和有序集合型別鍵進行排序。

排序命令如下:(redis命令與下面的介紹需一對一對照看)

1 redis> sort key [asc/desc] [limit offset count] [store deskey]

2 redis> sort key [alpha] [asc/desc] [limit offset count] [store deskey]

3 redis> sort key1 by key2:*->field [asc/desc] [limit offset count] [store deskey]

4 redis> sort key1 by key2:*->field [asc/desc] get key3:*->field1

[get key3:*->field2...] [limit offset count] [store deskey]

1)如果集合中有非數字型別,sort會報錯,集合中可以有小數。這種命令方式只對數字進行排序,limit限制返回數量為count,offset表示跳過前offset個元素。store將結果存到指定鍵,該鍵是list型別,如果鍵已經存在則覆蓋原來的鍵,不論原key是什麼型別,即使是string也會覆蓋。

2)新增alpha後,實現按字典順序排列非數字元素,1-9a-za-z,數字部分不再按照大小排序,而是對每一位數字的大小做比較(比如2排在12的後面)。

3)by後面的鍵為參考鍵,參考鍵可以是字串型別鍵或雜湊型別鍵的某個字段(key->field表示),當有by引數時,將使用key1中每個元素的值替換"*"符號,並獲取對應鍵的指定的字段值,然後對這個值進行排序,再對映至key1中,完成對key1的排序。當key2中不含"*"時,sort不會執行排序命令;當參考鍵不存在時,會預設參考鍵的值為0。

4)對key1完成排序後,再代入key3:*中,更快的獲取需要的元素;可以使用多個get獲取多個值,如果還想獲取key1對應的值,可以使用get #,他返回元素本身的值。

上述幾種排序方法,store會返回新增的元素數量,2 3 返回排序後的key1,4返回排序後的key1在key3中所查詢的值

4:訊息,即佇列

redis>brpop key seconds

redis>blpop key seconds

名字很容易理解,阻塞的list,彈出元素。第乙個引數是鍵名;第二個引數是超市時間,單位為秒。若超過指定時間仍未取得元素則返回nil。0表示不限制等待時間

可以通過list實現優先順序佇列:

redis> brpop list1 list2 list3 ...

redis> blpop list1 list2 list3 ...

可以同時設定多個佇列,即同時檢測多個鍵,如果都能取得元素,則優先從list1中取。(將優先順序高的列表放在優先順序低的前面,便可以實現優先順序佇列)

5:管道,優化redis,減少tcp收發總耗時

jedis jedis = new jedis("127.0.0.1", 6379);

pipeline pipeline = jedis.pipelined();

for (int i = 0; i < 10000; i++)

pipeline.sync();

不再是單條命令傳送,而是批量傳送。減少了客戶端與redis的通訊次數。

這次的部落格就到這裡結束了,本來還想寫點訂閱/發布的,結果自己也不太會,就不出來丟人了.......謝謝能看完。

Redis 事務與過期時間詳細介紹

redis 事務與過期時間詳細介紹 一 redis事務 redis中支援事務,事務即為當我們需要執行幾條命令時,要麼這幾條命令都不執行,要麼都執行 1 開始事務寫入 multi 2 然後寫入命令,注意寫完事務要執行的每條命令之後回車即可,命令會自動入隊 lpush art 1 hello lpush...

redis過期時間

在redis中,可以給乙個鍵設定過期時間,等時間到了以後,該鍵會被自動刪除。這個機制經常被用來儲存驗證碼等有一定時效性的東西,資料的有效期過了以後,就會被自動刪除以節省記憶體空間。跟過期相關的命令有三個,分別是expire persist和ttl,用法如下 來看個簡單的例子 0.1 6379 set...

redis過期時間

如果redis中沒有設定expire過期時間,那麼redis中的資料將會是永久有效的,不會被自動刪除 在不超過最大記憶體的情況下 但是redis無論有沒有設定expire,他都會遵循redis的配置好的刪除機制,在配置檔案裡設定 redis最大記憶體不足 時,資料清除策略,預設為 volatile ...