Redis 認識Redis的其他功能

2021-09-28 21:43:38 字數 2954 閱讀 5289

1.redis除了提供5種型別的資料之外,還提供能很多其他的功能,比如慢查詢分析、pipeline(流水線)、事務與lua、訊息佇列功能等等

1.很多的關係型資料庫例如mysql,都能提供輸出列印慢查詢日誌,進行慢查詢分析,redis也一樣,一般當命令的執行時間超過一定的閾值,就會記錄到慢查詢。

2.首先,我們來分析一下乙個命令他的執行過程,

(1)客戶端傳送命令道redis伺服器端

(2)命令進入排隊佇列進行等候

(3)命令被執行

(3)redis伺服器端返回結果集

我們真正計算慢查詢的只是有(3)命令被執行,當執行時間超過閾值的時候,就會記錄慢查詢日誌。

3.接下來我們關注的是

(1)我們該如何設定慢查詢日誌的閾值

(2)我們該如何檢視慢查詢資訊

基於以上的兩個問題,我們發現通過slowlog-log-slower-than,可以用來設定慢查詢的閾值,具體的用法是:

127.0.0.1:6379> config set slowlog-log-slower-than 1000

ok127.0.0.1:6379> config set slowlog-max-len 1000

ok127.0.0.1:6379> config rewrite

設定之後要進行config rewrite,而config set slowlog-max-len只是設定了快取慢查詢日誌的列表最大的大小,如果超過了這個大小,就會採用乙個推陳出新的方法,新的慢查詢來了,最舊的慢查詢就會被刪除掉。

4.接著,我們該如何檢視分析慢查詢:

slowlog get [n]
通過這個命令,我們可以獲取到慢查詢日誌,接著就是分析慢查詢日誌:

慢查詢日誌有4個屬性:id,發生時間戳,消耗時長,執行的命令和引數。

1.什麼是pipeline?pipeline是乙個流水線,他的目的是為了減少命令在客戶端與伺服器端之間往返時間。

2.pipeline的原理是什麼?將一組命令組裝在一起,一次傳送到伺服器端,進入排隊佇列,按順序執行,返回結果集。

如果沒有pipeline,那麼將會每乙個命令的執行都會有在網路上的往返時間,如下圖:

使用了pipeline之後:多個命令,只有一次網路往返的時間消耗

3.pipeline與redis的批量操作命令有什麼樣的區別?

(1)原生的批量操作命令是原子操作,pipeline不是

(2)原生的批量是redis伺服器端支援的操作,pipeline需要客戶端和伺服器端都支援。

4.其實redis真正執行命令消耗時間的很短的,如果redis遇到了效能的瓶頸,很有可能就是網路效能達到瓶頸了。

1.簡單介紹一下什麼是事務?事務是一組操作,要麼全部成功,要麼全部是的。事務具有:原子性,隔離性,一致性,永續性。

2.redis是如何使用事務的?

reids是通過multi來啟動事務,exec則是用來提交結束事務的,discard則是可以用來終止事務的,具體的操作如下:

127.0.0.1:6379> multi

ok127.0.0.1:6379> sadd test:name michael1

queued

127.0.0.1:6379> sadd test:name michael2

queued

127.0.0.1:6379> exec

1) (integer) 1

2) (integer) 1

sadd返回的結果是queued,代表命令並沒有真正的被執行,只是放在redis裡面,直到exec才會被執行。

3.redis的事務有什麼缺點?redis的事務是沒有辦法支援事務回滾的,所以當出現異常的時候,只能開發人員手工來處理。

1.簡介:c語言實現的指令碼語言。

2.lua語言的資料型別:booleans(布林)、strings(字串)、numbers(數字)、table(**);有local修飾表示區域性變數,沒有local是全域性變數。

3.redis裡面如何使用lua:

redis裡面使用lua有兩種方式:eval和evalsha

eval執行過程如下圖:

evalsha執行如下圖:

1.簡介:redis提供了發布訂閱訊息機制,可用用它來作為訊息中介軟體

2.原理是:發布端可以向channel傳送乙個訊息,多個訂閱端可以訂閱到這個訊息,如下圖:

具體的操作如下:

首先訂閱端進入訂閱狀態:

subscribe channel:name
我們來訂閱channel為name的資訊,

接著我們處理發布端:

publish channel:name "michael"
結果如下圖:

在客戶端進入訂閱狀態的時候,他只能接受:subscribe、psubscribe、unsubscribe、punsubscribe值幾個命令。

接著,新接入的客戶端是沒有辦法接受以前的訊息的,因為redis的發布訂閱機制沒有對訊息進行持久化。

一般在實際開發中,我們很少用redis來作為訊息中介軟體的,因為他沒有將訊息就行持久化,很容易造成訊息的丟失。

redis學習 1 認識redis

redis是一種基於鍵值對的nosql資料庫,與其他多鍵值對資料庫不同的是,redis的值支援資料型別,redis中的值可以是string 字串 hash 雜湊 list 列表 set 集合 zset 有序集合 等多種資料結構。redis的特點 1.高效能 redis將資料儲存在記憶體中的,所以它的...

redis的其他命令

1.del del key name 用於刪除已存在的鍵。不存在的 key 會被忽略 返回值 被刪除 key 的數量 用於序列化給定 key 並返回被序列化的值 用於返回 key 所儲存的值的型別 資料型別有 在php中的返回值 用於檢查給定 key 是否存在 若 key 存在返回 1 否則返回 0...

初步認識redis

1.什麼redis 2.為什麼使用redis 3.什麼場合使用redis 4.redis的好處 5.編譯安裝redis 6.redis資料結構 1.什麼是redis redis是remote dictionary server 遠端資料服務 的縮寫,是義大利人antirez開發的一款記憶體快取記憶體...