redis學習筆記(三)–Redis的功能

BrownFly發表於2018-10-02

慢查詢

基本概念

慢查詢日誌記錄命令執行前後的超時的執行時間。(只記錄命令執行時間)

慢查詢的兩個配置

Redis提供了slowlog-log-slower-thanslowlog-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提供簡單的事務功能,將一組需要一起執行的命令放到multiexec兩個命令之間。

> multi
> set key hello
QUEUED # 表示命令並沒有真正執行
> exec

可以使用discard命令來停止事務的執行

> discard

watch命令可以監控一個或多個鍵,如果有鍵在事務修改期間被別的方式修改,則之後的事務不會執行。

> watch key

Lua

在Redis中執行Lua指令碼有兩種方法:evalevalsha

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命令實現對地理位置資訊的刪除。

相關文章