亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

01 事務(wù)簡介

    Redis中的事務(wù)使用multi、exec來標(biāo)記,其中multi代表事務(wù)開始,exec代表事務(wù)結(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命令來查看當(dāng)前的key_hello或者key_world的值,是無法獲取到的。

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

  如果調(diào)用API的時候,拼寫錯誤,則會造成整個事務(wù)無法執(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,整個事務(wù)內(nèi)部的所有動作都失效。exec命令也報錯。

03 運(yùn)行時錯誤導(dǎo)致數(shù)據(jù)錯誤

 如果語法正確,但是在運(yùn)行的時候出現(xiàn)了"運(yùn)行時"錯誤,例如元素的類型和操作符不匹配,例如對字符型值進(jì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進(jìn)行自增這類錯誤,它的語法是正確的,但是由于key_a是字符型的,自增操作是不合適的,事務(wù)中還對key_b進(jìn)行了賦值操作,在執(zhí)行exec的時候,key_b的值是被修改的,從"b"變成了“bbb”。

04 丟棄事務(wù)

   直接看例子,在執(zhí)行的最后,使用discard關(guān)鍵字對事務(wù)進(jìn)行丟棄,那么事務(wù)執(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命令

  有些場景中,需要在事務(wù)之前,確保事務(wù)中的key沒有被其他客戶端修改過,才執(zhí)行事務(wù),否則不執(zhí)行事務(wù),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的值沒有被其他事務(wù)修改過,那么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的值進(jìn)行了修改,那么會造成exec執(zhí)行失敗,返回nil

06 總結(jié)

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

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

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

4、Redis事務(wù)不存在隔離級別的概念

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

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

相關(guān)文章

  • 深入解析Redis中常見的應(yīng)用場景

    深入解析Redis中常見的應(yīng)用場景

    這篇文章主要給大家介紹了關(guān)于Redis中常見的應(yīng)用場景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Redis優(yōu)化經(jīng)驗總結(jié)(必看篇)

    Redis優(yōu)化經(jīng)驗總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄猂edis優(yōu)化經(jīng)驗總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Redis哨兵模式的實現(xiàn)

    Redis哨兵模式的實現(xiàn)

    Redis的哨兵模式是一種用于自動監(jiān)控Redis實例狀態(tài)并在主服務(wù)器出現(xiàn)故障時自動切換到從服務(wù)器的機(jī)制,本文主要介紹了Redis哨兵模式的實現(xiàn),感興趣的可以了解一下
    2024-02-02
  • Redis中的配置文件,數(shù)據(jù)持久化,事務(wù)

    Redis中的配置文件,數(shù)據(jù)持久化,事務(wù)

    這篇文章主要介紹了Redis中的配置文件,數(shù)據(jù)持久化,事務(wù)問題,具有很好的參考價值,希望對大家有所幫助。
    2022-12-12
  • 在CentOS 7環(huán)境下安裝Redis數(shù)據(jù)庫詳解

    在CentOS 7環(huán)境下安裝Redis數(shù)據(jù)庫詳解

    Redis是一個開源的、基于BSD許可證的,基于內(nèi)存的、鍵值存儲NoSQL數(shù)據(jù)本篇文章主要介紹了在CentOS 7環(huán)境下安裝Redis數(shù)據(jù)庫詳解,有興趣的可以了解一下。
    2016-11-11
  • Redis定期刪除過期數(shù)據(jù)的操作流程

    Redis定期刪除過期數(shù)據(jù)的操作流程

    Redis是一種內(nèi)存級數(shù)據(jù)庫,所有數(shù)據(jù)均存放在內(nèi)存中,內(nèi)存中的數(shù)據(jù)可以通過TTL指令獲取其狀態(tài),本文給大家介紹了Redis定期刪除過期數(shù)據(jù)的操作流程,文中通過代碼示例介紹的講解的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • redis復(fù)制集群搭建的實現(xiàn)

    redis復(fù)制集群搭建的實現(xiàn)

    redis 復(fù)制集群是開發(fā)中一種比較常用的集群模式,本文主要介紹了redis復(fù)制集群搭建的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 配置Redis序列化方式不生效問題及解決

    配置Redis序列化方式不生效問題及解決

    這篇文章主要介紹了配置Redis序列化方式不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Redis中LFU算法的深入分析

    Redis中LFU算法的深入分析

    這篇文章主要給大家介紹了關(guān)于Redis中LFU算法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Redis中Redisson布隆過濾器的學(xué)習(xí)

    Redis中Redisson布隆過濾器的學(xué)習(xí)

    布隆過濾器是一個非常長的二進(jìn)制向量和一系列隨機(jī)哈希函數(shù)的組合,可用于檢索一個元素是否存在,本文就詳細(xì)的介紹一下Redisson布隆過濾器,具有一定的參考價值,感興趣的可以了解一下
    2022-05-05

最新評論