Redis 一些常用的技術

2021-10-04 21:34:27 字數 2961 閱讀 6491

1.基礎事務

2.redis事務回滾

3.使用watch命令監控事務

4.流水線(pipelined)

5.發布訂閱

6.超時命令

7.使用lua語言

redis事務是使用multi-exec的命令組合,提供兩個重要的保證:

在redis中使用事務經歷三個過程:

其它redis事務命令

在執行事務命令的時候,在命令入隊的時候,redis會檢測事務的命令是否正確,如果不正確則會產生錯誤。無論之前還是之後的命令都會被事務所回滾。

命令格式正確,而因為運算元據結構引起的錯誤,則該命令執行執行錯誤,而之前還是之後的命令都會被正常執行。

在multi命令之前使用watch命令監控某些鍵值對;

當redis使用exec命令執行事務的時候,它首先會先去比對被watch命令所監控的鍵值對,

如果沒有發生變化,那麼它會執行事務佇列中的命令,提交事務;

如果發生變化,那麼它不會執行任何事務中的命令,而去事務回滾。

過程如圖:

redis參考了多執行緒中使用的cas(比較與交換,compare and swap)去執行的

redis機制是不會產生aba問題的

在redis事務中提供了佇列,這是乙個可以批量執行任務的佇列,效能比較高,但是使用multi…exec事務命令是有系統開銷的,因為會檢測對應的鎖和序列化命令。

redis流水線技術: 沒有任何附加條件的場景下使用佇列批量執行一系列命令,提高系統效能,是一種通訊協議

使用spring操作redis流水線

@test

public

void

test()

return null;};

long start = system.

currenttimemillis()

;// 執行redis的流水線命令

list resultlist = redistemplate.

executepipelined

(sessioncallback)

;long end = system.

currenttimemillis()

; system.out.

println

(end - start)

;}

發布訂閱首先要有訊息源,也就是要有訊息發出來,比如銀行通知。訂閱者可以接收訊息進行處理

redis中的命令:

# 客戶端1訂閱 chat監聽渠道

subscribe chat

# 客戶端2向渠道chat傳送命令

publish chat "let's go!!"

# 客戶端1

"let's go!!"

redis超時命令

命令說明

persist key

持久化key,取消超時時間

ttl key

檢視key的超時時間(-1代表沒有超時, 如果key不存在或已超時則為-2)

expire key seconds

設定超時時間戳(秒)

問題: 如果key超時了,redis會**key的儲存空間嗎?

答: 不會。redis的key超時不會被其自動**,它只會表示哪些鍵值對超時了。好處是如果乙個很大的鍵值對超時,比如乙個列表或者雜湊結構,存在數以百萬個元素,要對其**需要很長的時間。如果採用超時**,則可能產生停頓。

redis提供兩種方式**超時鍵值對:

redis支援兩種方式執行指令碼

對於採用簡單指令碼,redis支援快取指令碼,使用sha-1演算法對指令碼進行簽名,然後把sha-1標識返回回來,只要通過這個標識執行就可以了。

執行lua程式**命令格式: eval lua-script key-num [key1 key2 key3 … ] [value1 value2 value3 …]

key-num:整數代表引數中有多少個key,如果沒有引數,則寫0

7.1 redis快取指令碼命令:

7.2 執行lua檔案:

redis 的一些理解

1.rdb 生成指定時間點的快照 2.aof 生成所有寫操作命令。可以對aof檔案重寫 rewrite 縮小檔案大小 可以同時使用,也可以不使用 但是還原的時候首先考慮還原aof的檔案。訊息佇列的兩個功能 1.發布,訂閱 2.延遲發布 我會有相應的文章發布。1.redis 單台容易出現故障 2.單台...

redis的一些操作

public class wnsredisfactory return pool 通過key刪除 param key public static void del string key throws exception public static void del string key,string...

PHP的分頁處理技術和一些常用的技術

最近用php mysql寫了乙個網上選課系統,對一些技術做乙個簡要的總結。說明 假設我的資料庫名為mydatabase,其中有乙個表mytable 1.php怎麼操縱mysql資料庫?步驟 1 連線資料庫 用mysql connect 函式 用法 mysql connect 主機名,mysql的賬戶...