最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis 事務知識點相關(guān)總結(jié)

 更新時間:2021年03月25日 11:19:19   作者:AsiaYe  
這篇文章主要介紹了Redis 事務相關(guān)總結(jié),幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下

Redis中的事務介紹
    MySQL中的事務大家都不陌生,Redis中的事務和MySQL中的事務不同,今天看下Redis事務中的一些知識點吧。

01 事務簡介

    Redis中的事務使用multi、exec來標記,其中multi代表事務開始,exec代表事務結(jié)束,multi和exec之間的命令是原子順序執(zhí)行的。下面是一個例子:

127.0.0.1:7397> multi
OK
127.0.0.1:7397> set key_hello hello
QUEUED
127.0.0.1:7397> set key_world world
QUEUED
127.0.0.1:7397> exec
1) OK
2) OK

 需要注意的是,命令執(zhí)行的中間結(jié)果返回都是queued,也就是說放到了隊列里面,沒有真正執(zhí)行。在exec之前,如果使用get命令來查看當前的key_hello或者key_world的值,是無法獲取到的。

02 命令錯誤導致的事務提交失敗,所有命令都不執(zhí)行

  如果調(diào)用API的時候,拼寫錯誤,則會造成整個事務無法執(zhí)行,例如下面的例子:

127.0.0.1:7397> multi
OK
127.0.0.1:7397> incr counter
QUEUED
127.0.0.1:7397> sett key_a aa
(error) ERR unknown command `sett`, with args beginning with: `key_a`, `aa`, 
127.0.0.1:7397> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:7397> get counter
"10"

 可以看到,因為set拼寫錯誤,寫成了sett,整個事務內(nèi)部的所有動作都失效。exec命令也報錯。

03 運行時錯誤導致數(shù)據(jù)錯誤

 如果語法正確,但是在運行的時候出現(xiàn)了"運行時"錯誤,例如元素的類型和操作符不匹配,例如對字符型值進行自增操作,如下:

127.0.0.1:7397> get key_a
"a"
127.0.0.1:7397> get key_b
"b"
127.0.0.1:7397> multi
OK
127.0.0.1:7397> incr key_a
QUEUED
127.0.0.1:7397> set key_b bbb
QUEUED
127.0.0.1:7397> exec
1) (error) ERR value is not an integer or out of range
2) OK
127.0.0.1:7397> get key_b
"bbb"

  對key_a進行自增這類錯誤,它的語法是正確的,但是由于key_a是字符型的,自增操作是不合適的,事務中還對key_b進行了賦值操作,在執(zhí)行exec的時候,key_b的值是被修改的,從"b"變成了“bbb”。

04 丟棄事務

   直接看例子,在執(zhí)行的最后,使用discard關(guān)鍵字對事務進行丟棄,那么事務執(zhí)行過程中產(chǎn)生的key是沒有值的。

127.0.0.1:7397> multi
OK
127.0.0.1:7397> set key_aa aa
QUEUED
127.0.0.1:7397> set key_bb bb
QUEUED
127.0.0.1:7397> set key_cc cc
QUEUED
127.0.0.1:7397> discard
OK
127.0.0.1:7397> get key_aa
(nil)
127.0.0.1:7397> get key_bb
(nil)
127.0.0.1:7397> get key_cc
(nil)

05 watch命令

  有些場景中,需要在事務之前,確保事務中的key沒有被其他客戶端修改過,才執(zhí)行事務,否則不執(zhí)行事務,redis提供了watch命令來解決這類問題。

正確場景:

127.0.0.1:7397> watch key_a
OK
127.0.0.1:7397> multi
OK
127.0.0.1:7397> set key_a aaa
QUEUED
127.0.0.1:7397> exec
1) OK
127.0.0.1:7397> get key_a
"aaa"

使用watch監(jiān)控key_a的值,在exec之前,key_a的值沒有被其他事務修改過,那么exec的結(jié)果是成功的。

錯誤場景:

127.0.0.1:7397> watch key_a
OK
127.0.0.1:7397> get key_a
"aaa"
----------------------------------------
此時在另外一個session上執(zhí)行set key_a aaaaaa
----------------------------------------
127.0.0.1:7397> multi 
OK
127.0.0.1:7397> set key_a a
QUEUED
127.0.0.1:7397> exec
(nil)

在watch的過程中,其他session對key_a的值進行了修改,那么會造成exec執(zhí)行失敗,返回nil

06 總結(jié)

1、Redis事務就是一次性、順序性、排他性的執(zhí)行一個隊列中的一系列命令,分為三個過程:開始事務、命令入隊、執(zhí)行事務。

