Redis 小白指南(三)- 事務、過期、消息通知、管道和優化記憶體空間 簡介 《Redis 小白指南(一)- 簡介、安裝、GUI 和 C# 驅動介紹》 講的是 Redis 的介紹,以及如何在 Windows 上安裝並使用,一些 GUI 工具和自己簡單封裝的 RedisHelper。 《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 小白指南(三)- 事務、過期、消息通知、管道和優化記憶體空間》
【博主】反骨仔
【原文】http://www.cnblogs.com/liqingwen/p/6920680.html
【GitHub】https://github.com/liqingwen2015/Wen.Helpers/blob/master/Wen.Helpers.Common/Redis/RedisHelper.cs
【參考】《Redis 入門指南》