久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

redis的四大特性和原理是什么

204次閱讀
沒有評論

共計 1947 個字符,預計需要花費 5 分鐘才能閱讀完成。

本篇內容介紹了“redis 的四大特性和原理是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、redis 的過期 A. 應用場景

cookie 自動過期,限制每分鐘的訪問次數

B. 實現方式

setex(String key, int seconds, String value)

expire key time #秒

pexpire key time #毫秒

expireat key time #秒

pexpireat key time #毫秒

C. 實現原理

定時清理

設置 key 過期時間的時候,就創建一個定時器,不斷循環,時間一到就刪除掉這個 key。

優點:過期 key 馬上被刪除,內存使用率最高。

缺點:如果有一萬個 key 設置了過期時間,就需要一萬個定時器,不斷循環,這會造成 cpu 性能的嚴重損耗。

懶漢式清理

在取 key 的時候,先判斷 key 是否有過期,如果過期,就刪除。

優點:過期 key,只有在被使用時才被刪除,對 cpu 的占用是最少的。

缺點:如果一個 key 過期之后,很長時間都沒有被使用過,那這個 key 會一直占用內存空間,一直不釋放。

定期清理 + 懶漢式清理

redis 采用的是這種方式。經過前面兩種策略可以很清楚的看到。定時清理和懶漢式清理,都不能達到一個最好的效果。

那現在有第三種,就是隔一段時間進行一次清理,清除掉過期的 key。比如一分鐘或者是十分鐘清理一次。

同時使用懶漢式清理,每次獲取 key 的時候能判斷一下,是否過期,是否需要清理。

二、redis 的發布訂閱

A. 應用場景

訂閱新聞頻道(體育,軍事等),關注大 V,關注好友,系統消息廣播。

B. 實現方式

PUBLISH channel message #發布消息

SUBSCRIBE channel [channel …] #訂閱一個或多個頻道

PSUBSCRIBE channel #訂閱一組匹配的頻道

C. 實現原理

pubsub_channels 存放頻道信息,pubsub_patterns 存放客戶端信息。通過類似觀察者模式,新的消息發送給每個訂閱者。

三、redis 的事務

redis 事務和 mysql 對比

redismysqlmultibeginexeccommitdiscardrollbackwatchlockA. 應用場景

秒殺商品的數量,搶票

B. 實現方式

watch multi exec discard

C. 實現原理

watch 的實現原理:

當一個 key 被修改后,就會對所有監控該 key 的客戶端,設置 dirty 標識。

multi 和 exec 的實現原理:

客戶端的三種狀態

REDIS_MULTI  客戶端進入事務狀態。

REDIS_DIRTY_EXEC 客戶端事務無效狀態。命令隊列中有發生錯誤的命令。

REDIS_DIRTY_CAS  客戶端事務處于非安全狀態。watch 的 key 已經被其他客戶端搶先修改了。

事務執行原理:

1. 事務執行成功。

第一步:客戶端設置事務狀態為 REDIS_MULTI;

第二步:將多條命令加入到命令隊列;

第三步:執行 exec,依次執行完命令隊列中的所有操作命令;

2. 第一種事務執行失敗 REDIS_DIRTY_EXEC。

第一步:客戶端設置事務狀態為 REDIS_MULTI;

第二步:將多條命令加入到命令隊列,但是命令隊列中,存在產生錯誤的命令;

第三步:錯誤的操作命令,導致客戶端狀態變成 REDIS_DIRTY_EXEC,事務執行失敗;

3. 第二種事務執行失敗 REDIS_DIRTY_CAS

第一步:客戶端設置事務狀態為 REDIS_MULTI;

第二步:將多條命令加入到命令隊列;

第三步:正在 watch 的 key 被其他的客戶端,搶先修改,導致客戶端狀態變成 REDIS_DIRTY_CAS,事務執行失敗;

四、redis 的 piplineA. 應用場景

一個客戶端能合并多條命令一起發送時,都推薦使用。例如,取出用戶信息,并且取出該用戶關注的用戶列表。

但是,如果命令過多時(返回時間大于 1 秒),可以拆分到兩個 client 分別去發送。

B. 實現方式

pipline 在命令中是沒有的,可以通過 java 客戶端(jedis)設置。

Pipeline pipe = jedis.pipelined();

pipe.set

C. 實現原理

pipeline 通過減少 client 與 redis-server 的連接通信的次數,來降低往返延時時間。

如果一次往返的時間是 10ms,往返一千次,就是 10 秒。而通過 pipline 的方式,往返時間是 20ms。

Pipeline 實現的原理是隊列,即先進先出。數據的順序性得到了保證。

“redis 的四大特性和原理是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-28發表,共計1947字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 开封县| 乌兰浩特市| 顺义区| 郓城县| 汉寿县| 区。| 西峡县| 龙川县| 玉龙| 东山县| 连平县| 兰州市| 虞城县| 古浪县| 静安区| 绥化市| 呈贡县| 辽源市| 桐城市| 水城县| 扎囊县| 西安市| 桐柏县| 莱芜市| 黑山县| 玉龙| 姚安县| 邵阳市| 钟山县| 芒康县| 溧水县| 婺源县| 九台市| 兴义市| 额尔古纳市| 双城市| 滦南县| 平乡县| 苗栗县| 沽源县| 鄢陵县|