Redis入門指南之高階

2021-08-02 21:29:07 字數 3896 閱讀 9280

事務

redis中的事務(transaction)是一組命令的集合。

事務同命令一樣都是redis的最小執行單位。

事務的原理:先將屬於乙個事務的命令傳送給redis,然後再讓redis依次執行這些命令。

例如:multi

sadd ...

...exec

watch

可以監控乙個或多個鍵,一旦其中乙個鍵被修改(或刪除),之後的事務就不會執行。監控一直持續到exec命令(事務中的命令是在exec之後才執行的,所以在multi命令之後可以修改watch監控的鍵值)

過期時間

expire

命令,設定乙個鍵的過期時間,到時間後redis會自動刪除它。

expire key seconds 單位是秒。

ttl命令,乙個鍵還有多久被刪除,返回值是鍵的剩餘時間(單位是秒);當鍵不存在時返回-2;沒有為鍵設定國過期時間(即永久存在,這是建立乙個鍵後的預設情況),返回-1。

redis>set foo bar ok

redis>expire foo 20

(integer)1

redis>ttl foo

(integer)15

redis>ttl foo

(integer)7

redis>ttl foo

(integer)-2

persist

命令,取消鍵的過期時間設定(即將鍵恢復成永久的)。如果過期時間被成功清楚則返回1,否則返回0(因為鍵不存在或鍵本來就是永久的)。使用set或getset命令為鍵復賦值也會同時清除鍵的過期時間。

redis>set foo bar ok

redis>expire foo 20

(integer)1

redis>persist foo

(integer)1

redis>ttl foo

(integer)-1

pexpire

命令,更精確的控制鍵的過期時間,單位毫秒。

pexpire key 1000 等價於 expire key 1

pttl

命令,以毫秒為單位返回鍵的剩餘時間。

如果使用watch命令監測了乙個擁有過期時間的鍵,該鍵時間到期後自動刪除,並不會被watch命令認為該鍵被改變。

expireat

命令,使用unix時間作為第二個引數表示鍵的過期時刻。 快取

修改配置檔案的maxmemory引數,限制redis最大可用記憶體大小(單位是位元組),當超出這個限制時,redis會依據maxmemory-policy引數指定的策略來刪除不需要的鍵直到redis占用的記憶體小於指定記憶體。

redis支援的淘汰鍵的規則如下:

volatile-lru  使用lru演算法刪除乙個鍵 (只對設定了過期時間的鍵)

allkey-lru    使用lru演算法刪除

乙個鍵

volatile-random 隨機刪除

乙個鍵(只對設定了過期時間的鍵)

allkeys-random 隨機

刪除乙個鍵

volatile-ttl 刪除過期時間乙個最近的鍵

noeviction  不刪除鍵,只返回錯誤

排序sort命令,可以對列表型別、集合型別、有序集合型別鍵進行排序。對有序集合型別排序時h會忽略元素的分數,只針對元素自身的值進行排序。例如:

reis>zadd myzset  50 2 40 3 20 1 60 5

(integer)4

redis>sort myzset 

1)"1"

2)"2"

3)"3"

4)"5"

sort命令的 alpha引數 實現字典順序排列非數字元素。

sort命令的 desc命令降序排列。

limit offset count

,跳過前offset個元素並獲取之後的count個元素。

by引數,

語法為by參考鍵,可以是字串型別鍵或者雜湊型別鍵的某個字段(表示為 鍵名->欄位名)。如果提供了by引數,sort命令將不再依據元素自身的值進行排序,而是對每個元素使用元素的值替換參考鍵中的第乙個"*"並取其值,然後依據該值對元素排序。

參考鍵還可以是字串型別,

redis>lpush sortbyist 2 1 3

(integer)3

reis>set itemscore:1 50 ok

reis>set itemscore:2 100 ok

reis>set itemscore:3 -10 ok

redis>sort sortbyist by itemscore:* desc

1)"2"

2)"1"

3)"3"

