亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis基礎知識的示例分析

發布時間:2022-01-05 17:53:18 來源:億速云 閱讀:127 作者:小新 欄目:大數據

小編給大家分享一下Redis基礎知識的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

什么是Redis

Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。

它支持多種類型的數據結構,如字符串, 散列, 列表, 集合, 有序集合與范圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。 

Redis 內置了復制,LUA腳本, LRU驅動事件,事務和不同級別的磁盤持久化, 并通過 Redis哨兵(Sentinel)和自動分區(Cluster)提供高可用性。

以上來自redis.cn 上的介紹,簡單的說,Redis是一個支持多種數據結構并且能夠持久化的高性能NoSQL 數據庫。

Redis 的存儲實現

Redis作為一個性能高達10萬qps的key/value存儲類型的NoSQL數據庫,大致的存儲實現體系如下:

Redis基礎知識的示例分析

一個RedisServer包含了N個redisDb,redisDb有dict的指針和失效時間的指針,核心是dictEntry 指針鏈表的指針,每一個具體的dictEntry鏈表節點存儲了任意類型的key 和 value,不論是key還是value 都可以是redisObject。可以認為,指針鏈表的特性對redis的性能做出重要的作用。

Redis 中的數據結構與存儲實現關系如下:

Redis基礎知識的示例分析

INT壓縮存儲String,常量數字對象是共享的。SDS 存儲string,變長的字符數組以及共享的常用字符串等。雙端列表LINKEDLIST來存儲list,支持雙向遍歷。HT是hash表,存儲set和hash,根據填充率縮放,支持事件觸發。INTSET壓縮存儲set,編碼為int16_t/ int32_t/ int64_t。SKIPLIST存儲有序集,聯合dict處理zset。ZIPLIST通過雙端指針壓縮存儲hash、list和zset。

Redis存儲實現中的網絡模型支持Epoll/Select/Kqueue等,事件模型主要是TimeEvent/FileEvent。由于FileEvent處理器是單線程的,所以 redis 是單線程的模型。Redis 單線程模型是純內存操作,核心是基于非阻塞的 IO 多路復用機制,單線程反而避免了多線程的頻繁上下文切換問題,因而整體的存儲實現性能很高。

Redis 的常見命令集

Redis 簡潔易用,為了方便記憶,命令集分類如下: 

Redis基礎知識的示例分析

Redis基礎知識的示例分析

Redis基礎知識的示例分析

訪問Redis的客戶端類型豐富,幾乎涵蓋了大多數的主流編程語言: 

Redis基礎知識的示例分析

Redis 的集群部署

Redis 自2.4 版本開始就可以在生產環境上穩定可用了,在2.6版本引入了Lua腳本和Watch dog,2.8版本對主從同步進行了優化,并開始支持Sentinel 和 HyperLog。Redis 2.x 的集群主要是通過主從同步實現的,數據是異步復制和增量同步。

有限狀態機在主從同步和數據持久化方面起到了重要的作用。數據持久化是通過快照實現的,通信協議是RESP,一種便于實現和理解的二進制安全協議。AOF 最終通過fsync寫入磁盤實現數據的持久化。

從3.0開始,Redis 支持cluster,cluster內部的各節點間采用的Gossip分布式協議。通過多數原則判斷節點是否宕機,由gossip協議傳播判活信息,選舉出新的替代者,由gossip協議傳播選舉結果。

Redis基礎知識的示例分析

Redis 集群可以實現自動故障切換,副本遷移和在線的重新分片。分片變化,數據遷移同樣通過gossip協議達成一致。

然而,Redis cluster 同樣存在著不足,例如隨著節點的增加,故障切換會有大幅的增加,gossip傳播信息需要一段時間,整機房切換比較慢。按key同步阻塞的遷移對讀寫影響較大,Gossip協議的調試非常困難,給故障的排除會帶來諸多的不便。

關注redis 的官方網站,可以看到redis 4.0 以來的諸多新變化。

Redis 的常見應用

Redis 的應用十分廣泛,在key/value 的NoSQL中有著突出的性能體現,甚至和文檔型NoSQL——MongoDB 在某些方面有著類似的作用。Redis, Memcache和MongoDB 的對比如下圖所示: 

Redis基礎知識的示例分析

根據用戶標識獲取用戶的相關數據在互聯網應用中是一種常見的場景,這類數據具有讀寫量大,但單條數據不長,并且對某些字段經常進行更新等特點,一般都會使用redis 這樣類型key/value 數據庫來實現。Redis在內存中對數字進行遞增或遞減的操作實現的非常好。集合(Set)和有序集合(Sorted Set)也使得在執行這些操作時非常簡單,Redis正好提供了這兩種數據結構,因而對排行榜類的場景

對于分布式鎖的業務,Redis 可以提供高性能的分布式鎖服務,例如電商業務的秒殺場景,全局自增ID等等。

以上是“Redis基礎知識的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

和顺县| 文昌市| 武城县| 三都| 年辖:市辖区| 邳州市| 卓尼县| 成武县| 浮山县| 丹寨县| 莫力| 大田县| 白朗县| 克山县| 类乌齐县| 新河县| 西华县| 志丹县| 渭源县| 阿鲁科尔沁旗| 若尔盖县| 彭山县| 治多县| 轮台县| 平罗县| 沅江市| 高唐县| 太仆寺旗| 新竹县| 旬阳县| 西峡县| 呼玛县| 白朗县| 江陵县| 忻州市| 南雄市| 红桥区| 增城市| 长武县| 乌拉特中旗| 乃东县|