Redis 三 redis事務與刪除策略

2021-10-23 08:18:41 字數 2614 閱讀 1099

1.3事務-鎖

1.4分布式鎖

2.刪除策略

1.3事務-鎖

1.4分布式鎖

2.刪除策略

redis執行指令過程中,多條連續執行的指令被干擾,打斷,插隊

redis事務就是乙個命令執行的佇列,將一系列預定義命令包裝成乙個整體,當執行是,一次性按照新增順序依次執行,中間不會被打斷或者干擾

乙個佇列中,一次性、順序行、排他性的執行一系列命令

1.2.1開啟事務

multi
作用

設定事務的開啟位置,此指令執行後,後續的所有指令均加入到事務中

1.2.2執行事務

exec
作用

設定事務的結束位置,同時執行事務,與multi成對出現,成對使用

加入事務的命令暫時進入到任務佇列中,並沒有立即執行,只有執行exec命令才開始執行

1.2.3取消事務

discard
作用

終止當前事務的定義,發生在multi之後,exec之前

事務的注意事項

語法錯誤

指命令書寫格式有誤

處理結果

如果定義的事務中所包含的命令存在語法錯誤,整體事務中所有命令均不會執行。包括那些語法正確的命令。

執行錯誤

指命令格式正確,但是無法正確的執行

處理結果

能夠正確執行的命令匯之星,執行錯誤的命令不會被執行

對key新增監控鎖,在執行exec錢如果key發生了變化,終止事務執行

watch key1 [key2..]
取消對所有key的監視

unwatch
使用setnx設定乙個公共鎖

setnx lock-key value
利用setnx命令的返回值特徵,有值則返回設定失敗,無值則返回設定成功

對於返回設定成功的,擁有控制權,進行下一步的具體業務操作

對於返回設定失敗的,不具有控制權,排隊或等待

操作完畢通過del操作釋放鎖

使用expire為鎖key新增時間限定,到時不釋放,放棄鎖

expire lock-key second

pexpire lock-key milliseconds

鎖時間設定推薦:最大耗時120%+平均網路延遲110%

如果業務最大耗時和網路平均延遲相差較大,取其中單個耗時較長即可

記憶體中的資料可以通過ttl指令獲取其狀態

sx:具有時效性的資料

-1:永久有效的資料

-2: 已經過期的資料或被刪除的資料或未定義的資料

優點:快速釋放不必要的記憶體占用

缺點:cpu壓力很大,無論cpu此時負載量多高,均占用cpu,會影響redis伺服器響應時間和指令吞吐量

資料到達過期時間,不做處理。等下次訪問該資料時刪除

優點:節約cpu效能,發現必須刪除的時候才刪除

缺點:記憶體壓力很大,可能出現長期占用記憶體的資料

週期性輪詢redis庫中的時效性資料,採用隨機抽取的策略,利用過期資料佔比的方式控制刪除頻率

特點:cpu效能占用設定有峰值,檢測頻度可自定義設定

記憶體壓力不是很大,長期占用記憶體的冷資料會被持續清理

redis使用記憶體儲存資料,在執行每乙個命令錢,會呼叫freememoryifneeded()檢測記憶體是否充足。如果記憶體不滿足新加入資料的最低儲存要求,redis要刪除一些歷史資料為當前指令清楚儲存空間。清理逐出的策略稱為逐出演算法。

2.4.1資料逐出配置-最大可使用記憶體

maxmemory
占用無記憶體的比例,預設值為0,表示不限制。生產環境中根據需求設定,通常設定在50%以上

2.4.2資料逐出配置-每次選取待刪除資料的個數

maxmemory-samples
採用隨機獲取資料的方式作為待檢測刪除資料

2.4.3資料逐出配置-刪除策略

maxmemory-policy
達到最大記憶體後的對被挑選出來的資料進行刪除的策略

影響資料逐出的相關配置

2.4.3.1檢測易失資料(有過期時間的資料)

volatitle-lru:挑選最近最少使用的資料淘汰 (使用時間最少)

volatile-lfu:挑選最近使用次數最少的資料淘汰(使用次數最少)

volatile-ttl:挑選將要過期的資料淘汰

volatitle-random:任意選擇資料淘汰

2.4.3.2檢測全庫資料

allkeys-lru:挑選最近最少使用的資料淘汰

allkeys-lfu:挑選最近使用次數最少的資料淘汰

allkeys-random:任意選擇資料淘汰

2.4.3.3放棄資料逐出

no-enviction(驅逐):禁止驅逐資料,會引發操作oom

每天進步一點點,加油

Redis 三 事務與持久化

redis 中的事務 transaction 是一組命令的集合,至少是兩個或兩個以上的命令,redis事務保證這些命令被執行時中間不會被任何其他操作打斷。事務執行 exec 之前,入隊命令錯誤 語法錯誤 嚴重錯誤導 致伺服器不能正常工作 例如記憶體不足 放棄事務。redis 的資料儲存在記憶體中,記...

Redis事務與監控

redis 事務的本質 一組命令的集合 乙個事務中的所有命令都會被序列化,在事務執行過程中,會按照順序執行 一次性 順序性 排他性 執行一系列的命令 佇列set set set 執行 redis的事務 127.0.0.1 6379 multi 開啟事務 ok 命令入隊 127.0.0.1 6379 ...

redis事務 redis 優化

redis提供許多批量操作的命令,如mset mget hmset hmget等等,這些命令存在的意義是減少維護網路連線和傳輸資料所消耗的資源和時間。例如連續使用5次set命令設定5個不同的key,比起使用一次mset命令設定5個不同的key,效果是一樣的,但前者會消耗更多的rtt round tr...