天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

當(dāng)前位置:主頁 > 論文百科 > 英文數(shù)據(jù)庫 >

4.1.3 WATCH命令介紹

發(fā)布時間:2017-01-02 17:18

  本文關(guān)鍵詞:Redis入門指南,由筆耕文化傳播整理發(fā)布。


> 其他綜合 > Redis入門指南 4.1.3 WATCH命令介紹 2013-06-14 09:53:18         我要投稿   

本文所屬圖書 > Redis入門指南

本書是一本Redis的入門指導(dǎo)書籍,以通俗易懂的方式介紹了Redis基礎(chǔ)與實(shí)踐方面的知識,包括歷史與特性、在開發(fā)和生產(chǎn)環(huán)境中部署運(yùn)行Redis、數(shù)據(jù)類型與命令、使用Redis實(shí)現(xiàn)隊列、事務(wù)、復(fù)制、管道、持久化、優(yōu)化Re...  立即去當(dāng)當(dāng)網(wǎng)訂購

我們已經(jīng)知道在一個事務(wù)中只有當(dāng)所有命令都依次執(zhí)行完后才能得到每個結(jié)果的返回值,可是有些情況下需要先獲得一條命令的返回值,然后再根據(jù)這個值執(zhí)行下一條命令。例如,介紹INCR命令時曾經(jīng)說過使用GET和SET命令自己實(shí)現(xiàn)incr函數(shù)會出現(xiàn)競態(tài)條件,偽代碼如下:

def incr($key)

    $value = GET $key

    if not $value

           $value = 0

    $value = $value + 1

    SET $key, $value

    return $value

肯定會有很多讀者想到可以用事務(wù)來實(shí)現(xiàn)incr函數(shù)以防止競態(tài)條件,可是因?yàn)槭聞?wù)中的每個命令的執(zhí)行結(jié)果都是最后一起返回的,所以無法將前一條命令的結(jié)果作為下一條命令的參數(shù),即在執(zhí)行SET命令時無法獲得GET命令的返回值,也就無法做到增1的功能了。

為了解決這個問題,我們需要換一種思路。即在 GET 獲得鍵值后保證該鍵值不被其他客戶端修改,直到函數(shù)執(zhí)行完成后才允許其他客戶端修改該鍵鍵值,這樣也可以防止競態(tài)條件。要實(shí)現(xiàn)這一思路需要請出事務(wù)家族的另一位成員:WATCH。WATCH命令可以監(jiān)控一個或多個鍵,一旦其中有一個鍵被修改(或刪除),之后的事務(wù)就不會執(zhí)行。監(jiān)控一直持續(xù)到EXEC命令(事務(wù)中的命令是在EXEC之后才執(zhí)行的,所以在MULTI命令后可以修改WATCH監(jiān)控的鍵值),如:

redis> SET key 1

OK

redis> WATCH key

OK

redis> SET key 2

OK

redis> MULTI

OK

redis> SET key 3

QUEUED

redis> EXEC

(nil)

redis> GET key

"2"

上例中在執(zhí)行WATCH命令后、事務(wù)執(zhí)行前修改了key的值(即SET key 2),,所以最后事務(wù)中的命令SET key 3沒有執(zhí)行,EXEC命令返回空結(jié)果。

學(xué)會了WATCH命令就可以通過事務(wù)自己實(shí)現(xiàn)incr函數(shù)了,偽代碼如下:

def incr($key)

    WATCH $key

    $value = GET $key

     if not $value

            $value = 0

     $value = $value + 1

    MULTI

    SET $key, $value

     result = EXEC

    return result[0]

因?yàn)镋XEC命令返回值是多行字符串類型,所以代碼中使用result[0]來獲得其中第一個結(jié)果。

提示  由于WATCH命令的作用只是當(dāng)被監(jiān)控的鍵值被修改后阻止之后一個事務(wù)的執(zhí)行,而不能保證其他客戶端不修改這一鍵值,所以我們需要在EXEC執(zhí)行失敗后重新執(zhí)行整個函數(shù)。

執(zhí)行EXEC命令后會取消對所有鍵的監(jiān)控,如果不想執(zhí)行事務(wù)中的命令也可以使用UNWATCH命令來取消監(jiān)控。比如,我們要實(shí)現(xiàn)hsetxx函數(shù),作用與HSETNX命令類似,只不過是僅當(dāng)字段存在時才賦值。為了避免競態(tài)條件我們使用事務(wù)來完成這一功能:

def hsetxx($key, $field, $value)

    WATCH $key

    $isFieldExists = HEXISTS $key, $field

    if $isFieldExists is 1

          MULTI

          HSET $key, $field, $value

          EXEC

    else

          UNWATCH

    return $isFieldExists

在代碼中會判斷要賦值的字段是否存在,如果字段不存在的話就不執(zhí)行事務(wù)中的命令,但需要使用UNWATCH命令來保證下一個事務(wù)的執(zhí)行不會受到影響。

點(diǎn)擊復(fù)制鏈接 與好友分享!回本站首頁 您對本文章有什么意見或著疑問嗎?請到論壇討論您的關(guān)注和建議是我們前行的參考和動力   上一篇:4.1.2 錯誤處理 下一篇:4.2 生存時間 相關(guān)文章

4.1.3 關(guān)系數(shù)據(jù)庫系統(tǒng)的查詢優(yōu)化

1.3.4 命令行工具

4.2.1 命令介紹

4.3.2 SORT命令

2.2.1 mysql命令行

3.1 圖形制作的基本命令與相關(guān)操作

3.1.1 圖形制作的基本命令

1.3.2 命令行參數(shù)

2.4.3 調(diào)用系統(tǒng)命令執(zhí)行

2.2.2 基本命令

圖文推薦

4.1.3 WATCH命令介紹

排行熱門

文章 下載 讀書

· Win2000下關(guān)閉無用端口 · 禁止非法用戶登錄綜合設(shè)置 [win9x篇] · 關(guān)上可惡的后門——消除NetBIOS隱患 · 網(wǎng)絡(luò)入侵檢測系統(tǒng) · 潛伏在Windows默認(rèn)設(shè)置中的陷井 · 調(diào)制解調(diào)器的不安全 · 構(gòu)建Windows 2000服務(wù)器的安全防護(hù)林 · SQL Server 2000的安全配置 · Windows優(yōu)化大師注冊機(jī)源碼 · Aspcode動畫教程 · WIN 2000服務(wù)器防止ICMP數(shù)據(jù)包攻擊教程 · 實(shí)現(xiàn)網(wǎng)絡(luò)隱身的簡單方法 · 手工進(jìn)行克隆帳號 · 用W32DASM破解網(wǎng)頁合并器的密碼 · 注冊表操作動畫教程 · 冰河陷阱v1.2 · 黑客攻防技術(shù)寶典:Web實(shí)戰(zhàn)篇(第2版) · 超級網(wǎng)管員——網(wǎng)絡(luò)安全 · 代碼大全(第二版) · 軟件之道:軟件開發(fā)爭議問題剖析 · CSS插件工具箱 · CSS入門經(jīng)典(第3版) ·  · CMMI+敏捷整合開發(fā)


  本文關(guān)鍵詞:Redis入門指南,由筆耕文化傳播整理發(fā)布。



本文編號:232044

資料下載
論文發(fā)表

本文鏈接:http://sikaile.net/wenshubaike/mishujinen/232044.html


Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

版權(quán)申明:資料由用戶7b665***提供,本站僅收錄摘要或目錄,作者需要刪除請E-mail郵箱bigeng88@qq.com