慢查詢
基本概念
慢查詢日誌記錄命令執行前後的超時的執行時間。(只記錄命令執行時間)
慢查詢的兩個配置
Redis提供了slowlog-log-slower-than
和slowlog-max-len
兩個配置。
slowlog-log-slower-than
slowlog-log-slower-than
是預設閥值,預設值10000微秒。如果執行的時間超過了這個閥值,那麼這個命令就會被記錄在慢查詢日誌中。
運維提示
設定slowlog-log-slower-than
=0 ==> 記錄所有命令
設定slowlog-log-slower-than
<0 ==> 對於任何命令都不會記錄
slowlog-max-len
slowlog-max-len
說明慢查詢日誌最多儲存多少條。
修改方式
方式一
修改配置檔案:
$ vim redis.conf
...
slowlog-log-slower-than 10000
slowlog-max-len 5
方式二
使用config set
命令:
> config set slowlog-log-slower-than 20000
> config set slowlog-max-len 1000
> config rewrite # 配置持久化到本地配置檔案
命令
獲取慢查詢日誌
> slowlog get [n]
慢查詢日誌由日誌標識id、發生時間戳、命令耗時、執行命令和引數組成。
獲取慢查詢日誌
> slowlog len
慢查詢日誌重置
> slowlog reset
Redis Shell
redis-cli
命令執行多次
-r
可以讓命令執行多次。
例如執行三次ping命令:
$ redis-cli -r 3 ping
間隔時間執行命令
-i
表示間隔多少秒執行一次命令。
例如每個1秒執行一次ping命令,一共執行5次:
$ redis-cli -r 5 -i 1 ping
從標準輸入讀取資料
-r
代表從標準輸入讀取資料作為redis-cli的最後一個引數。
例如:
$ echo "hello" | redis-cli -x set key
連線Redis Cluster節點
-c
用於連線Redis Cluster節點時使用。
密碼登入
如果Redis配置了密碼,使用-a
輸入密碼。
掃描指定模式
--scan
和--pattern
用於掃描指定模式的鍵。
模擬當前Redis節點的從節點
--slave
是把當前Redis節點的從節點,用來獲取當前Redis節點的更新操作。
生成併傳送RDB持久化檔案
--rdb
會請求Redis示例生成併傳送RDB持久化檔案,儲存在本地。
檢視Redis的重要統計資訊
--stat
可以實時獲取Redis的重要統計資訊。
$ redis-cli --stat
redis-server
測試記憶體容量
--test-memory
可用於測試系統記憶體是否夠Redis使用。
例如檢測當前系統是否能提供1G記憶體給Redis:
$ redis-server --test-memory 1024
測試完成輸入passed this test。
redis-benchmark
redis-benchmark
用於為Redis做基準效能測試。
命令
設定併發數量
-c
設定客戶端的併發數量,預設為50。
設定請求總量
-n
代表客戶端的請求總量,預設為100000。
Pipeline(流水線)
基本概念
對一組Redis命令進行組裝,通過一次RTT(往返命令時間)傳輸給Redis。pipeline每次只能作用一個Redis節點上。
使用
從開發層面來控制。
連線:https://blog.csdn.net/weixin_…
事務和Lua
基本概念
Redis提供了簡單的事務功能以及整合Lua指令碼來解決問題。
事務
Redis提供簡單的事務功能,將一組需要一起執行的命令放到multi
和exec
兩個命令之間。
> multi
> set key hello
QUEUED # 表示命令並沒有真正執行
> exec
可以使用discard
命令來停止事務的執行
> discard
watch
命令可以監控一個或多個鍵,如果有鍵在事務修改期間被別的方式修改,則之後的事務不會執行。
> watch key
Lua
在Redis中執行Lua指令碼有兩種方法:eval
和evalsha
。
eval
> eval 指令碼內容 key個數 key列表 引數列表
可以通過redis-cli--eval
執行Lua指令碼。
evalsha
通過得到指令碼的SHA1校驗和來直接執行對應的Lua指令碼。可以使Lua指令碼常駐在服務端。
載入指令碼
將指令碼內容載入到Redis的記憶體中:
$ redis-cli script load "$(cat lua_get.lua)"
得到Lua指令碼的SHA1。
執行指令碼
> evalsha 指令碼SHA1值 key個數 key列表 引數列表
管理Lua指令碼
載入指令碼到Redis記憶體中
> script load script
檢測指令碼是否存在
> scripts exists sha1 [sha1 ...]
清除記憶體中已經載入的所有指令碼
> script flush
終止正在執行的指令碼
> script kill
Bitmap點陣圖
基本概念
以二進位制來表示資料。
命令
設定值
> setbit key offset value
設定鍵的第offset各位的值
獲取值
> gitbit key offset
獲取Bitmaps指定範圍值為1的個數
> bitcount start end
Bitmaps間的運算
> bitop op destkey key[key ....]
bitop
包括了:and交集、or並集、not非、xor異或。將結果儲存在destkey
中。
HyperLogLog
基本概念
一種基準演算法。
命令
新增
> pfadd key element [element ...]
新增成功返回1。
計算獨立使用者數
> pfcount key [key ...]
合併
> pfmerge destkey sourcekey [siyrcekey ..]
釋出訂閱
基本概念
在”釋出/訂閱”的模式下,訊息傳送者和訂閱者不進行直接通訊,釋出者客戶端向指定的頻道(channel)釋出訊息,訂閱該頻道的每個客戶端都可以收到該訊息。
命令
釋出訊息
> publish channel message
訂閱訊息
> subscribe channel [channel ...]
取消訂閱
> unsubscribe [channel [channel ...]]
按照模式訂閱和取消訂閱
> psubscribe pattern [pattern ...]
> punsubscribe [pattern [pattern ...]]
查閱訂閱
檢視活躍的頻道
> pubsub channels [pattern]
檢視頻道訂閱數
> pubsub numsub [channel ...]
檢視模式訂閱數
> pubsub numpat
GEO
基本概念
Redis3.2版本提供了GEO(定理資訊定位)功能。
命令
增加地理位置資訊
> geoadd key longitude latitude member [longitude latitude member ...]
longitude:經度
latitude:維度
member:成員
獲取地理位置資訊
> geopos key member [member ...]
獲取兩個地理位置的距離
> geodist key member1 member2 [unit]
unit代表返回的結果的單位:
m(meters):米
km(kilometers):公里
mi(miles):英里
ft(feet):代表尺
獲取指定位置範圍內的地理資訊位置集合
> georadius key longitude latitude raniusm|km|ft|mi
> georadiusbymember key member raniusm|km|ft|mi
獲取geohash
> geohash key member [member ...]
刪除地理位置資訊
> zrem key member
GEO的底層實現是zset,所以借用zrem
命令實現對地理位置資訊的刪除。