2、Redis提供了簡單的事務,使用multi、exec、discard這三個命令來控制

3、exec命令前,所有的原子操作都被放在隊列中緩存,并不會真正執(zhí)行

4、Redis事務不存在隔離級別的概念

5、事務中的單條命令是原子執(zhí)行的,但是事務本身不保證原子性,沒有回滾機制

以上就是Redis 事務相關(guān)總結(jié)的詳細內(nèi)容,更多關(guān)于Redis 事務的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • redis單線程快的原因和原理

    redis單線程快的原因和原理

    在本篇文章中小編給大家整理了關(guān)于redis單線程為什么快的原因和具體實例,有興趣的朋友們可以參考下。
    2019-06-06
  • redis監(jiān)聽key過期事件的詳細步驟

    redis監(jiān)聽key過期事件的詳細步驟

    本文主要介紹了redis監(jiān)聽key過期事件的詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Redis實現(xiàn)排行榜及相同積分按時間排序功能的實現(xiàn)

    Redis實現(xiàn)排行榜及相同積分按時間排序功能的實現(xiàn)

    這篇文章主要介紹了Redis實現(xiàn)排行榜及相同積分按時間排序,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • redis-cli創(chuàng)建redis集群的實現(xiàn)

    redis-cli創(chuàng)建redis集群的實現(xiàn)

    本文主要介紹了redis-cli創(chuàng)建redis集群的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • 在redis中存儲ndarray的示例代碼

    在redis中存儲ndarray的示例代碼

    在Redis中存儲NumPy數(shù)組(ndarray)通常需要將數(shù)組轉(zhuǎn)換為二進制格式,然后將其存儲為字符串,這篇文章給大家介紹了在redis中存儲ndarray的示例代碼,感興趣的朋友一起看看吧
    2024-02-02
  • 詳談redis跟數(shù)據(jù)庫的數(shù)據(jù)同步問題

    詳談redis跟數(shù)據(jù)庫的數(shù)據(jù)同步問題

    文章討論了在Redis和數(shù)據(jù)庫數(shù)據(jù)一致性問題上的解決方案,主要比較了先更新Redis緩存再更新數(shù)據(jù)庫和先更新數(shù)據(jù)庫再更新Redis緩存兩種方案,文章指出,刪除Redis緩存后再更新數(shù)據(jù)庫的方案更優(yōu),因為它可以避免數(shù)據(jù)不一致的問題,但可能產(chǎn)生高并發(fā)問題
    2025-01-01
  • redis在Linux系統(tǒng)下的環(huán)境配置和redis的全局命令大全

    redis在Linux系統(tǒng)下的環(huán)境配置和redis的全局命令大全

    在Linux系統(tǒng)中我們經(jīng)常使用Redis作為高性能的緩存數(shù)據(jù)庫,然而有時候我們需要在系統(tǒng)中多個地方使用Redis命令,這就需要將Redis的全局命令設(shè)置好,這篇文章主要給大家介紹了關(guān)于redis在Linux系統(tǒng)下的環(huán)境配置和redis的全局命令大全的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • Redis增減庫存避坑的實現(xiàn)

    Redis增減庫存避坑的實現(xiàn)

    在電商平臺或者倉庫管理系統(tǒng)中,庫存的管理是非常重要的一項任務,本文主要介紹了Redis增減庫存避坑的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Redis分布式鎖的實現(xiàn)方式(redis面試題)

    Redis分布式鎖的實現(xiàn)方式(redis面試題)

    這篇文章主要介紹了Redis分布式鎖的實現(xiàn)方式(面試常見),需要的朋友可以參考下
    2020-01-01
  • Redis 事務知識點相關(guān)總結(jié)

    Redis 事務知識點相關(guān)總結(jié)

    這篇文章主要介紹了Redis 事務相關(guān)總結(jié),幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下
    2021-03-03

最新評論

北辰区| 石门县| 射阳县| 全椒县| 永康市| 邯郸市| 濉溪县| 冕宁县| 太保市| 漠河县| 襄城县| 北碚区| 旅游| 晋江市| 封丘县| 蓝田县| 黑龙江省| 梁河县| 曲麻莱县| 霍州市| 嘉荫县| 江西省| 富裕县| 河南省| 新邵县| 湄潭县| 富民县| 团风县| 盐源县| 民县| 庆云县| 孟州市| 固阳县| 乌审旗| 谢通门县| 龙门县| 鄂伦春自治旗| 克什克腾旗| 调兵山市| 五寨县| 乐山市|