1. 程式人生 > >Redis 小白指南(三)- 事務、過期、消息通知、管道和優化內存空間

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

如何 入門 系列 code 場景 消息 運算 封裝 c#

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 入門指南》

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