redis事務、鎖、刪除策略

一、redis事務

事務命令

 multi 開啓事務,將接下來的命令存在一個列表裏

 exec 執行事務,將存在列表裏的依次執行。

注意:命令書寫格式有誤 錯誤將取消這次事務執行;命令格式正確,但是無法正確的執行。例如對list進行incr操作 ,能夠正常執行事務,只是對錯誤的不執行而已。

discard 取消事務 將列表銷燬

二、redis鎖

鎖命令

watch key [key1] 添加監視鎖

unwatch 取消所有key的監視鎖

setnx lock-key value 設置公共鎖

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

對於返回設置失敗的,不具有控制權,排隊或等待   操作完畢通過del操作釋放鎖

爲了避免一個公共鎖忘記釋放而一直佔有的情況,可以將鎖設置一個時間限定。

expire lock-key second 使用 expire 爲鎖key添加時間限定,到時不釋放,放棄鎖

 pexpire lock-key milliseconds 使用 pexpire 爲鎖key添加時間限定,到時不釋放,放棄鎖

三、redis刪除策略

 Redis是一種內存級數據庫,所有數據均存放在內存中,內存中的數據可以通過TTL指令獲取其狀態

XX :具有時效性的數據

-1 :永久有效的數據

-2 :已經過期的數據 或 被刪除的數據 或 未定義的數據 

數據刪除策略 


1. 定時刪除

 創建一個定時器,當key設置有過期時間,且過期時間到達時,由定時器任務立即執行對鍵的刪除操作 
 
優點:節約內存,到時就刪除,快速釋放掉不必要的內存佔用

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

2. 惰性刪除

數據到達過期時間,不做處理。等下次訪問該數據時, 如果未過期,返回數據 ; 發現已過期,刪除,返回不存在 
 
優點:節約CPU性能,發現必須刪除的時候才刪除

缺點:內存壓力很大,出現長期佔用內存的數據 

3. 定期刪除 

週期性輪詢redis庫中的時效性數據,採用隨機抽取的策略,利用過期數據佔比的方式控制刪除頻度 
 
特點1:CPU性能佔用設置有峯值,檢測頻度可自定義設置

特點2:內存壓力不是很大,長期佔用內存的冷數據會被持續清理 

 總結:是之前兩種的折中方案,週期性抽查存儲空間 (隨機抽查,重點抽查) 

逐出算法

Redis使用內存存儲數據,在執行每一個命令前,會調用freeMemoryIfNeeded()檢測內存是否充足。如果內存不滿足新加入數據的最低存儲要求,redis要臨時刪除一些數據爲當前指令清理存儲空間。清理數據的策略稱爲逐出算法。 

相關配置

 最大可使用內存  maxmemory
 佔用物理內存的比例,默認值爲0,表示不限制。生產環境中根據需求設定,通常設置在50%以上。 
 
每次選取待刪除數據的個數 maxmemory-samples
 選取數據時並不會全庫掃描,導致嚴重的性能消耗,降低讀寫性能。因此採用隨機獲取數據的方式作爲待檢測刪除數據 
 
 刪除策略 maxmemory-policy
達到最大內存後的,對被挑選出來的數據進行刪除的策略 

數據刪除策略

檢測易失數據(可能會過期的數據集server.db[i].expires )

① volatile-lru:挑選最近最少使用的數據淘汰

② volatile-lfu:挑選最近使用次數最少的數據淘汰

③ volatile-ttl:挑選將要過期的數據淘汰

④ volatile-random:任意選擇數據淘汰

檢測全庫數據(所有數據集server.db[i].dict )

⑤ allkeys-lru:挑選最近最少使用的數據淘汰

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

⑦ allkeys-random:任意選擇數據淘汰

放棄數據驅逐

⑧ no-enviction(驅逐):禁止驅逐數據(redis4.0中默認策略),會引發錯誤OOM(Out Of Memory) 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章