當參考鍵名不包含"*"時(即常量鍵名,與元素值無關),sort命令將不會執行排序操作。如果幾個元素額參考鍵值相同,則會再比較元素本身的值排序。

redis>lpush sortbyist 4

(integer)4

reis>set itemscore:4 50 ok

redis>sort sortbyist by itemscore:* desc

1)"2"

2)"4"

3)"1"

4)"3"

示例中元素"4"的參考鍵值itemscore:4的值和元素"1"的參考鍵itemscore:1的值都是50,所以sort命令會再比較"4"和"1"本身的大小來決定二者的順序。

當某個元素的參考鍵不存在時,預設參考鍵的值為0:

redis>lpush sortbyist 5

(integer)4

redis>sort sortbyist by itemscore:* desc

1)"2"

2)"4"

3)"1"

4)"5"

5)"3"

注意:參考鍵雖然支援雜湊型別,但是"*"只能在"->"符號前面(即鍵名部分)才有用,在"->"後(即欄位名部分)會被當成欄位名本身而不會作為佔位符被元素的值替換,即常量鍵名。

get引數,使sort命令的返回結果不再是元素自身的值,而是get引數中指定的鍵值。支援字串和雜湊型別的鍵,並使用"*"作為佔位符。乙個sort命令中可以有多個get引數。get # 會返回元素本身的值。

store

引數,儲存排序結果。

效能優化

sort命令的時間複雜度是o(n+mlog(m)),其中n表示要排序的列表中的元素個數,m表示要返回的元素個數,redis在排序前會建立乙個長度為n^4的容器來儲存排序的元素。

1.盡可能減少待排序鍵中元素的數量(使n盡可能小)

2.使用limit引數只獲取需要的資料(使m盡可能小)

3.如果要排序的資料數量較大,盡可能使用store引數將結果快取。

訊息通知

brpop命令與rpop命令相似,唯一的區別是當列表中沒有元素時brpop命令會一直阻塞,直到有新元素加入。brpop命令接受兩個引數,第乙個是鍵名,第二個是超時時間,單位是秒。當超過了此時間仍然沒有獲得新元素的話 會返回nil。超時時間為"0",表示不限制等待的時間,即如果沒有新元素 加入列表 就會永遠阻塞下去。

brpop命令可以同時接受多個鍵,brpop key [key ...] timeout

「發布/訂閱」模式

發布者和訂閱者,訂閱者可以訂閱乙個或若干個頻道(channel),而發布者可以向指定頻道傳送訊息,所有訂閱此頻道的訂閱者都會收到此訊息。

publish  channel  message

subscribe channel [channel ...] 

unsubscribe channel [channel ...] 

按照規則訂閱

除了使用subscribe命令訂閱指定名稱的頻道外,還可以使用psubscribe 命令訂閱指定的規則。punsubscribe  退訂。

Redis入門指南 筆記 高階

4.1 事務 1 事務是一組命令的集合 2 事務同命令一樣是redis的最小執行單位,乙個事務中的命令要麼都執行,要麼都不執行。3 格式 multi 告訴redis,下面我給你的命令屬於同乙個事務,你先不要執行,而是把他們暫時儲存起來 命令1 命令2 exec 告訴redis將等待執行的事務佇列中的...

Redis之高階特性

expire key seconds 設定key的過期時間 ttl key 檢視key的過期時間 persist key 刪除key的過期時間 過期策略 定時刪除 主動,集中處理 會將每個設定了過期時間的 key 放入到乙個獨立的字典中,以後會定時遍歷這個字典來刪除到期的 key。過期策略 定時刪除...

Redis入門指南

4.redis的通用命令 5.redis特性 6.redis持久化 redis 高效能的鍵值對 key value 資料庫。key定義的注意點 不要過長 不要過短 統一的命名規範 快取 任務佇列 訪問統計 資料過期處理 精確到毫秒 分布式集群架構中的session分離 1.概述 2.常用命令 擴充套...