Redis的存儲類型、集群架構(gòu)、以及應(yīng)用場景

file

什么是redis

redis是一種支持Key-Value等多種數(shù)據(jù)結(jié)構(gòu)的存儲系統(tǒng)。可用于緩存、事件發(fā)布或訂閱、高速隊(duì)列等場景。該數(shù)據(jù)庫使用ANSI C語言編寫,支持網(wǎng)絡(luò),提供字符串、哈希、列表、隊(duì)列、集合結(jié)構(gòu)直接存取,基于內(nèi)存,可持久化,支持多種開發(fā)語言。

file

redis在高并發(fā)場景下的作用不言而喻,今天主要分享Redis大家比較關(guān)心的以下幾個(gè)方面。

file

redis的數(shù)據(jù)類型

支持多種數(shù)據(jù)類型:

1.string(字符串)

String數(shù)據(jù)結(jié)構(gòu)是簡單的key-value類型,value其實(shí)不僅可以是String,也可以是數(shù)字。

常規(guī)key-value緩存應(yīng)用;

2.list(列表)

Redis的list是每個(gè)子元素都是String類型的雙向鏈表,可以通過push和pop操作從列表的頭部或者尾部添加或者刪除元素,這樣List即可以作為棧,也可以作為隊(duì)列。

使用List結(jié)構(gòu),我們可以輕松地實(shí)現(xiàn)最新消息排行等功能。

3.hash(散列)

Redis hash是一個(gè)string類型的field和value的映射表,hash特別適合用于存儲對象。

存儲部分變更的數(shù)據(jù),如用戶信息等。

4.sets (集合)

set就是一個(gè)集合,集合的概念就是一堆不重復(fù)值的組合。利用Redis提供的set數(shù)據(jù)結(jié)構(gòu),可以存儲一些集合性的數(shù)據(jù)。set中的元素是沒有順序的。

5.sorted set(有序集合)

和set相比,sorted set增加了一個(gè)權(quán)重參數(shù)score,使得集合中的元素能夠按score進(jìn)行有序排列。

redis的特點(diǎn)

1.單線程,利用redis隊(duì)列技術(shù)并將訪問變?yōu)榇性L問,消除了傳統(tǒng)數(shù)據(jù)庫串行控制的開銷

2.redis具有快速和持久化的特征,速度快,因?yàn)閿?shù)據(jù)存在內(nèi)存中。

3.分布式 讀寫分離模式

4.支持豐富數(shù)據(jù)類型

5.支持事務(wù),操作都是原子性,所謂原子性就是對數(shù)據(jù)的更改要么全部執(zhí)行,要不全部不執(zhí)行。

6.可用于緩存,消息,按key設(shè)置過期時(shí)間,過期后自動(dòng)刪除

redis的持久化存儲

Redis支持兩種數(shù)據(jù)持久化方式:RDB方式和AOF方式。前者會根據(jù)配置的規(guī)則定時(shí)將內(nèi)存中的數(shù)據(jù)持久化到硬盤上,后者則是在每次執(zhí)行寫命令之后將命令記錄下來。兩種持久化方式可以單獨(dú)使用,但是通常會將兩者結(jié)合使用。

1.RDB持久化

原理是將Reids在內(nèi)存中的數(shù)據(jù)庫記錄定時(shí)dump到磁盤上的RDB持久化。

指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤,實(shí)際操作過程是fork一個(gè)子進(jìn)程,先將數(shù)據(jù)集寫入臨時(shí)文件,寫入成功后,再替換之前的文件,用二進(jìn)制壓縮存儲。

file
2.AOF(append only file)持久化

原理是將Reids的操作日志以追加的方式寫入文件。

以日志的形式記錄服務(wù)器所處理的每一個(gè)寫、刪除操作,查詢操作不會記錄,以文本的方式記錄,可以打開文件看到詳細(xì)的操作記錄。

file

redis的集群方案有哪些

redis 集群方案主要有兩類,一是使用類 codis 的架構(gòu),按組劃分,實(shí)例之間互相獨(dú)立;

另一套是基于官方的 redis cluster 的方案。

1.codis 架構(gòu)
file

codis是一個(gè)豌豆莢團(tuán)隊(duì)開源的使用Go語言編寫的Redis
Proxy使用方法和普通的redis沒有任何區(qū)別,設(shè)置好下屬的多個(gè)redis實(shí)例后就可以了,使用時(shí)在本需要連接redis的地方改為連接codis,它會以一個(gè)代理的身份接收請求
并使用一致性hash算法,將請求轉(zhuǎn)接到具體redis,將結(jié)果再返回codis,和之前比較流行的twitter開源的Twemproxy功能類似。

這套架構(gòu)的特點(diǎn):
  • 分片算法:基于 slot hash桶;
  • 分片實(shí)例之間相互獨(dú)立,每組 一個(gè)master 實(shí)例和多個(gè)slave;
  • 路由信息存放到第三方存儲組件,如 zookeeper 或etcd
  • 旁路組件探活
codis是目前用的最多的集群方案,codis一個(gè)比較大的優(yōu)點(diǎn)是可以不停機(jī)動(dòng)態(tài)新增或刪除數(shù)據(jù)節(jié)點(diǎn),舊節(jié)點(diǎn)的數(shù)據(jù)也可以自動(dòng)恢復(fù)到新節(jié)點(diǎn)。
2.基于官方 redis cluster 的方案
file
  • Redis官網(wǎng)推出,可線性擴(kuò)展到1000個(gè)節(jié)點(diǎn)
  • 無中心架構(gòu)
  • 一致性哈希思想
  • 客戶端直連redis服務(wù),免去了proxy代理的損耗

具體的redis cluster的搭建方案可以參考官方的搭建方案。

redis的應(yīng)用場景

file
1、最全頁面緩存

如果你使用的是服務(wù)器端內(nèi)容渲染,你又不想為每個(gè)請求重新渲染每個(gè)頁面,就可以使用 Redis 把常被請求的內(nèi)容緩存起來,能夠大大的降低頁面請求的延遲。

2.排行榜/計(jì)數(shù)

Redis 基于內(nèi)存,可以非常快速高效的處理增加和減少的操作,相比于使用 SQL 請求的處理方式,性能的提升是非常巨大的。

Redis可以實(shí)現(xiàn)快速計(jì)數(shù)、查詢緩存的功能,同時(shí)數(shù)據(jù)可以異步落地到其他數(shù)據(jù)源。

典型應(yīng)用場景:

1)播放數(shù)計(jì)數(shù)的基礎(chǔ)組件,用戶每播放一次視頻,相應(yīng)的視頻播放數(shù)就會自增1。

2)排行榜:按照時(shí)間、按照數(shù)量、按照獲得的贊數(shù)等排行。

3. 共享Session

典型應(yīng)用場景:用戶登陸信息,Redis將用戶的Session進(jìn)行集中管理,每次用戶更新或查詢登陸信息都直接從Redis中集中獲取。

4、消息隊(duì)列

例如 email 的發(fā)送隊(duì)列、等待被其他應(yīng)用消費(fèi)的數(shù)據(jù)隊(duì)列,Redis 可以輕松而自然的創(chuàng)建出一個(gè)高效的隊(duì)列。

5、發(fā)布/訂閱

pub/sub 是 Redis 內(nèi)置的一個(gè)非常強(qiáng)大的特性,例如可以創(chuàng)建一個(gè)實(shí)時(shí)的聊天系統(tǒng)、社交網(wǎng)絡(luò)中的通知觸發(fā)器等等。

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容