redis 資料一致性

2021-09-23 23:54:11 字數 1232 閱讀 3145

** 

方式2:

資料庫和redis分別處理不同的資料型別 資料庫處理要求強一致實時性的資料,例如金融資料、交易資料 redis處理不要求強一致實時性的資料,例如**最熱貼排行榜

redis和mysql資料的同步,**級別大致可以這樣做: 讀: 讀redis->沒有,讀mysql->把mysql資料寫回redis 寫: 寫mysql->成功,寫redis

併發不高的情況: 讀: 讀redis->沒有,讀mysql->把mysql資料寫回redis,有的話直接從redis中取; 寫: 寫mysql->成功,再寫redis;

併發高的情況: 讀: 讀redis->沒有,讀mysql->把mysql資料寫回redis,有的話直接從redis中取; 寫:非同步話,先寫入redis的快取,就直接返回;定期或特定動作將資料儲存到mysql,可以做到多次更新,一次儲存;

--備註:如果寫redis要使用redis的事務:

127.0.0.1:6379> watch id

ok127.0.0.1:6379> multi

ok127.0.0.1:6379> incr id

queued

127.0.0.1:6379> exec

1) (integer) 342183

127.0.0.1:6379>

方式3:

使用lua指令碼:redis在使用lua使用同時只允許乙個指令碼執行,符合事務的原子性,但乙個lua指令碼不能執行時間過大,不然會阻塞

eval

eval命令對 lua 指令碼進行執行求值。

語法:eval script numkeys key [key …] arg [arg …]

script lua指令碼內容 注意的是指令碼不應該是lua函式。

numkeys 表示指定鍵名引數的個數。

key [key ...] 表示指令碼對應的key值列表 在指令碼中可以使用keys[1] keys[2] keys[3]keys[n] n從1開始 。

arg [arg ...] 命名行中傳遞的引數列表 在指令碼中可以使用ar**[1] ar**[2] ar**[3]ar**[n] n從1開始 。

乙個示例勝過千言萬語的解釋

eval "return " 2 id name 3 mytest

執行上面指令碼返回

1) "id"

2) "name"

3) "2"

4) "mytest"

資料一致性

資料一致性通常指關聯資料之間的邏輯關係是否正確和完整。而資料儲存的一致性模型則可以認為是儲存系統和資料使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統所承諾的訪問結果。常用的一致性模型有 a 嚴格一致性 linearizability,strict atomic consistency ...

資料一致性

丟失更新 未確定的相關性 不一致的分析和幻想讀 事務a讀取與搜尋條件相匹配的若干行。事務b以插入或刪除行等方式來修改事務a的結果集,然後再提交。幻讀是指當事務不是獨立執行時發生的一種現象,例如第乙個事務對乙個表中的資料進行了修改,比如這種修改涉及到表中的 全部資料行 同時,第二個事務也修改這個表中的...

資料一致性

資料一致性通常指關聯資料之間的邏輯關係是否正確和完整。而資料儲存的一致性模型則可以認為是儲存系統和資料使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統所承諾的訪問結果。常用的一致性模型有 a 嚴格一致性 linearizability,strict atomic consistency ...