首頁 > 常見問題 > 主體

redis有什麼用

(*-*)浩
發布: 2020-09-17 11:05:59
原創
42927 人瀏覽過

redis的作用:1、取得最新的n個資料;2、取得TOP N的資料;3、設定精確的搶購時間;4、實作計數器;5、移除重複值;6、利用set命令製作反垃圾系統;7、建構隊列系統。

redis有什麼用

很多小夥伴在花時間學習完redis資料庫後,很迷茫.感覺很空虛,不知道自己學習完這東西,能做點什麼.從而喪失了繼續學習的動力.為了能夠讓大家在學習redis的道路上繼續前行.我覺得很有必要為大家整理一份簡單實用的redis應用場景指南。

1. 取得最新的n個資料

為了讓小夥伴更能理解,我這裡結合範例講解.

範例:

现在你在和讯网黄金频道上班,项目经理让你负责每天在频道首页生成一张数据表,来展示1个月内的国际黄金的开盘和收盘价格.如果
我们从mysql数据库中按时间排序取出,固然可以.但是你要考虑和讯网的并发量,和你排序时对资源的一个浪费程度.
登入後複製

這時候我們選取redis的清單存取,就顯得很有必要了,我們知道redis有一種佇列(list)的資料結構,同時它還具備先進先出的特性.那這樣的話,我去最新的1個月的數據不就信手拈來麼.一個lrange命令即可簡單地取出你想要的區間的值.

2. 獲取TOP N 的數據

接下來的這個例子,看標題,感覺跟第1中應用差不多,其實還是有差別的.應用1我們是利用列表的先進先出的特性,按訪問時間來取,接下來我們的這個範例,就是利用有序集合的特性來解決實際問題.

现在你受雇于APPLESTORE,项目经理要求你在商店首页,展示下载量排行前30的APP.
登入後複製

這個時候,你若能夠想到我們redis學習過程中,給大家講到的SortedSet有序集合,那就再好不過了.我們只需要將每個APP產生一個唯一的ID,將其作為集合中成員member,下載數目作為成員的score.那麼當你將這個score插入到有序集合中時,redis就會按其進行大小排序,自然有個有序的集合就形成了.最終你要取前N或者後N的數據,就在於你自己了.

3. 設定精準的搶購時間

設定搶購,促銷時間,這項技術在電商領域確實很實用.

现在你在阿里的淘宝事业部上班,领队组长分配你来完成一个限时抢购活动,某商品中午10:00开始进行抢购,1小时后,活动结束.
登入後複製

咿呀,既然限時,要準確地1個小時結束.這個時候我們學習redis的過程中,講到的key的有效期就派上用場了.我們可以將某個活動的key的過期時間設置為過期時刻的時間戳,用戶搶購的過程中並發是很高的.那麼這個時候提交的資料我們未必就需要立即存入我們的硬碟資料庫.使用者下單時我們取得該活動的key是否過期,未過期,允許使用者下單,訂單資料暫時記憶體快取.一旦該key失效,禁止使用者下單,同時,我們可以將剛才並發的那麼多筆單進行硬碟資料庫的導入即可.一來實現了精準時間的設定,二來,應對了搶購的高並發量.

4. 輕鬆實作計數器

你目前就职的单位是中央全面深化改革领导小组技术顾问办公室,在过去如果全国人民一起选代表,既浪费人力又浪费财力.现在网络技术
发展了,习近平组长交代由你牵头开发点赞选人大平台.
接到这个项目,你是不是很犯难,13亿啊!可能同时集中在某个时间段,点赞,如此大的IO请求.硬盘数据库多少有些力不从心.哎,这个时候
你要运用上我们的内存数据库系统了,redis中对key的增incre,减decr不正适合你的需求么.
登入後複製

5. 移除重複值

移除重複值,聽起來很熟悉,我們的MySQL不是有unique索引嗎?哦,好吧,我要說的是我們redis中的對字符串的set命令更使用.

