溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

redis除了緩存數(shù)據(jù)還能做什么

發(fā)布時(shí)間:2020-06-25 12:27:32 來(lái)源:億速云 閱讀:241 作者:Leah 欄目:關(guān)系型數(shù)據(jù)庫(kù)

redis除了緩存數(shù)據(jù)還能做什么?可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Redis應(yīng)該說(shuō)是目前最受歡迎的NoSQL數(shù)據(jù)庫(kù)之一了。Redis通常被作為緩存組件,用作緩存數(shù)據(jù)。不過(guò),除了可以緩存數(shù)據(jù),其實(shí)Redis可以做的事還有很多。下面列舉幾例,供大家參考。

1、最新列表

例如新聞列表頁(yè)面最新的新聞列表,如果總數(shù)量很大的情況下,盡量不要使用select a from A limit 10,嘗試redis的 LPUSH命令構(gòu)建List,一個(gè)個(gè)順序都塞進(jìn)去就可以啦。不過(guò)萬(wàn)一內(nèi)存清掉了咋辦?

也簡(jiǎn)單,查詢(xún)不到存儲(chǔ)key的話,用mysql查詢(xún)并且初始化一個(gè)List到redis中就好了。

2、排行榜應(yīng)用

實(shí)現(xiàn)這個(gè)功能主要用到的redis數(shù)據(jù)類(lèi)型是redis的有序集合zset。zset 是set 類(lèi)型的一個(gè)擴(kuò)展,比原有的類(lèi)型多了一個(gè)順序?qū)傩?,此屬性在每次插入?shù)據(jù)時(shí)會(huì)自動(dòng)調(diào)整順序值,保證value值按照一定順序連續(xù)排列。

我們假設(shè)是一個(gè)游戲經(jīng)驗(yàn)值排行榜,那主要的實(shí)現(xiàn)思路是:

1、在一個(gè)新的玩家參與到游戲中時(shí),在redis中的zset中新增一條記錄(記錄內(nèi)容看具體的需求)score為0

2、當(dāng)玩家的經(jīng)驗(yàn)值發(fā)生變化時(shí),修改該玩家的score值

3、使用redis的ZREVRANGE方法獲取排行榜

3、計(jì)數(shù)器應(yīng)用

Redis的命令都是原子性的,你可以輕松地利用INCR、DECR命令進(jìn)行原子性操作,來(lái)構(gòu)建計(jì)數(shù)系統(tǒng)。由于單線程,可以避免并發(fā)問(wèn)題,保證不會(huì)出錯(cuò),而且100%毫秒級(jí)性能。

比如在一個(gè) web 應(yīng)用程序中,如果想知道用戶(hù)在一年中每天的點(diǎn)擊量,那么只要將用戶(hù) ID 以及相關(guān)的日期信息作為鍵,并在每次用戶(hù)點(diǎn)擊頁(yè)面時(shí),執(zhí)行一次自增操作即可。

4、數(shù)據(jù)排重

Redis set是可以自動(dòng)排重的,當(dāng)你需要存儲(chǔ)一個(gè)列表數(shù)據(jù),又不希望出現(xiàn)重復(fù)數(shù)據(jù)時(shí),set是一個(gè)很好的選擇,并且set提供了判斷某個(gè)成員是否在一個(gè)set集合內(nèi)的重要接口。

實(shí)現(xiàn)方案:

set 的內(nèi)部實(shí)現(xiàn)是一個(gè) value永遠(yuǎn)為null的HashMap,實(shí)際就是通過(guò)計(jì)算hash的方式來(lái)快速排重的,這也是set能提供判斷一個(gè)成員是否在集合內(nèi)的原因。

5、實(shí)時(shí)的反垃圾系統(tǒng)

反垃圾系統(tǒng)通常都是基于關(guān)鍵詞的,使用Redis儲(chǔ)存關(guān)系詞,能夠利用Redis的高性能,為監(jiān)控系統(tǒng)提供穩(wěn)定及精確的實(shí)時(shí)監(jiān)控功能,典型的案例如,郵件系統(tǒng)、評(píng)論系統(tǒng)等。

6、可以發(fā)布、訂閱的實(shí)時(shí)消息系統(tǒng)

Redis中Pub/Sub系統(tǒng)可以構(gòu)建實(shí)時(shí)的消息系統(tǒng),比如,很多使用Pub/Sub構(gòu)建的實(shí)時(shí)聊天應(yīng)用。

設(shè)計(jì)思路:

服務(wù)端發(fā)送消息(含標(biāo)題,內(nèi)容),標(biāo)題按照一定規(guī)則存入redis,同時(shí)標(biāo)題(以最少的信息量)推送到客戶(hù)端,客戶(hù)點(diǎn)擊標(biāo)題時(shí),獲取相應(yīng)的內(nèi)容閱讀.

如果未讀取,可以提示多少條未讀,redis能夠很快記數(shù)

根據(jù)一定時(shí)間清理緩存

技術(shù)實(shí)現(xiàn):

需要redis數(shù)據(jù)庫(kù),客戶(hù)端websocket,服務(wù)器端websocket

7、隊(duì)列應(yīng)用

隊(duì)列在現(xiàn)在程序中應(yīng)用十分廣泛,比如日志推送、任務(wù)處理等等。以往通常使用http sqs實(shí)現(xiàn)隊(duì)列,其實(shí),使用redis的list類(lèi)型,也可以實(shí)現(xiàn)隊(duì)列。

看完上述內(nèi)容,你們對(duì)redis除緩存數(shù)據(jù)之外的其他功能有進(jìn)一步的了解嗎?如果還想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI