Redis發佈訂閱(pub/sub)是一種消息通訊模式:發送者(pub)發送消息,訂閱者(sub)接收消息redis
Redis客戶端能夠訂閱任意數量的頻道數據庫
發佈訂閱(PUB/SUB)命令數組 |
|
PSUBSCRIBE pattern緩存 |
訂閱一個或多個符合給定模式的頻道安全 |
PUBSUB subcommand服務器 |
查看訂閱與發佈系統狀態網絡 |
PUBLISH channel message併發 |
將消息發送到指定的頻道異步 |
PUNSUBSCRIBE patternsocket |
退訂全部給定模式的頻道 |
SUBSCRIBE channel |
訂閱給定的一個或多個頻道的信息 |
UNSUBSCRIBE channel |
指退訂給定的頻道 |
Redis事務
Redis事務一次能夠執行多個命令,而且帶有如下三個保證:
一、批量操做在發送EXEC命令前被放入隊列緩存
二、收到EXEC命令後進入事務執行,事務中任意命令執行失敗,其他的命令依賴被執行
三、在事務執行過程,其餘客戶端提交的命令請求不會插入到事務執行命令序列中
一個事務從開始到執行會經歷:一、開始事務,二、命令入隊,三、執行事務。
Redis事務的執行並非原子性的。
事務可理解爲一個打包的批量執行腳本,但批量指令並不是原子化的操做,中間某條指令的失敗不會致使前面已作指令的回滾,也不會形成後續的指令不作。
Redis事務 |
|
DISCARD |
取消事務,放棄執行事務塊內的全部命令 |
EXEC |
執行全部事務塊內的命令 |
MULTI |
標記一個事務塊的開始 |
UNWATCH |
取消watch命令對全部能夠的監視 |
WATCH key |
監視一個或多個key |
Redis腳本
Redis腳本使用Lua解釋器來執行腳本。執行腳本的經常使用命令爲EVAL
Redis腳本 |
|
EVAL script numkeys key |
執行Lua腳本 |
EVALSHA sha1 numkeys key |
執行Lua腳本 |
SCRIPT EXISTS script |
查看指定的腳本是否已經被保存在緩存當中 |
SCRIPT FLUSH |
從腳本緩存中移除全部腳本 |
SCRIPT KILL |
殺死當前正在運行的Lua腳本 |
SCRIPT LOAD script |
將腳本script添加到腳本緩存中,但並不當即執行這個腳本 |
Redis鏈接命令主要用於鏈接redis服務
Redis鏈接命令 |
|
AUTH password |
驗證密碼是否正確 |
ECHO message |
打印字符串 |
PING |
查看服務是否運行 |
QUIT |
關閉當前鏈接 |
SELECT index |
切換到指定的數據庫 |
Redis服務器
Redis服務器主要用於管理redis服務
Redis服務器命令 |
|
BGREWIRTEAOF |
異步執行一個AOF文件重寫操做 |
BGSAVE |
在後臺異步保存當前數據庫的數據到磁盤 |
CLIENT KILL |
關閉客戶端鏈接 |
CLIENT LIST |
獲取鏈接到服務器的客戶端鏈接列表 |
CLIENT GETNAME |
獲取鏈接的名稱 |
CLIENT PAUSE timeout |
在指定時間內終止運行來自客戶端的命令 |
CLIENT SETNAME connection-name |
設置當前鏈接的名稱 |
CLUSTER SLOTS |
獲取集羣節點的映射數據 |
COMMAND |
獲取redis命令詳情數組 |
COMMAND COUNT |
獲取redis命令總數 |
COMMAND GETKEYS |
獲取給定命令的全部鍵 |
TIME |
返回當前服務器的時間 |
CONFIG GET parameter |
獲取指定配置參數的值 |
CONFIG REWRITE |
對啓動Redis服務器時所指定的redis.conf配置文件進行改寫 |
CONFIG SET parameter value |
修改redis配置參數,無需重啓 |
CONFIG RESETSTAT |
重置INFO命令中的某些統計數據 |
DBSIZE |
返回當前數據庫的key的數量 |
DEBUG OBJECT KEY |
獲取key的調試信息 |
DEBUG SEGFAULT |
讓Redis服務崩潰 |
FLUSHALL |
刪除全部數據庫的全部key |
FLUSHDB |
刪除當前數據庫的全部key |
INFO |
獲取redis服務器的各類信息和統計數量 |
LASTSAVE |
返回最近一次redis成功將數據保存到磁盤上的時間 |
MONITOR |
實時打印出Redis服務器接收到的命令,調試用 |
ROLE |
返回主從實例所屬的角色 |
SAVE |
同步保存數據到硬盤 |
SHUTDOWN [NOSAVE][SAVE] |
異步保存數據到硬盤,並關閉服務器 |
SLAVEOF host port |
將當前服務器變爲指定服務器的從屬服務器(slave server) |
SLOWLO subcommand |
管理redis的慢日誌 |
Redis數據備份與恢復
Redis SAVE 命令用於建立當前數據庫的備份:該命令將在redis安裝目錄中建立dump.rdb文件
恢復數據:只需將備份文件(dump.rdb)移動到redis安裝目錄並啓動服務便可 ,獲取redis目錄可使用CONFIG GET
建立redis備份文件也可使用命令BGSAVE,在後臺運行
Redis安全
redis的配置文件設置密碼參數,客戶端鏈接到redis服務就須要驗證,讓redis服務更安全
查看是否設置了密碼驗證:CONFIG GET requirepass(默認狀況requirepass參數是空的,能夠無需經過密碼驗證就能夠鏈接到redis服務)
設置密碼 : CONFIG SET requirepass "redis"
獲取密碼:CONFIG GET requirepass
設置密碼後,客戶端鏈接redis服務器就須要密碼驗證,不然沒法執行命令。
Redis性能測試
redis性能測試是經過同時執行多個命令實現的。
redis性能測試基本命令:redis-benchmark [option] [option value] (該命令是在redis目錄下執行,而不是redis客戶端的內部命令)
同時執行10000個請求來檢測性能:redis-benchmark -n -10000 -q
redis性能測試工具 |
||
-h |
指定服務器主機名 |
127.0.0.1 |
-p |
指定服務器端口 |
6379 |
-s |
指定服務器socket |
|
-c |
指定併發鏈接數 |
50 |
-n |
指定請求數 |
10000 |
-d |
以字節的形式指定set/get值的數據大小 |
2 |
-k |
1=keep alive 0=reconnect |
1 |
-r |
Set/get/incr 使用隨機key |
|
-p |
經過管道傳輸 |
1 |
-q |
強制退出redis,僅顯示query/sec值 |
|
-csv |
以csv格式輸出 |
|
-l |
生成循環,永久執行測試 |
Redis客戶端鏈接
Redis經過監聽一個TCP端口或者Unix socket的方式來接收來自客戶端的鏈接
Redis客戶端最大鏈接數maxclients的默認值是10000,也可在redis.conf進行修改 config get maxclients
Redis客戶端命令 |
|
CLIENT LIST |
返回鏈接到redis服務的客戶端列表 |
CLIENT SETNAME |
設置當前鏈接的名稱 |
CLIENT GETNAME |
獲取經過CLIENT SETNAME命令設置的服務名稱 |
CLIENT PAUSE |
掛起客戶端鏈接,指定掛起的時間以毫秒計 |
CLIENT KILL |
關閉客戶端鏈接 |
Redis管道技術
Redis是一種基於客戶端--服務端模型以及請求/響應協議的TCP服務
步驟:一、客戶端向服務端發送一個查詢請求,並監聽Socket返回,一般是以阻塞模式,等待服務端響應。
二、服務端處理命令,並將結果返回給客戶端
Redis管道技術能夠在服務端未響應時,客戶端能夠繼續向服務端發送請求,並最終一次性讀取全部服務端的響應。
管道技術是最顯著的優點是提升了redis服務的性能。
Redis分區:分割數據到多個Redis實例的處理過程,所以每一個實例只保存key的一個子集
分區的優點:利用計算機內存的和值,容許咱們構造更大的數據庫。多核和多臺計算機,容許咱們擴展計算能力,經過多臺計算機和網絡適配器,容許擴展網絡帶寬。
分區類型:範圍分區:映射必定範圍的對象到特定的redis實例
哈希分區:對任何key都適用