欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

redis中的事務(wù)操作案例分析

 更新時間:2019年07月10日 09:46:49   作者:webbc  
這篇文章主要介紹了redis中的事務(wù)操作案例,結(jié)合具體實例形式詳細分析了redis事務(wù)操作的概念、原理、使用技巧與相關(guān)注意事項,需要的朋友可以參考下

本文實例講述了redis中的事務(wù)操作。分享給大家供大家參考,具體如下:

redis與mysql的事務(wù)

Redis支持簡單的事務(wù)

簡單使用

講張三的100圓錢轉(zhuǎn)賬給lisi:

set zhangsan 800
set lisi 100
multi
decrby zhangsan 100
incrby lisi 100
exec

失敗的兩種情況

在mutil后面的語句中, 語句出錯可能有2種情況,還是以轉(zhuǎn)賬的情況來分析:

(1)語法就有問題

127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby zhang 100
QUEUED
127.0.0.1:6379> hasdfasdf
(error) ERR unknown command 'hasdfasdf'
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> mget zhang wang
1) "800"
2) "100"

這種,exec時,報錯, 所有語句得不到執(zhí)行,所以還是800和100圓

(2)語法本身沒錯,但適用對象有問題

127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby zhang 100
QUEUED
127.0.0.1:6379> sadd wang 1
QUEUED
127.0.0.1:6379> exec
1) (integer) 700
2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> mget zhang wang
1) "700"
2) "100"

Exec之后,會執(zhí)行正確的語句,并跳過有不適當?shù)恼Z句,所以這里是一個700圓一個100圓了

案例

假設(shè)買票案例,當前只有1張票和100塊錢,如果我在買票的過程中,在我multi之后,和exec之前,票被別人買了—即ticket已經(jīng)變成0了,然后我們執(zhí)行exec的時候就會將票變?yōu)?1,這就不對了。

127.0.0.1:6379> set ticket 1
OK
127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decr ticket
QUEUED
127.0.0.1:6379> decrby money 10

QUEUED
127.0.0.1:6379> exec
1) (integer) -1
2) (integer) 90

使用watch來檢測票有沒有被買走

實用watch來檢測指定的key,負責(zé)監(jiān)測key沒有被改動。

127.0.0.1:6379> set ticket 1
OK
127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> watch ticket
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decr ticket
QUEUED
127.0.0.1:6379> decrby money 10
QUEUED
127.0.0.1:6379> exec
(nil)//返回nil,說明監(jiān)視的ticket已經(jīng)改變了,事務(wù)就取消了.
127.0.0.1:6379> mget ticket money
1) "0"
2) "100"

在執(zhí)行exec之前,票被買走了,ticket為0了,然后執(zhí)行exec后,發(fā)現(xiàn)ticket被動了,所以就不執(zhí)行事務(wù)了,事務(wù)被取消了。在執(zhí)行exec的時候返回nil。

watch相關(guān)用法

watch key1 key2 ... keyN

作用:監(jiān)聽key1 key2..keyN有沒有變化,如果有變, 則事務(wù)取消

unwatch

作用:取消所有watch監(jiān)聽

希望本文所述對大家Redis數(shù)據(jù)庫程序設(shè)計有所幫助。

相關(guān)文章

  • Redis 高可用與集群原理深度解析

    Redis 高可用與集群原理深度解析

    Redis高可用機制涵蓋主從復(fù)制、哨兵自動故障轉(zhuǎn)移及Cluster集群分片與高可用,依賴Gossip協(xié)議實現(xiàn)節(jié)點通信與狀態(tài)同步,源碼解析了故障轉(zhuǎn)移流程,為后續(xù)持久化內(nèi)容奠定基礎(chǔ),本文給大家介紹Redis高可用與集群原理,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • Redis安裝啟動及常見數(shù)據(jù)類型

    Redis安裝啟動及常見數(shù)據(jù)類型

    這篇文章主要介紹了Redis安裝啟動及常見數(shù)據(jù)類型,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 詳解Redis Stream做消息隊列

    詳解Redis Stream做消息隊列

    這篇文章主要介紹了詳解Redis Stream做消息隊列,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • redis查詢keys報錯的實現(xiàn)

    redis查詢keys報錯的實現(xiàn)

    在Redis中使用KEYS命令來查詢所有符合特定模式的鍵名是一個常見需求,本文主要介紹了redis查詢keys報錯的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • redis 用scan指令 代替keys指令(詳解)

    redis 用scan指令 代替keys指令(詳解)

    下面小編就為大家分享一篇redis 用scan指令 代替keys指令詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Redis事務(wù)與數(shù)據(jù)持久化方式

    Redis事務(wù)與數(shù)據(jù)持久化方式

    該文檔主要介紹了Redis事務(wù)和持久化機制,事務(wù)通過將多個命令打包執(zhí)行,而持久化則通過快照(RDB)和追加式文件(AOF)兩種方式將內(nèi)存數(shù)據(jù)保存到磁盤,以防止數(shù)據(jù)丟失
    2025-01-01
  • redis實現(xiàn)共同好友的思路詳解

    redis實現(xiàn)共同好友的思路詳解

    微信朋友圈大家都玩過吧,那么朋友圈的點贊、評論只能看到自己好友的信息是怎么操作的呢?下面通過本文給大家分享下此功能的實現(xiàn)流程,對redis實現(xiàn)共同好友的方法感興趣的朋友一起看看吧
    2021-05-05
  • Redis客戶端連接機制的實現(xiàn)方案

    Redis客戶端連接機制的實現(xiàn)方案

    本文主要介紹了Redis客戶端連接機制的實現(xiàn)方案,包括事件驅(qū)動模型、非阻塞I/O處理、連接池應(yīng)用及配置優(yōu)化,具有一定的參考價值,感興趣的可以了解一下
    2025-07-07
  • Redis 內(nèi)存碎片原因及清理

    Redis 內(nèi)存碎片原因及清理

    內(nèi)存碎片是指在內(nèi)存分配的時候,產(chǎn)生的不能重復(fù)利用的空間,本文主要介紹了Redis 內(nèi)存碎片原因及清理,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 如何使用redis中的zset實現(xiàn)滑動窗口限流

    如何使用redis中的zset實現(xiàn)滑動窗口限流

    滑動窗口限流是一種常見的流量控制方法,它限制了在一定時間窗口內(nèi)的請求數(shù)量,下面是使用Redis ZSet實現(xiàn)滑動窗口限流的一個簡單示例,需要的朋友可以參考下
    2023-09-09

最新評論