redis學習筆記3 其他功能

2021-09-22 10:09:02 字數 3845 閱讀 6953

1. 慢查詢分析

客戶端提交指令給redis並返回執行結果,這個過程包括如下幾個步驟:

提交指令->命令排隊->執行命令->返回結果

而慢查詢只是統計執行命令的時間,因此沒有慢查詢並不代表客戶端沒有超時

慢查詢配置:

slowlog-log-slower-than:慢查詢閾值,即執行時間多長被定義成慢查詢

slowlog-max-len:保留多少條慢查詢記錄,因為redis使用了乙個列表來儲存慢查詢日誌,這個值就是列表長度

上述2個引數可以在配置檔案中設定,也可以通過指令設定,如下所示

config set slowlog-log-slower-than 20000

config set slowlog-max-len 1000

config rewrite //將上述修改同步儲存到配置檔案中去

慢查詢指令:

slowlog get [n]:獲取所有慢查詢或佇列前n條慢查詢,每個慢查詢返回值為id、發生時間、執行耗時、執行指令和引數

slowlog len:慢查詢佇列中元素個數

slowlog reset:清空慢查詢佇列

最佳實踐:

slowlog-max-len:線上建議調大,如1000以上

slowlog-log-slower-than:預設為10毫秒,對於並且較高的場景,建議設定為1毫秒,如果指令耗時都在1毫秒,那麼redis的ops不到1000.

客戶端網路超時故障排查:需要檢查是否因慢查詢引起,檢查請求堆積情況,檢查網路情況

可定期將慢查詢日誌持久化到其他資料庫系統中,如mysql

2. pipeline

管道pipeline它能將一批redis命令進行組裝,通過一次請求提交給redis,再將這組redis命令的執行結果按順序返回給客戶端。

pipeline是非原子的,如多個命令在執行的中間發生了異常,那麼將會丟失未執行的命令。所以我們一般使用pipeline時,需要自己保證執行命令的資料安全性。

pipeline雖然好用,但是每次pipeline組裝的命令個數不能沒有節制,否則一次組裝pipeline資料量過大,一方面會增加客戶端的等待時間,另一方面會造成一定的網路阻塞,可以將一次包含大量命令的pipeline拆分成多次較小的pipeline來完成。

pipeline只能操作乙個redis例項,但是即使在分布式redis場景中,也可以作為批量操作的重要優化手段

原生批量命令與pipeline對比:

原生批量命令是原子的,pipeline是非原子的

原生批量命令是乙個命令對應多個key,pipeline支援多個命令

原生批量命令是redis服務端支援實現的,而pipeline需要服務端和客戶端的共同實現

3. bitmaps

bitmaps本身不是一種資料結構,實際上它就是字串,且每個字元只能儲存0和1,每個字元在字串中的索引叫偏移量,redis可以對這種字串的位進行操作。

命令:setbit key offset value:在key對應的值的offset為止設定值value,value只能是0或1

gitbit key offset:獲取key對應offset上的值

bitcount key [start][end]:獲取key指定範圍值為1的個數

bitop op destkey key[key....]:op為操作符,如or、and、not、xor,並將計數結果儲存到destkey中

假設有2個key,key1和key2,key1儲存了上個月登入使用者,key2儲存了這個月登入使用者,

求這2個月都登入過的使用者:bitop and key3 key1 key2; bitcount key3

求這2個月登入過的使用者:bitop or key4 key1 key2; bitcount key4

應用場景:

4. 發布訂閱模式

publish channelname message:向channelname通道傳送訊息

subscribe channelname [channelname1...]:訂閱某個或多個通道的訊息

unsubscribe [channel [channel ...]]:取消訂閱

psubscribe pattern [pattern...]:按照某個模式訂閱,如訂閱通道以it開頭的所有通道,psubscribe it*

punsubscribe [pattern [pattern ...]]:按照某個模式取消訂閱,如 punsubscribe it*

pubsub channels [pattern]:查詢有訂閱者的通道(有乙個訂閱者就算),如以it開頭的通道,pubsub it*

pubsub numsub [channel ...]:查詢通道訂閱數,如檢視my通道有多少訂閱者,pubsub numsub my

pubsub numpat:檢視模式訂閱數,即通過psubscribe指令訂閱的數量

使用場景:

聊天室、公告牌、服務之間利用訊息解耦都可以使用發布訂閱模式

5. geo 地理位置資訊

redis3.2版本提供了geo(地理資訊定位)功能,支援儲存地理位置資訊用來實現諸如附近位置、搖一搖這類依賴於地理位置資訊的功能。

geoadd key longitude latitude member [longitude latitude member ...]:新增位址位置資訊,經度 緯度 名稱,如 geoadd cities:locations 116.28 39.55 beijing

zrem key member:刪除位置資訊

geopos key member [member ...]:獲取地理位置,如 geopos cities:locations tianjin

geodist key member1 member2 [unit]:計算2地距離,unit為距離單位,如北京和天津的距離, geodist cities:locations tianjin beijing km

獲取指定位置範圍內的地理資訊位置集合:

georadius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist]  [withhash] [count count] [asc|desc] [store key] [storedist key]

georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist] [withhash] [count count] [asc|desc] [store key] [storedist key]

georadius和georadiusbymember兩個命令的作用是一樣的,都是以乙個地理位置為中心算出指定半徑內的其他地理資訊位置,不同的是georadius命令的中心位置給出了具體的經緯度,georadiusbymember只需給出成員即可。其中radiusm|km|ft|mi是必需引數,指定了半徑(帶單位),這兩個命令有很多可選引數,如下所示:

·withcoord:返回結果中包含經緯度。

·withdist:返回結果中包含離中心節點位置的距離。

·withhash:返回結果中包含geohash,有關geohash後面介紹。

·count count:指定返回結果的數量。

·asc|desc:返回結果按照離中心節點的距離做公升序或者降序。

·store key:將返回結果的地理位置資訊儲存到指定鍵。

·storedist key:將返回結果離中心節點的距離儲存到指定鍵。

例子:距離北京150公里以內的城市

georadiusbymember cities:locations beijing 150 km

Redis 認識Redis的其他功能

1.redis除了提供5種型別的資料之外,還提供能很多其他的功能,比如慢查詢分析 pipeline 流水線 事務與lua 訊息佇列功能等等 1.很多的關係型資料庫例如mysql,都能提供輸出列印慢查詢日誌,進行慢查詢分析,redis也一樣,一般當命令的執行時間超過一定的閾值,就會記錄到慢查詢。2.首...

Redis學習筆記3

redis 127.0.0.1 6379 command key name redis 127.0.0.1 6379 set runoobkey redis okredis 127.0.0.1 6379 get runoobkey redis 在以上例項中我們使用了set和get命令,鍵為runoo...

Redis學習筆記(3)

本質 本質是一組命令的集合,所有的命令按照順序一次性 序列化地執行,不允許其他命令的加入。redis通過multi exec watch等命令來實現事務功能 在事務執行過程中,伺服器不會中斷事務而去執行其他客戶端命令 具有排他性 但是redis的事務不支援原子性,因此redis對事務的支援是部分的。...