一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - redis中事務機制及樂觀鎖的實現

redis中事務機制及樂觀鎖的實現

2019-11-10 15:53小禾點點 Redis

這篇文章主要介紹了redis中事務機制及樂觀鎖的相關內容,通過事務的執行分析Redis樂觀鎖,具有一定參考價值,需要的朋友可以了解下。

Redis事務機制

在MySQL等其他數據庫中,事務表示的是一組動作,這組動作要么全部執行,要么全部不執行。 

 Redis目前對事物的支持相對簡單。Redis只能保證一個client發起的事務中的命令可以連續的執行,而中間不會插入其他的client命令。當一個client在一個鏈接中發出multi命令時,這個鏈接會進入一個事務上下文,該連接后續的命令不會立即執行,而是先放到一個隊列中,當執行exec命令時,redis會順序的執行隊列中的所有命令。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Multi 開啟事務:
127.0.0.1:6379[1]> multi #開啟事務
OK
127.0.0.1:6379[1]> set age 15 #數據操作命令
QUEUED
127.0.0.1:6379[1]> set age 20 #數據操作命令
QUEUED
127.0.0.1:6379[1]> exec #執行事務
1) OK
2) OK
127.0.0.1:6379[1]> get age
"20"
Discard:取消事務,該命令實際是清空事務隊列中的命令并退出事務上下文,也就是事務回滾。
127.0.0.1:6379[1]> get age
"20"
127.0.0.1:6379[1]> multi
OK
127.0.0.1:6379[1]> set age 25
QUEUED
127.0.0.1:6379[1]> set age 30
QUEUED
127.0.0.1:6379[1]> discard #清空事務隊列
OK
127.0.0.1:6379[1]> get age
"20"

注意redis事務問題:通常事務隊列中如果有一個事務失敗則整個事務都會回滾,但在redis中其他事務命令不會回滾。

 樂觀鎖:redis大多數是基于數據版本(version)的記錄機制實現的。即為數據增加一個版本標識,在基于數據庫表的版本解決方案中,一般是通過為數據庫表添加一個version字段來實現。在讀取數據時,將此版本號一同讀出,之后更新時對此版本號加1。此時,將提交數據的版本號與數據庫表對應記錄的當前版本號進行對比,如果提交的數據版本號大于數據庫當前版本號,則予以更新,否則認為是過期數據。

watch監控:watch命令會監控給定的key,當exec時如果監視的key從調用watch后發生過變化,則整個事務會失敗。也可以調用watch多次監視多個key,這樣就對指定事務key加樂觀鎖了。注意watch的key是對整個鏈接有效的,事務也一樣。如果鏈接斷開,監視和事務都會被自動清除。當然exex、discard、unwatch命令都會自動清除鏈接中的所有監視。

在redis中對樂觀鎖的實現:

假設有一個age的key,我們開啟兩個session來對age進行賦值操作。

session1:

?
1
2
3
4
5
6
127.0.0.1:6379> get age
"10"
127.0.0.1:6379> watch age #打開對age鍵的監控(監控其他操作是否對age鍵有修改操作)
OK
127.0.0.1:6379> multi #開啟事務上下文
OK

session2:

?
1
2
3
4
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> get age
"20"

在session2中直接操作age

再看session1:

?
1
2
3
4
5
6
127.0.0.1:6379> set age 30 #在session2中操作age后,我們在session1中繼續操作age
QUEUED
127.0.0.1:6379> exec #執行事務 返回nil 事務執行不成功。
(nil)
127.0.0.1:6379> get age
"20"

在這里我們發現事務不能執行成功,這就是因為session1中的數據版本已經小于數據庫中的數據版本。這就是redis中的樂觀鎖。

行百里者半九十。

總結

以上就是本文關于redis中事務機制及樂觀鎖的實現的全部內容,希望對大家有所幫助,如有不足之處,歡迎留言指出,小編會及時回復大家并進行改正,感謝朋友們對本站的支持!

延伸 · 閱讀

精彩推薦
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
主站蜘蛛池模板: 亚洲毛片免费看 | 第一次处破女18分钟 | 高清不卡免费一区二区三区 | 国产在线观看人成激情视频 | 四虎影院精品 | 99久久精品免费看国产四区 | 成年视频在线播放 | 国产麻豆精品原创 | 国产精品麻豆免费版 | 性free非洲老妇 | 擦逼视频 | 天作谜案免费完整版在线观看 | 情缘免费观看完整版 | 9丨精品国产高清自在线看 9久热这里只有精品免费 | 国产精品久久久久jk制服 | 四虎私人影院 | 高清视频大片免费观看 | 9久re在线观看视频精品 | 免费观看一级欧美在线视频 | 亚洲va天堂va国产va久久 | 国产在线观看网站 | 免费91麻豆精品国产自产在线观看 | 99re热精品这里精品 | 韩国三级年轻小的胰子完整 | 舔逼 | 欧美日韩在线观看一区二区 | 91综合精品网站久久 | 日韩欧美一区黑人vs日本人 | 日韩成a人片在线观看日本 日韩不卡一区二区 | 把女的下面扒开添视频 | 猫咪免费人成网站在线观看入口 | 国产成人精品实拍在线 | 亚洲精品久久久成人 | 国产精品酒店视频免费看 | 成人高辣h视频一区二区在线观看 | 视频在线观看大片 | 亚洲阿v天堂2018在线观看 | 美国videos| 亚洲va久久久噜噜噜久久狠狠 | 国产欧美日韩精品一区二区三区 | 国产精品久久久久久福利 |