Redis是什么,redis是什么

Redis是啥?

Redis是什么,redis是什么


想要了解Redis,先從Redis是什么?為何要用Redis?有哪些特性,以及其集群架構來幾個方面來了解 。Redis 簡介Redis 是一個開源(BSD 許可)的、內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件 。為什么要用 Redis在高并發場景下,如果需要經常連接結果變動頻繁的數據庫,會導致數據庫讀取及存取的速度變慢,數據庫壓力極大 。
因此我們需要通過緩存來減少數據庫的壓力,使得大量的訪問進來能夠命中緩存,只有少量的需要到數據庫層 。由于緩存基于內存,可支持的并發量遠遠大于基于硬盤的數據庫 。所以對于高并發設計,緩存的設計是必不可少的一環 。而 Redis 作為比較熱門的內存存儲系統之一,由于其對數據持久化的支持,種類豐富的數據結構,使其定位更傾向于內存數據庫,適用于對讀寫效率要求都很高、數據處理業務復雜和對安全性要求較高的系統 。
Redis 特征單線程,利用 redis 隊列技術將訪問變為串行訪問,消除了傳統數據庫串行控制的開銷 。Redis 的線程模型:Redis 支持數據的持久化,包括 RDB 的全量持久化,或者 AOF 的增量持久化,從而使得Redis 掛了,數據是有機會恢復的 。也可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用 。
【Redis是什么,redis是什么】分布式架構,讀寫分離 。支持的數據結構豐富 。Redis 不僅僅支持簡單的 key-value 類型的數據,同時還提供 list、set、zset、hash 等數據結構的存儲 。Redis 支持數據的備份,提供成熟的主備同步,故障切換的功能,從而保證了高可用 。Redis Cluster 架構Redis 搭建方式有很多種,本章主要介紹 Redis Cluster 集群構建方式:Redis 3.0 之后版本支持 Redis Cluster 集群,Redis Cluster 采用無中心結構,每個節點保存數據和整個集群狀態,每個節點都和其他所有節點連接 。
Redis Cluster 為了保證數據的高可用性,加入了主從模式,一個主節點對應一個或多個從節點,主節點提供數據存取,從節點則是從主節點拉取數據備份,當這個主節點掛掉后,就會有這個從節點選取一個來充當主節點,從而保證集群不會掛掉 。主從結構,一是為了純粹的冗余備份,二是為了提升讀性能,比如很消耗性能的 SORT 就可以由從服務器來承擔 。
redis有哪些數據類型?
Redis是什么,redis是什么


Redis中的所有 value 都是以 Object 的形式存在的,其通用結構如下:typedef struct redisObject {unsigned [type] 4;unsigned [encoding] 4;unsigned [lru] REDIS_LRU_BITS;int refcount;void *ptr;} robj;type:指類型,String、Hash、List、Set、ZSet;encoding:類型具體的實現方式;比如 Set 是用 hashTable 實現還是 intSet 實現;lru:最后一次被訪問的信息,其實一看到 LRU 估計也就和淘汰策略有關;refcount:對象引用計數;ptr:指向實際實現者的地址;StringRedis 中的 String 不僅僅表示 字符串,還可以表示 整型、浮點型 。
String 的編碼可以是 int、raw 或者 embstr;單說普通的字符串,就有 raw 和 embstr 兩種實現方式,embstr 是 Redis 3.0 新增的數據結構:字符串長度小于 39 字節,就用 embstr 對象,否則用傳統的raw對象(Redis 3.2版本之后,這里變成了以 44 字節為分界) 。
embstr 的優勢在于創建時少分配一次空間(RedisObject 和 sds 是連續的),刪除時少釋放一次空間,以及對象的所有數據連在一起,尋找方便;當然缺點也非常明顯,如果字符串的長度增加,需要重新分配內存的時候,整個 RedisObject 和 sds 都需要重新分配空間 。修改 embstr 對象的時候,Redis 會將其轉換成 raw 格式再進行修改,所以 embstr 對象修改之后的對象,一定是 raw 的 。

推薦閱讀