Redis 小白指南(三)- 事務、過期、消息通知、管道和優化內存空間


Redis 小白指南(三)- 事務、過期、消息通知、管道和優化內存空間

簡介

  《Redis 小白指南(一)- 簡介、安裝、GUI 和 C# 驅動介紹》 講的是 Redis 的介紹,以及如何在 Windows 上安裝並使用,一些 GUI 工具和自己簡單封裝的 RedisHelper。

  《Redis 小白指南(二)- 聊聊五大類型:字符串、散列、列表、集合和有序集合》講的是 Redis 中最核心的內容,最常用的就是和數據類型打交道。

 

目錄

  • 事務
  • 過期時間
  • 消息通知
  • 管道
  • 優化內存空間

 

事務

  事務是一組命令的集合,事務和命令一樣都是 Redis 的最小執行單位。即一個事務中的命令,要么都執行,要么都不執行。可以思考關系型數據庫中的事務特性 ACID:

    (1)原子性(Atomicity):在事務結束時,其中包含的更新處理要么全部執行,要么完全不執行。

    (2)一致性(Consistency):事務中包含的處理,要滿足數據庫提前設置的約束,也稱完整性。

    (3)隔離性(lsolation):保證不同事務之前互不干擾的特性。

    (4)持久性(Durability):事務一旦結束,DBMS 會保證該時點的數據狀態得以保存的特性,也稱耐久性。

 

  Redis 可以保證一個事務中的命令依次執行而不會被其它命令插入。如:Client A 需要執行多條指令,同時 Client B 也執行多條指令,因為網絡傳輸或者時間等因素造成指令發送到 Redis 服務器的順序有先后,即有可能會出現 A 發送的指令和 B 發送的指令形成了交叉,使用事務就可以避免這種情況。

  遺憾的是,Redis 不支持回滾。

 

MULTI    //開啟事務的指令

EXEC    //執行事務,依次執行

 

  當客戶端發送了 EXEC 的指令后,即使客戶端此時突然斷開與服務器的鏈接,事務中的操作依然會依次執行,因為他們都已經被緩存到 Redis 事務的隊列中了。

 

過期時間

  1.設置過期時間意味着一段時間后就會刪除 redis 中指定的數據。

  2.應用場景:限時優惠活動、緩存、學校成績排名和游戲積分排名定期刷新。

  

  3.命令:

  (1)EXPIRE:

EXPIRE key seconds  //seconds 參數表示鍵的過期時間,單位是秒

 

  (2)TTL:查看剩余時間

TTL key

 

  (3)DEL:刪除

DEL key

 

  (4)PERSIST:取消鍵的過期時間設置(將該鍵切換成永久性質的)

PERSIST key

 

消息通知

  1.什么情況才會使用呢?

  答:比如,我們的網站進行一些比較耗時的操作時,如發送郵件、復雜的數據運算和 IO 日志記錄等都可以使用,因為這樣可以避免阻塞前端頁面的渲染,避免用戶進行長時間的等待。一般我們會使用多線程和異步進行處理這種耗時操作的問題。

 

  2.什么是消息通知?

  答:你可以理解為常說的消息隊列,類似設計模式中的生產/消費模式,一邊是生產者(producer),一邊是消費者(consumer)。生產者負責把要處理的任務丟到隊列里,消費者負責取出隊列中的任務進行執行。

 

  3.特點:

    松耦合:沒有語言限制,開發團隊可以分別使用不同的開發語言,雙方約定好數據的傳輸格式即可。

    易於擴展:消費者可以有多個,部署在多台服務器上,輕松減輕單台服務器的壓力。

 

  不過,從大局來看,企業常采用第三方更為專業的 MQ,如 RabbitMQ 替代 Redis 的消息隊列機制。《[.NET] RabbitMQ 的行為藝術》

 

管道

  客戶端和 Redis 采用的是 TCP 進行連接。

  我們對 Redis 發送一條指令后進行等待,完畢后返回執行結果;接着,發送第二條指令,再次等待 Redis 執行完畢后的執行結果;第三次發送指令 ... ...。

  雖然現在的網絡帶寬已經足夠快,不過如果執行的命令過多,性能消耗依然是挺明顯的。

  管道機制,它把多條命令一次性組合起來發送到 Redis 服務器執行,再返回所有的執行結果,與之前的相比減少了兩端網絡請求的次數從而提高了性能。

 

優化內存空間

  雖然在現在這個年代,內存條的價格已經非常便宜,但相對於硬盤來說,價格依然非常高昂,進行內存空間成本的控制和資源的有效利用也是一個迫切的主題。

  1.精簡鍵名和鍵值。不過需要自己把握精簡的尺度,因為要基於可讀性的基礎上進行精簡,過於精簡不易於維護也容易造成命名沖突。

  2.選擇合適的數據類型進行存儲。

  3.定時清理(刪除)無效的緩存數據,或者設置自動過期時間。

  4.配置 Redis 可用的最大空間大小,進行資源的合理分配。

 

系列

  《Redis 小白指南(一)- 簡介、安裝、GUI 和 C# 驅動介紹

  《Redis 小白指南(二)- 聊聊五大類型:字符串、散列、列表、集合和有序集合

  《Redis 小白指南(三)- 事務、過期、消息通知、管道和優化內存空間》

  《Redis 小白指南(四)- 數據的持久化保存

 

 


【博主】反骨仔

【原文】http://www.cnblogs.com/liqingwen/p/6920680.html 

【GitHub】https://github.com/liqingwen2015/Wen.Helpers/blob/master/Wen.Helpers.Common/Redis/RedisHelper.cs

【參考】《Redis 入門指南》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM