Redis指南
一、簡介
redis 和 memcached 都是高性能的鍵值緩存數據庫服務,其中 memcached 支持多線程,而 redis 支持豐富的數據結構且能內置持久化機制。
redis 數據都是以鍵值形式存儲的,鍵是字符串類型,值有 7 種類型(本質上是5種,其中 HyperLogLog 是 string,而 GEO 是 zset,可以通過 object encoding keyname 查看,但由于功能上的差異較大,這里分為7種):
1、string 字符串
2、list 列表
3、set 集合(所有命令均以 S 開頭)
4、hash 散列(所有命令均以 H 開頭)
5、zset 有序集合(所有命令均以 Z 開頭)
6、HyperLogLog
7、GEO (redis 3.2)
不同的值類型,甚至是同一種值類型,其底層實現也可能是不一樣的(主要是考慮到不同情況下的效率優化),具體可以看 redis 源碼。
?
二、常見命令
redis 的命令可以參考官網:https://redis.io/commands
對英文不熟練的也可以看國人翻譯的網站:http://redisdoc.com/
以下對常見的命令進行列舉
1、鍵操作命令
?
簡單示例:
127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> dump age "\x00\xc0\x12\a\x00\xb2\xeb\xab\xbc\x1d\xeb\x911" 127.0.0.1:6379> restore age1 5000 "\x00\xc0\x12\a\x00\xb2\xeb\xab\xbc\x1d\xeb\x911" OK 127.0.0.1:6379> get age1 "18"?
2、值操作命令:String
?
?
3、值操作命令(List)
?
?
4、值操作命令(Set)
?
?
?
5、值操作命令(Hash)
?
?
6、值操作命令(SortedSet)
?
7、值操作命令(HyperLogLog)
?
7、值操作命令(GEO)?
?
?
三、發布與訂閱
redis 的發布與訂閱,是以頻道channel為中介,訂閱者訂閱相關channel,發布者向channel發送string類型消息,會通知到該channel相關的訂閱者。在實際開發中,會有一些問題,其中一個問題是,客戶端客觀上會存在斷線重連的情況,如果一個客戶端在訂閱了某個channel之后,斷線重連了(已經不是原來的訂閱者了),則需要重新訂閱相關channel,而且會丟失斷線期間的消息通知。另外,訂閱的客戶端會進行阻塞模式,一直監聽 redis 通知的消息。取消訂閱使用 unsubscribe ch1 [ch2] 命令,如果不帶任何頻道名,則表示退訂所有頻道,退訂操作在官方提供的 redis-cli 中是無法模擬的,因為一旦執行訂閱操作窗口就被阻塞了。
基于 redis 發布與訂閱功能,在 redis2.8后實現了鍵空間通知(keyspace)和鍵事件通知(keyevent)的功能,前者用于當指定模式的鍵發生了變化時進行通知,后者用于當發生指定的操作命令時進行通知。該功能需要消耗一定的CPU資源,默認是關閉,可通過修改 redis.conf 文件或執行 config set notify-keyspace-events AKE 來開啟。命令中的 "AKE" 表示開啟所有類型的通知,更細化的設置請參考官方手冊,可以指定具體針對具體類型的鍵進行 keyspace 或 keyevent 通知。
監視一個 keyspace/keyevent 的格式是?psubscribe __keyspace@<db>__:* 和 psubscribe __keyevent@<db>__:* ,如訂閱 Users: 開頭的鍵發生變化如下:
psubscribe __keyspace@0__:Users:*而訂閱刪除事件的操作如下:
psubscribe __keyevent@0__:del而如下的操作將會同時訂閱 keyspace 和 keyevent,在執行類似 add key value 操作時,會收到兩條通知消息:
psubscribe __key*@0__:*?
?
?
四、事務
redis 在一定程度上實現了事務邏輯(不支持回滾),通過 multi/exec 包含的命令集(順序的將其中的命令入隊,如果入隊成功會返回 queued,如果入隊失敗則會導致事務失敗,即使執行exec也會返回事務錯誤),將以原子操作執行(需要注意的是,如果事務隊列中的某些命令執行成功,而某些命令執行失敗是存在的,redis 并不會回滾。在事務命令入隊時,redis只會檢查嚴重的語法格式錯誤,邏輯錯誤是沒法檢測的,比如對一個string鍵執行 lpush 操作)。 multi 命令標記著事務的開始,exec 標記事務的結束并提交事務,discard 標記著事務的結束并放棄事務。與事務常常一起配合使用的有 watch 命令,該命令用于在事務開始前監視一個 key 的內容是否發生變化。 在執行 exec 命令提交事務時,redis會檢測當前的 watch 隊列中的數據是否發生變化,如果發生變化,則事務將不被執行(程序可以嘗試重試操作,使用樂觀鎖是從效率考慮)。無論提交還是放棄(exec/discard)一個事務,都會清空當前的 watch 隊列,如果需要在事務開始前取消一個之前watch的操作,可以使用 unwatch 命令。
注意,如果 watch 的是一個帶生存時間的鍵,那么即使該鍵過期了,redis 仍然認為其是沒有變化的,事務仍可正常執行。
redis 腳本是在 redis2.6 之后引入的另一種處理事務的方法,使用腳本要更簡單,并且速度更快。redis 官方表示,短時間內并不會移除原有的事務功能,但未來如果腳本被廣泛使用的話并不排除這種可能。
?
?
五、服務器管理
1、慢日志
通過慢日志,可以記錄執行時間較長的命令,從而便于找出項目的效率問題。
通過下面的命令可以設置當命令耗時超過多少微秒時將被記錄:
config set slowlog-log-slower-than 10000這些慢日志會記錄到一個隊列中,可以通過下面的命令設置隊列的長度:
CONFIG SET slowlog-max-len 1000查看慢日志可以用下面的命令,如果跟上數字,表示顯示指定數量的日志:
slowlog get [number]?
查看當前慢日志的數量:
slowlog len清空慢日志:
slowlog reset?
?
?
?
?
六、集群
?
?
七、redis性能測試
http://www.cnblogs.com/silent2012/p/4514901.html
轉載于:https://www.cnblogs.com/tianyajuanke/p/6134323.html
總結
- 上一篇: proc文件(OLD)
- 下一篇: linux cmake编译源码,linu