Redis命令的生命週期git
1.客戶端把Redis指令寫入到客戶端緩衝區中redis
2.緩衝區滿後發送到Redis服務器,並先寫入服務端緩衝區算法
3.從緩衝區裏面拿出命令請求放置到請求隊列中排隊等待處理服務器
4.執行命令網絡
5.返回命令結果運維
Redis慢查詢ide
慢查詢發生在生命週期的第三階段,是指僅僅執行命令階段比較慢被稱爲慢查詢性能
客戶端超時不-定是慢查詢,可是慢查詢時是客戶端超時的一個可能因素。編碼
Redis慢查詢相關配置spa
1. slowlog-max-len
它決定了慢查詢日誌最多能保存多少條日誌,slow log自己是一個內存中的FIFO隊列,當隊列大小超過slowlog-max-len時,最舊的一條日誌將被刪除,而最新的一條日誌加入到slow log中。
默認值:128
支持動態配置
2.slowlog-log-slower-than
它決定要對執行時間大於多少微妙(microsecond ,1秒= 1,000,000微妙)的查詢進行記錄
默認值: 10000
slowlog-log-slower-than= 0,記錄全部命令
slowlog-log-slower-than < 0,不記錄任何命令
支持動態配置
慢查詢相關命令
1.slowlog get [n]
含義:獲取慢查詢列表中的慢查詢信息
n:獲取出多少條慢查詢數據信息
2.slowlog len
含義:獲取慢查詢隊列長度
3.slowlog reset
含義:清空慢查詢隊列
慢查詢信息字段
1.字段1:惟一性的日誌標識符(Integer)
2.字段2:被記錄命令的執行時間點,已UNIX時間戳格式表示(Integer)
3.字段3:查詢執行時間,以微秒爲單位
4.字段4:完整的執行命令
慢查詢運維經驗
slowlog-log-slower-than不要設置過大,默認10ms,一般設置1ms。
由於Redis的qps是萬級別的,即每秒應能執行10000次請求當一條命令執 行1ms時,那每秒只能執行1000次請求 slowlog-max-len 不要設 置地太小,一般設置1000左右須要理解命令的生命週期按期持久化慢查詢。
由於慢查詢只存儲於內存中,宕機慢查詢數據就會丟失經過按期slowlog get將慢查詢數據轉存到MySQL或者ES中
pipeline的好處
省略因爲單線程致使的命令排隊時間,一次命令的消耗時間 = 一次網絡時間+命令執行時間。比起命令執行時間,網絡時間極可能成爲系統的瓶頸。
pipeline的做用是將一批命令進行打包,而後發送給服務器,服務器執行完按順序打包返回。經過pipeline, 一次pipeline (n條命令) = 一次網絡時間+ n次命令時間
pipeline VS M操做(mget、mset)
M操做在Redis隊列中是一個原子操做,pipeline不是原子操做
pipeline 與M操做都會將數據順序的傳送與順序地返回
pipeline注意事項
每次pipeline攜帶數量不推薦過大, 不然會影響網絡性能
pipeline每次只能做用在一個Redis節點 上
發佈訂閱的角色與通訊模型
1.角色
發佈者(publisher)
訂閱者(subscriber)
頻道(channel)
2.通訊模型
RedisServer中能夠建立若channel,一個訂閱者能夠訂閱多個channel
當發佈者向一個頻道中發佈一條消息時,全部的訂閱者都將會收到消息
Redis的發佈訂閱模型沒有消息積壓功能,即新加入的訂閱者收不到發佈者以前發佈的消息
當訂閱者收到消息時,消息內容以下
第一行: 固定內容message
第二行: channel的名稱
第三行: 收到的新消息
發佈訂閱的API
1.publish channel message
含義:向指定的channel中發佈消息
2.subscribe channel1 [channel...]
含義:訂閱給定的一個或多個渠道的消息
3.unsubcribe [channel1 [chane2..]
含義:取消訂閱給定的一個或多個渠道的消息
###4.psubscribe pattern1 [pattern2..]
含義:訂閱一個或多個符合給定模式的頻道
###5.punsubscribe [pattern1 [patern..]
含義:退訂全部給定模式的頻道
6.pubsub channels
含義:列出至少有一個訂閱者的頻道
###7.pubsub numsub [hannel.]
含義:列出給定頻道的訂閱者數量
BitMap的API
1.getbit key offset
含義:對key所存儲的字符串值, 獲取指定偏移量上的位(bit)
2.setbit key offset value
含義:對key所存儲的字符串值,設置或清除指定偏移量上的位(bit)
返回值爲該位在setbit以前的值
value只能取0或1
offset從0開始, 即便原位圖只能10位,offset能夠取1000
3.bitcount key [start end]
含義:獲取位圖指定範圍中位值爲1的個數
若是不指定start與end,則取全部
4.bitop op destKey key1 [key2..]
含義:作多個BitMap的and (交集) 、or (並集)、not (非)、xor (異或)操做並將結果保存在destKey中
5.bitpos key tartgetBit [start end]
含義:計算位圖指定範圍第一 個偏移量對應的的值等於targetBit的位置
找不到返回-1
start與end沒有設置, 則取所有
targetBit只能取0或者1
BitMap的使用場景
統計每日用戶的登陸數。每一位標識一個用戶ID,當某個用戶訪問咱們的網頁或執行了某個操做,就在bitmap中把標識此用戶的位設置爲1。
#HyperLogL og簡介
基於HyperLogLog算法, 使用極小空間完成獨立數統計的功能
本質仍是一個字符串
十分節約內存
官方給出存在0.81%的錯誤率
沒法取出單條數據
HyperLogL og的相關命令
1.pfadd key element1 [element2..]
含義:向HyperLogLog中添加元素
2.pfcount key1 [key2..]
含義:計算HyperLogLog的獨立總數
3.pfmerge destKey key1 [key2..]j
含義:合併多個hyperLogLog到destKey中
GEO簡介
Redis 3.2添加新特性
功能:存儲經緯度、計算兩地距離、範圍計算等
基於ZSet實現
刪除操做使用zrem
GEO相關命令
1.geoadd key longitude latitude member [lon latmember..]
含義:增長地理位置信息
longitude :經度
latitude :緯度
member :標識信息
2.geopos key member1 [member2...]
含義:獲取地理位置信息
###3.geodist key member1 member2 [unit]
含義:獲取兩個地理位置的距離
unit取值範圍
m(米,默認)
km (公里)
mi (英里)
ft (英尺)
###4.georadius key longitude latitude unit [withcoord] [withdist] [withhash] [COUNT count] [sort] [store key] [storedist key]
含義:以給定的經緯度爲中心,返回包含的位置元素當中,與中心距離不超過給定最大距離的全部位置元素。
unit取值範圍
m(米)
km (公里)
mi (英里)
ft(英尺)
withcoord: 將位骯素的經度與緯度也一併返回
withdist: 在返回位置元素的同時,將距離也-並返回。距離的單位和用戶給定的範圍單位保持-致
withhash: 以52位的符號整數形式,返回位置元素通過geohash編碼的有序集合分值。用於底層應用或調試,實際做用不大。
sort取值範圍
asc: 根據中心位置, 按照從近到遠的方式返回位置元素
desc:根據中心位置, 按照從遠到近的方式返回位置元素
store key:將返回結果而的地理位置信息保存到指定鍵
5.georadiusbymember key member radius unit [withcoord] [withdist][withhash][COUNT count][sort][store key] [storedist key]
含義:以給定的元素爲中心,返回包含的位置元素當中,與中心距離不超過給定最大距離的全部位置元素。
unit取值範圍
m(米)
km (公里)
mi (英里)
ft (英尺)
withcoord: 將位置元素的經度與緯度也一併返回
withdist: 在返回位置元素的同時,將距離也一併返回。距離的單位和用戶給定的範圍單位保持一致
withhash: 以52位的符號整數形式,返回位置元素通過geohash編碼的有序集合分值。用更於底層應用或調試,實際做用不大。
sort取值範圍
asc: 根據中心位置,按照從近到遠的方式返回位置元素
desc: 根據中心位置, 按照從遠到近的方式返回位置元素
store key:將返回結果而的地理位置信息保存到指定鍵
storedist key:將返回結果距離中心節點的距離保存到指定鍵