你了解Redis嗎?
不知你大規(guī)模的用過Redis
嗎?還是僅僅作為緩存的工具了?

在Redis中使用最多的就是集合了,舉個(gè)例子,如下場景:
簽到系統(tǒng)中,一天對(duì)應(yīng)一系列的用戶簽到記錄。
電商系統(tǒng)中,一個(gè)商品對(duì)應(yīng)一系列的評(píng)論。
交友系統(tǒng)中,某個(gè)用戶的一系列的好友。
Redis中集合的特點(diǎn)無非是一個(gè)Key
對(duì)應(yīng)一系列的數(shù)據(jù), 但是數(shù)據(jù)的作用往往是為了統(tǒng)計(jì)的,比如:
交友系統(tǒng)中,需要統(tǒng)計(jì)每天的新增好友,以及雙方的共同好友。
電商系統(tǒng)中,需要統(tǒng)計(jì)評(píng)論列表中的最新評(píng)論。
簽到系統(tǒng)中,需要統(tǒng)計(jì)連續(xù)一個(gè)月的簽到的用戶數(shù)量。
大型互聯(lián)網(wǎng)應(yīng)用中,數(shù)據(jù)量是巨大的,少說百萬,千萬,甚至是一個(gè)億,比如電商巨頭淘寶,交友巨頭微信、微博;辦公巨頭釘釘?shù)?,哪一個(gè)的用戶不是上億?
只有針對(duì)不同場景,選擇合適的集合,統(tǒng)計(jì)才能更方便。

【redis是什么】
redis是一個(gè)開源的、使用C語言編寫的、支持網(wǎng)絡(luò)交互的、可基于內(nèi)存也可持久化的Key-Value數(shù)據(jù)庫。
redis的官網(wǎng)地址,非常好記,是redis.io。(特意查了一下,域名后綴io屬于國家域名,是british Indian Ocean territory,即英屬印度洋領(lǐng)地)
目前,Vmware在資助著redis項(xiàng)目的開發(fā)和維護(hù)。

開門見山,先看照片:

是不是出乎了你的意料,嗯,高手總會(huì)有些地方與眾不同的。
這位便是redis的作者,他叫Salvatore Sanfilippo,來自意大利的西西里島,現(xiàn)在居住在卡塔尼亞。目前供職于Pivotal公司。
他使用的網(wǎng)名是antirez,如果你有興趣,可以去他的博客逛逛,地址是antirez.com,當(dāng)然也可以去follow他的github,地址是http://github.com/antirez。
Redis是一種基于鍵值對(duì)的NoSQL數(shù)據(jù)庫,它的值主要由string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)五種基本數(shù)據(jù)結(jié)構(gòu)構(gòu)成,除此之外還支持一些其他的數(shù)據(jù)結(jié)構(gòu)和算法。key都是由字符串構(gòu)成的,那么這五種數(shù)據(jù)結(jié)構(gòu)的使用場景有哪些?一起來看看!

字符串類型是Redis最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),字符串類型可以是JSON
、XML
甚至是二進(jìn)制的圖片等數(shù)據(jù),但是最大值不能超過512MB。
1.1 內(nèi)部編碼
Redis會(huì)根據(jù)當(dāng)前值的類型和長度決定使用哪種內(nèi)部編碼來實(shí)現(xiàn)。
字符串類型的內(nèi)部編碼有3種:
int:8個(gè)字節(jié)的長整型。
embstr:小于等于39個(gè)字節(jié)的字符串。
raw:大于39個(gè)字節(jié)的字符串。
1.2 使用場景
1.2.1 緩存
在web服務(wù)中,使用MySQL作為數(shù)據(jù)庫,Redis作為緩存。由于Redis具有支撐高并發(fā)的特性,通常能起到加速讀寫和降低后端壓力的作用。web端的大多數(shù)請(qǐng)求都是從Redis中獲取的數(shù)據(jù),如果Redis中沒有需要的數(shù)據(jù),則會(huì)從MySQL中去獲取,并將獲取到的數(shù)據(jù)寫入redis。
1.2.2 計(jì)數(shù)
Redis中有一個(gè)字符串相關(guān)的命令incr key
,incr
命令對(duì)值做自增操作,返回結(jié)果分為以下三種情況:
值不是整數(shù),返回錯(cuò)誤
值是整數(shù),返回自增后的結(jié)果
key不存在,默認(rèn)鍵為
0
,返回1
比如文章的閱讀量,視頻的播放量等等都會(huì)使用redis來計(jì)數(shù),每播放一次,對(duì)應(yīng)的播放量就會(huì)加1,同時(shí)將這些數(shù)據(jù)異步存儲(chǔ)到數(shù)據(jù)庫中達(dá)到持久化的目的。
1.2.3 共享Session
在分布式系統(tǒng)中,用戶的每次請(qǐng)求會(huì)訪問到不同的服務(wù)器,這就會(huì)導(dǎo)致session不同步的問題,假如一個(gè)用來獲取用戶信息的請(qǐng)求落在A服務(wù)器上,獲取到用戶信息后存入session。下一個(gè)請(qǐng)求落在B服務(wù)器上,想要從session中獲取用戶信息就不能正常獲取了,因?yàn)橛脩粜畔⒌膕ession在服務(wù)器A上,為了解決這個(gè)問題,使用redis集中管理這些session,將session存入redis,使用的時(shí)候直接從redis中獲取就可以了。
1.2.4 限速
為了安全考慮,有些網(wǎng)站會(huì)對(duì)IP進(jìn)行限制,限制同一IP在一定時(shí)間內(nèi)訪問次數(shù)不能超過n次。

綜上所述就是Redis部分知識(shí)點(diǎn),
什么?怎么樣才能知道更多的Redis的知識(shí)?
看視頻啊~視頻中有你想知道的