你现在在下厨房平台,任职技术兼策划.你准备收集天下美食,苦于不知菜名.网络是有魔力的,人名群众的智慧是无穷的.你准备发动全
国的网友们,为你提供菜名,同时你还不想让大家发出相同菜名.
登入後複製

看到如此問題,你是否還能想到我們之前在學習redis的字符串類型時,說到的set指令,我們講預設情況,不給其他參數時,如果我們的key不存在,則建立新增.如果key已經存在,則舊值覆寫新值.既然如此,key值存在,則覆蓋.不正是我們需要的模型麼?

6. 利用set指令製作反垃圾系統

##很多小夥伴,看到這,蒙了.一個破set指令什麼時候還能反垃圾了.咦,你應該腦洞大一些,再大一些.

上次你制作的统计菜名系统,领导会上先把你肯定了一番,然后义正言辞地说,小明啊,你这系统不太符合净网行动的要求啊,有些网友把一
些带有明显淫秽色情的菜名都提交到了系统.还被展示出来投票,这不荒唐吗?
登入後複製
嚇的你一陣冷汗,這個時候你想到了在XX教育高性能架構班學習的同桌小胖.電話裡小胖告訴你,當我們使用set命令對字符串進行操作時,給它一個NX參數,這樣的話只有用戶提交的key不存在時,才會對key進行操作.你去網上down一個敏感字彙字典,提前set入庫,不就可以實現反垃圾了麼.聽完小胖的指導,緊張的你如釋重負.

7. 利用發布訂閱的中的SUBSCRIBE和PUBLISH指令建立即時訊息推播系統

费了老鼻子劲,你终于进入了新浪微博事业部.第二天组长找到正埋头苦干的你.小明,咱们微博也要搞个跟FB一样一样的关注功能,搞大
V认证,大V一发消息,赶紧推送给关注的那群XX,让XX跟大V赶紧互动起来.以此来提高用户粘性.组长走后,”赶紧,推送”,这两个词在你的耳畔不时地回响.
登入後複製
你又想到了小胖,小胖電話裡告訴你.redis裡有subscribe訂閱和publish發布功能的.你掛了電話,去自學it網裡一搜尋,果不其然.一個subscribe可以訂閱不同的用戶模型,只要對應的模型有publish實現,訂閱者即可實時收到,推送的消息.你雖然不是王大錘,但你也萬萬沒想到redis竟然有如此功能.O(∩_∩)O哈哈~

8. 建構佇列系統#

忙完微博的事,正准备收拾东西去挤地铁的你.突然被组长叫住了.
小明,你虽然完成了微博关注和推送的技术架构.但是这几天又有个新问题出现了.因为FB用不了,微博用户暴增.特别是认证大V的用户越
来越多,就连门口烤红薯的大爷早上还拽着我说,给他整个大V吧,俺不差钱.老板为了缓解认证方面的压力,已经开始收费认证了,但是还是
挡不住这群XX.赶上过节饭点,大V们几乎同时发微博,推送服务器有点压力.你把这个问题解决了,再走吧,晚点回去打车公司报销.然后打
完卡他走了.
登入後複製

“同时发微博”,”同时推送,服务器压力大”.你从电脑中找到了小胖之前发给你的那本redis自学笔记,笔记上说.我们可以将若干个需要执行的事件加入队列,然后按时间的顺序去逐个逐个的执行.这个时候你又想到了一个提高用户互动性的好办法.我能不能让粉丝数目多的大V的微博优先推送呢?毕竟粉丝基数大,影响大,总能搞出一个大新闻.既然这样,我直接使用有序队列不就行了.把一个个大V的微博推送事件ID存入有序队列,同时依据粉丝数给予权重(或说优先级).不就可以达到我们的需求了么.

9. 缓存

这一点大家应该很熟悉了,它可以像memcache一样充当缓存数据库.不过的它的数据类型比memcache多的多,应对场景自然要比memcache丰富的多.比较时髦的用法是,用其来缓存会话哦.

以上是redis有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板