一、樂觀鎖複雜事務控制
樂觀鎖:基於資料版本version)的記錄機制實現的。即為資料增加一個版本標識,在基於資料庫表的版本解決方案中,一般是通過為資料庫表添加一個version欄位來實現讀取出資料時,將此版本號碼一同讀出,之後更新時,對此版本號碼加1。此時,將提交的資料版本號碼與資料庫表對應的記錄的目前的版本號進行比對,如果提交的資料版本號碼大於資料庫目前的版本號,則予以更新,否則認為資料到期。
redis如何?樂觀鎖:watch命令會監視給定key,當exec時候如果監視的key從調用watch後發生過變化,則整個事務會失敗。watch的key是對整個串連有效,事務也一樣。如果串連斷開,監視和事務都會被自動清除。exec、discard、unwatch命令都會清除串連中的所有監視。
例如:
開啟redis的2個session會話:
session1如下:
650) this.width=650;" title="QQ20130922223126.png" src="http://www.bkjia.com/uploads/allimg/131229/205H1F19-0.png" alt="223618267.png" />
session2如下:
650) this.width=650;" title="QQ20130922223126.png" src="http://www.bkjia.com/uploads/allimg/131229/205H1F34-1.png" alt="223713853.png" />
則當session1執行exec的時候會失敗。
二、持久化機制
redis支援兩種持久化方式:
1、snapshotting快照)預設
將記憶體中的資料以快照的方式寫入到二進位檔案中,預設的名字為dump.rdb.
可配置如下
650) this.width=650;" title="QQ20130922223126.png" src="http://www.bkjia.com/uploads/allimg/131229/205H11G9-2.png" alt="224930582.png" />
2、Append-onlyfile縮寫aof)的方式
aof比快照有更好的持久化,是由於在使用aof時,redis會將每個寫命令追加寫入檔案,當redis重新啟動時會通過這個檔案來在記憶體中重建整個資料庫。
650) this.width=650;" title="QQ20130922223126.png" src="http://www.bkjia.com/uploads/allimg/131229/205H1EF-3.png" alt="225844117.png" />
三、發布和訂閱訊息
發布訂閱pub/sub)是一種訊息通訊模式,主要目的是解除訊息發行者和訊息訂閱者之間的耦合,redis作為一個pub/sub的server,在訂閱和發行者之間起到了訊息路由的功能。
訂閱可以通過subscribe和psubscribe命令向redisserver訂閱自己的訊息類型。當發行者通過publish
命令向redisserver發送特定類型的資訊時,訂閱該資訊類型的client都會收到訊息。
舉例:開啟redis3個session
session1、session2用來訂閱,session3用來發布訊息,如:
session1:
650) this.width=650;" title="QQ20130922223126.png" src="http://www.bkjia.com/uploads/allimg/131229/205H13359-4.png" alt="231109944.png" />
session2:
650) this.width=650;" title="QQ20130922223126.png" src="http://www.bkjia.com/uploads/allimg/131229/205H1BV-5.png" alt="231151683.png" />
session3:
650) this.width=650;" title="QQ20130922223126.png" src="http://www.bkjia.com/uploads/allimg/131229/205H15257-6.png" alt="231234562.png" />
四、虛擬記憶體的使用
把不經常使用的資料從記憶體交換到磁碟中,從而釋放記憶體用於需要訪問的資料。
650) this.width=650;" title="QQ20130922223126.png" src="http://www.bkjia.com/uploads/allimg/131229/205H11231-7.png" alt="232123981.png" />
本文出自 “phper” 部落格,請務必保留此出處http://janephp.blog.51cto.com/4439680/1300291