redis高階用法
一 慢查詢
1.1 生命週期
我們配置一個時間,如果查詢時間超過了我們設定的時間,我們就認為這是一個慢查詢.
慢查詢發生在第三階段
客戶端超時不一定慢查詢,但慢查詢是客戶端超時的一個可能因素
1.2 兩個配置
1.2.1 slowlog-max-len
慢查詢是一個先進先出的佇列
固定長度
儲存在記憶體中
1.2.2 slowlog-max-len
慢查詢閾值(單位:微秒)
slowlog-log-slower-than=0,記錄所有命令
slowlog-log-slower-than <0,不記錄任何命令
1.2.3 配置方法
1 預設配置
config get slowlog-max-len=128
Config get slowly-log-slower-than=10000
2 修改配置檔案重啟
3 動態配置
|
|
1.3 三個命令
|
|
1.4 經驗
|
|
二 pipeline與事務
2.1 什麼是pipeline(管道)
Redis的pipeline(管道)功能在命令列中沒有,但redis是支援pipeline的,而且在各個語言版的client中都有相應的實現
將一批命令,批量打包,在redis服務端批量計算(執行),然後把結果批量返回
1次pipeline(n條命令)=1次網路時間+n次命令時間
|
|
2.2 客戶端實現
|
|
2.3 與原生操作對比
|
|
2.4 使用建議
1 注意每次pipeline攜帶的資料量
2 pipeline每次只能作用在一個Redis的節點上
3 M(mset,mget….)操作和pipeline的區別
2.5 原生事務操作
|
|
三 釋出訂閱
3.1 角色
釋出者/訂閱者/頻道
釋出者釋出了訊息,所有的訂閱者都可以收到,就是生產者消費者模型(後訂閱了,無法獲取歷史訊息)
3.2 模型
3.3 API
|
|
3.4 釋出訂閱和訊息佇列
釋出訂閱數全收到,訊息佇列有個搶的過程,只有一個搶到
四 Bitmap點陣圖
4.1 點陣圖是什麼
下面是字串big對應的二進位制(b是98)
4.2 相關命令
|
|
4.3 獨立使用者統計
1 使用set和Bitmap對比
2 1億使用者,5千萬獨立(1億使用者量,約5千萬人訪問,統計活躍使用者數量)
資料型別 | 每個userid佔用空間 | 需要儲存使用者量 | 全部記憶體量 |
---|---|---|---|
set | 32位(假設userid是整形,佔32位) | 5千萬 | 32位*5千萬=200MB |
bitmap | 1位 | 1億 | 1位*1億=12.5MB |
假設有10萬獨立使用者,使用點陣圖還是佔用12.5mb,使用set需要32位*1萬=4MB
4.5 總結
1 點陣圖型別是string型別,最大512M
2 使用setbit時偏移量如果過大,會有較大消耗
3 點陣圖不是絕對好用,需要合理使用
五 HyperLogLog
5.1 介紹
基於HyperLogLog演算法:極小的空間完成獨立數量統計
本質還是字串
5.2 三個命令
|
|
5.3 記憶體消耗&總結
百萬級別獨立使用者統計,百萬條資料只佔15k
錯誤率 0.81%
無法取出單條資料,只能統計個數
六 GEO
6.1 介紹
GEO(地理資訊定位):儲存經緯度,計算兩地距離,範圍等
北京:116.28,39.55
天津:117.12,39.08
可以計算天津到北京的距離,天津周圍50km的城市,外賣等
6.2 5個城市緯度
城市 | 經度 | 緯度 | 簡稱 |
---|---|---|---|
北京 | 116.28 | 39.55 | beijing |
天津 | 117.12 | 39.08 | tianjin |
石家莊 | 114.29 | 38.02 | shijiazhuang |
唐山 | 118.01 | 39.38 | tangshan |
保定 | 115.29 | 38.51 | baoding |
6.3 相關命令
|
|
6.4 總結
3.2以後版本才有
geo本質時zset型別
可以使用zset的刪除,刪除指定member:zrem cities:locations beijing