1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      redis演練(3)redis事務管理

      redis vs memcached。

      成都創(chuàng)新互聯(lián)公司于2013年成立,先為保亭黎族等服務建站,保亭黎族等地企業(yè),進行企業(yè)商務咨詢服務。為保亭黎族企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。

      redis與memcached對比,redis不僅適合做緩存,而且可以做存儲,這就有點數(shù)據(jù)庫的影子了。說到數(shù)據(jù)庫,事務是一個很重要的一個方面。

      數(shù)據(jù)庫事務

      (簡稱:事務)是數(shù)據(jù)庫管理系統(tǒng)執(zhí)行過程中的一個邏輯單位,由一個有限的數(shù)據(jù)庫操作序列構(gòu)成。

      一個數(shù)據(jù)庫事務通常包含了一個序列的對數(shù)據(jù)庫的讀/寫操作。它的存在包含有以下兩個目的:
      1.為數(shù)據(jù)庫操作序列提供了一個從失敗中恢復到正常狀態(tài)的方法,同時提供了數(shù)據(jù)庫即使在異常狀態(tài)下仍能保持一致性的方法。
      2.當多個應用程序在并發(fā)訪問數(shù)據(jù)庫時,可以在這些應用程序之間提供一個隔離方法,以防止彼此的操作互相干擾。

      事務約束

      當事務被提交給了DBMS(數(shù)據(jù)庫管理系統(tǒng)),則DBMS(數(shù)據(jù)庫管理系統(tǒng))需要確保該事務中的所有操作都成功完成且其結(jié)果被永久保存在數(shù)據(jù)庫中,如果事務中有的操作沒有成功完成,則事務中的所有操作都需要被回滾,回到事務執(zhí)行前的狀態(tài);同時,該事務對數(shù)據(jù)庫或者其他事務的執(zhí)行無影響,所有的事務都好像在獨立的運行。

      通過事務的約束條件,可以總結(jié)出四個特點

      原子性(Atomicity):事務作為一個整體被執(zhí)行,包含在其中的對數(shù)據(jù)庫的操作要么全部被執(zhí)行,要么都不執(zhí)行。
      一致性(Consistency):事務應確保數(shù)據(jù)庫的狀態(tài)從一個一致狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€一致狀態(tài)。一致狀態(tài)的含義是數(shù)據(jù)庫中的數(shù)據(jù)應滿足完整性約束
      隔離性(Isolation):多個事務并發(fā)執(zhí)行時,一個事務的執(zhí)行不應影響其他事務的執(zhí)行
      持久性(Durability):已被提交的事務對數(shù)據(jù)庫的修改應該永久保存在數(shù)據(jù)庫中

      有興趣的更深了解事務相關(guān),可以關(guān)注下事務傳播屬性,事務隔離級別。

      本文主要演練下redis對事務的支持效果。

      1 相關(guān)命令

      redis演練(3) redis事務管理

      命令
      作用
      可用版本
      時間復雜度返回值
      WATCH key [key ...]

      監(jiān)視一個(或多個) key ,如果在事務執(zhí)行之前這個(或這些) key 被其他命令所改動,那么事務將被打斷。


      >= 2.2.0

      O(1)


      總是返回 OK


      MULTI
      標記一個事務塊的開始>= 1.2.0O(1)總是返回 OK
      EXEC

      執(zhí)行所有事務塊內(nèi)的命令。

      假如某個(或某些) key 正處于 WATCH 命令的監(jiān)視之下,且事務塊中有和這個(或這些) key 相關(guān)的命令,那么 EXEC 命令只在這個(或這些) key 沒有被其他命令所改動的情況下執(zhí)行并生效,否則該事務被打斷(abort)。

       >= 1.2.0
      事務塊內(nèi)所有命令的時間復雜度的總和事務塊內(nèi)所有命令的返回值,按命令執(zhí)行的先后順序排列。
          當操作被打斷時,返回空值 nil 。


      DISCARD取消事務,放棄執(zhí)行事務塊內(nèi)的所有命令。

      如果正在使用 WATCH 命令監(jiān)視某個(或某些) key,那么取消所有監(jiān)視,等同于執(zhí)行命令 UNWATCH 。
      >= 2.0.0O(1)總是返回 OK 。
      UNWATCH
      取消 WATCH 命令對所有 key 的監(jiān)視。

      如果在執(zhí)行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被執(zhí)行了的話,那么就不需要再執(zhí)行 UNWATCH 了。

      因為 EXEC 命令會執(zhí)行事務,因此 WATCH 命令的效果已經(jīng)產(chǎn)生了;而 DISCARD 命令在取消事務的同時也會取消所有對 key 的監(jiān)視,因此這兩個命令執(zhí)行之后,就沒有必要執(zhí)行 UNWATCH 了。
      >= 2.2.0O(1)總是 OK 。

      上面,自己僅僅進行了整理,沒什么好說的。重點是演練

      2.命令演練

      2.1MULTI ,起聲明事務的意思。表示“下面的命令,打個包做個整體”但不絕對。

      127.0.0.1:6379> incr bar
      (integer) 1
      127.0.0.1:6379> incr foo
      (integer) 1
      #事務開始
      127.0.0.1:6379> multi
      OK
      #發(fā)出的命令,直接返回QUEUED,放入隊列,不立即執(zhí)行
      127.0.0.1:6379> incr bar
      QUEUED
      127.0.0.1:6379> incr foo
      QUEUED
      #執(zhí)行所有事務塊內(nèi)的命令
      127.0.0.1:6379> exec
      1) (integer) 2
      2) (integer) 2
      
      #演示語法出錯情況,直接停止事務
      127.0.0.1:6379> incr bar
      QUEUED
      127.0.0.1:6379> incrbar
      (error) ERR unknown command 'incrbar'
      127.0.0.1:6379> exec
      (error) EXECABORT Transaction discarded because of previous errors.
      #事務不允許連續(xù)聲明
      127.0.0.1:6379> multi
      OK
      127.0.0.1:6379> multi
      (error) ERR MULTI calls can not be nested
      
      #演示命令參數(shù)不匹配,部分成功
      127.0.0.1:6379> multi
      OK
      127.0.0.1:6379> incr bar
      QUEUED
      127.0.0.1:6379> lpush bar "value2"
      QUEUED
      127.0.0.1:6379> exec
      1) (integer) 2
      2) (error) WRONGTYPE Operation against a key holding the wrong kind of value

      結(jié)論

      multi:不支持嵌套

      redis對事務的支持,不嚴謹。不太符合ACID中的原子性。

      Redis 在事務失敗時不進行回滾,而是繼續(xù)執(zhí)行余下的命令”

      如果你有使用關(guān)系式數(shù)據(jù)庫的經(jīng)驗, 那么 “Redis 在事務失敗時不進行回滾,而是繼續(xù)執(zhí)行余下的命令”這種做法可能會讓你覺得有點奇怪。

      以下是這種做法的優(yōu)點:

      • Redis 命令只會因為錯誤的語法而失敗(并且這些問題不能在入隊時發(fā)現(xiàn)),或是命令用在了錯誤類型的鍵上面:這也就是說,從實用性的角度來說,失敗的命令是由編程錯誤造成的,而這些錯誤應該在開發(fā)的過程中被發(fā)現(xiàn),而不應該出現(xiàn)在生產(chǎn)環(huán)境中。

      • 因為不需要對回滾進行支持,所以 Redis 的內(nèi)部可以保持簡單且快速。

      2.discard,"丟棄”意思。表示“上面的命令,統(tǒng)統(tǒng)都不要了”有點rollback的影子,但又不是。discard的意思,是把隊列中的命令舍棄掉,這時候還沒有發(fā)出命令。

      127.0.0.1:6379> multi
      OK
      127.0.0.1:6379> discard
      OK
      127.0.0.1:6379> multi
      OK
      127.0.0.1:6379> incr bar
      QUEUED
      127.0.0.1:6379> incr foo
      QUEUED
      127.0.0.1:6379> discard
      OK

      2.1 WATCH :含義“監(jiān)視”。表示“這是我的菜,其他人靠邊站”。

      127.0.0.1:6379> flushdb
      OK
      127.0.0.1:6379> multi
      OK
      #watch命令不能在事務里出現(xiàn),否則ERR
      127.0.0.1:6379> watch bar
      (error) ERR WATCH inside MULTI is not allowed
      
      #監(jiān)控bar,bar不再是隨便的key了,不允許隨便修改了。
      127.0.0.1:6379> watch bar
      OK
      #事務之前,沒有修改bar,事務成功
      127.0.0.1:6379> multi
      OK
      127.0.0.1:6379> incr bar
      QUEUED
      127.0.0.1:6379> exec
      1) (integer) 1
      #exec,將watch 打斷,重新watch
      127.0.0.1:6379> watch bar
      OK
      ##事務之前,修改bar,事務失敗
      127.0.0.1:6379> incr bar
      (integer) 2
      127.0.0.1:6379> multi
      OK
      127.0.0.1:6379> incr bar
      QUEUED
      127.0.0.1:6379> exec
      (nil)

      網(wǎng)站題目:redis演練(3)redis事務管理
      網(wǎng)頁URL:http://ef60e0e.cn/article/pghodo.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        西昌市| 温泉县| 盘锦市| 西畴县| 开远市| 县级市| 新兴县| 石首市| 增城市| 曲周县| 波密县| 平潭县| 秦安县| 调兵山市| 广平县| 海安县| 太仆寺旗| 蚌埠市| 江西省| 襄汾县| 和平区| 宽甸| 临沧市| 富源县| 丁青县| 来宾市| 琼海市| 修水县| 连城县| 龙门县| 姜堰市| 石屏县| 贡觉县| 商南县| 城固县| 黄大仙区| 阜南县| 抚宁县| 定兴县| 泰州市| 乐东|