新聞中心
Redis(Remote Dictionary Server)是一種開源的、內存緩存數據庫,它能夠以高效的速度獲取數據,因此,對于一些在線服務,它是非常的有用的。但是Redis并不能滿足原子性操作,這也是Redis的一個缺點。

最常見的情況是,當多個客戶端同時向服務器發(fā)起原子性操作(如計數等),服務器必須阻止一個請求,直到另一個請求完成才能繼續(xù)處理。這也就是所謂的事務。在Redis中,沒有原子性操作來支持事務,所以,當多個用戶端同時向服務器發(fā)起請求時,會出現數據不一致的狀況。
Redis可以使用watch命令實現樂觀鎖,這個命令允許客戶端監(jiān)視一個鍵,當值發(fā)生改變時,客戶端就會收到talkback回復,然后才能開始一個事務來更新值。但是,這種機制只是避免客戶端訪問沖突,依然不滿足原子性操作需求。
為了解決這個問題,Redis提供了一個“l(fā)ua腳本”功能,它可以用來在Redis中執(zhí)行原子性操作,保證數據的完整性。例如,下面的Lua腳本就是一個簡單的例子,用來為一個key設置新值:
local value = redis.call('GET', KEYS[1])
redis.call('SET', KEYS[1], ARGV[1])
return value
函數redis.call用于在Redis中調用一個命令,ARGV數組用于保存?zhèn)鬟f給腳本的參數,而KEYS數組用來存放鍵名,上面的例子中,函數 get 返回當前 key 的值,再執(zhí)行set命令,并在最后返回值。使用這種機制,可以確保所有操作都在一個原子事務中完成,因此,數據得到正確的更新。
Redis是一種高效的內存高速存儲技術,它由于沒有提供原子性操作而備受詬病。但是,Redis也提供了一些辦法來實現原子性操作,如 watch 命令和 lua 腳本,這些辦法都能夠讓Redis服務器來實現事務性操作。
成都網站設計制作選創(chuàng)新互聯(lián),專業(yè)網站建設公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網站建設定制開發(fā)服務,為客戶提供專業(yè)的成都網站制作,成都網頁設計,成都網站設計服務;成都創(chuàng)新互聯(lián)服務內容包含成都網站建設,小程序開發(fā),營銷網站建設,網站改版,服務器托管租用等互聯(lián)網服務。
當前文章:無法滿足原子性操作的Redis(不支持原子性的redis)
當前URL:http://www.dlmjj.cn/article/djdeees.html


咨詢
建站咨詢
