先介紹一(yī)下(xià)Redis
簡介:REmote DIctionary Server(Redis→↔<) 是(shì)一(yī)個(gè)由Salvatoreδ♣ Sanfilippo寫的(de) key-value存儲系統,是(sh죀α)跨平台的(de)非關系型數(shù)據庫。
Redis是(shì)一(yī)個(gè)開(kāi)源的(d•≤≠'e)使用(yòng)ANSI C語言編寫≈<、遵守BSD協議(yì)、支持網絡、可(kě)基于內(nèi)存、分(<∞✔fēn)布式、可(kě)選持久性的(de)鍵值對(duì)✘← ×(Key-Value)存儲數(shù)據庫, ↑并提供多(duō)種語言的(de)API。
Redis通(tōng)常被稱為(wèi)數(s₩♥hù)據結構服務器(qì),因為(wèi)♠✘←值(value)可(kě)以是(shì)字符串(String)、哈希™↕÷←(Hash)、列表(list)、集合(sets)和(hé)有(&↓yǒu)序集合(sorted sets)等類型。
優勢
1:速度快(kuài),因為(wèi)數(shù)據存在₽≈£γ于內(nèi)存中,類似hashmap的(de)優勢就(j÷∑iù)是(shì)查找和(hé)操作(zuò)的(de)時(shí)間(ji∞φσ↔ān)複雜(zá)度都(dōu)是(shì)o(1)
2:支持豐富的(de)數(shù)據類型,string、list、hash、×™♣set、zset
3:支持事(shì)務,操作(zuò)都(dōu)是(shì) ™→★原子(zǐ)性的(de)。
4:豐富的(de)特性:可(kě)用(yòng♠ φ)于緩存、消息,按key設置過期時(shí)間(≠β↑÷jiān),過期自(zì)動删除
應用(yòng)場(chǎng)景
1、緩存
可(kě)以使用(yòng)String類型
例如(rú):熱(rè)點數(shù)據緩存(例↑ε如(rú)報(bào)表、熱(rè)銷商品),對(duì)象緩存、全頁緩存' 、可(kě)以提升熱(rè)點數(shù)據的(de)訪問(wφφεèn)數(shù)據。
2、數(shù)據共享分(fēn)布式
String 類型,因為(wèi) Redis 是(shì)分(fēn)布≤₩¥式的(de)獨立服務,可(kě)以在多(duō)個(gè)應用(yòng)之&→↔間(jiān)共享
例如(rú):分(fēn)布式Session需♦∞σ♣要(yào)引入此依賴
3、分(fēn)布式鎖
String 類型setnx方法,隻有(yΩ&$ǒu)不(bù)存在時(shí)才能(néα←₹ng)添加成功,返回true
将key 的(de)值設為(wèi)value∑&∏¶ ,當且僅當key不(bù)存在。
若給定的(de) key已經存在,則SETNX不(bù)做(zuò)任λ→何動作(zuò)。
4、全局ID
int類型,incrby,利用(yòng)原子(zǐ)性
如(rú)果是(shì)分(fēn)庫分(fēn)表的(de)場(chǎn >↑g)景,一(yī)次性拿(ná)一(yī)段。
5、計(jì)數(shù)器(qì)
int類型,incr方法
例如(rú):文(wén)章(zhāng)<₩的(de)閱讀(dú)量、微(wēi)博點贊數(< shù)、允許一(yī)定的(de)延遲,先寫入Redis再定時(s≤€hí)同步到(dào)數(shù)據庫
6、限流
基于redis的(de)數(shù)據結構zset
zset是(shì)set的(de)一(yī)個(gè ♦)升級版本,他(tā)在set的(de)基礎上✔α(shàng)增加了(le)一(yī)個(gè)順序屬性,這(zhè)一 Ω×∑(yī)屬性在添加修改元素的(de)時(shí)候可(kě)以指定,每♠±≠次指定後,zset會(huì)自(zì)動重新按新的(de)值調整順序。可ε₽×(kě)以對(duì)指定鍵的(de)值進行(xíng)排序權>&重的(de)設定,它應用(yòng)排名模塊比較多(duō)。
我們可(kě)以将請(qǐng)求打造成一(yī)個(gè)zse βt數(shù)組,當每一(yī)次請(qǐng)求進來(lái)的(de±↔ )時(shí)候,value保持唯一(yī $←≈),可(kě)以用(yòng)UUID生(sπ•hēng)成,而score可(kě)以用(yòng)當前時(shí)間(j∏★¶✔iān)戳表示,因為(wèi)score我們可(kě)以用(yòng)來λδ₩(lái)計(jì)算(suàn)當前時(s✔σhí)間(jiān)戳之內(nèi)有(yǒ♣§←u)多(duō)少(shǎo)的(de)請(qǐng)求數(shù)量。而zσαset數(shù)據結構也(yě)提供了(le)ra↑ ¶★nge方法讓我們可(kě)以很(hěn)輕易的(deΩ™)獲取到(dào)2個(gè)時(shí)間£©(jiān)戳內(nèi)有(yǒu)多(duō)少(shǎo)請(qǐ<↑ng)求。
7、位統計(jì)
String類型的(de)bitcount(1.6.6的(de)bitmap數₹≠≠(shù)據結構介紹)
字符是(shì)以8位二進制(zhì)存儲的 (de)
例如(rú):在線用(yòng)戶統計(jì),留存用(yòng)戶統計(jì∑÷ ∏),支持按位與、按位或等等操作(zuò),計(jì)算(s₩♥✔₩uàn)出7天都(dōu)在線的(de)用(yòng)戶。
8、購(gòu)物(wù)車(chē)
傳統的(de)購(gòu)物(wù)車(chē)實現(xiàn)有(yǒu)很✔(hěn)多(duō)種方式,如(rú)session,cooα✘✘₹kie,數(shù)據庫等,如(rú)果用(ε↔yòng)Redis相(xiàng)當于一(yī)個(gè)內(nèi)₽"存數(shù)據庫,可(kě)以用(yòng)來(lái)做(¶ λzuò)緩存,存儲數(shù)據等。
類型用(yòng)String 或hash。所有(yǒu)Str∞γ≥ing可(kě)以做(zuò)的(de)hash都(dōu)可(kě)以做§↓(zuò)。
9、用(yòng)戶消息時(shí)間(jiān)線
list,雙向鏈表,直接作(zuò)為(wèi)timeline就(jiù)好β←(hǎo)了(le)。插入有(yǒu)序。
10、消息隊列
List提供了(le)兩個(gè)阻塞的(•$♣σde)彈出操作(zuò):blpop/brpop,可(kě)以設置超時 ∞(shí)時(shí)間(jiān)。
blpop:blpop key1 timeout 移除并獲取列表的(de∞δ)第一(yī)個(gè)元素,如(rú)果列表沒有↔•(yǒu)元素會(huì)阻塞列表直到(dào)等待¥<&超時(shí)或發現(xiàn)可(kě)彈出元素為(wèi)止•Ω☆α。
brpop:brpop key1 timeou' →$t 移除并獲取列表的(de)最後一(yī)個(gè)元素,如(rúεα¥)果列表沒有(yǒu)元素會(huì)阻塞列表直到($≈dào)等待超時(shí)或發現(xiàn)可(α>>±kě)彈出元素為(wèi)止。
上(shàng)面的(de)操作(zuò)。其實就(jiù)是(shì)j♣✘$¥ava的(de)阻塞隊列。學習(xí)的(de)東(dōng)西(xī)•φ越多(duō)。學習(xí)成本越低(dī)。
隊列:先進先除:rpush blpop,左頭右尾,右邊進入隊列,≠≈↔左邊出隊列。
棧:先進後出:rpush brpop。
11、抽獎
移除并返回集合中的(de)一(yī)個(gè)随機(jī)元素&β。
返回集合中一(yī)個(gè)或多(duō)個(gè)随機(jī)ε×數(shù)。
将所有(yǒu)的(de)獎品通(tōng)過SADD添加到(dào)SE>™✘T集合中,然後通(tōng)過随機(jī)命令獲取對(β&duì)應的(de)獎品即可(kě)。而且,抽獎一(¶≤'≠yī)般是(shì)有(yǒu)時(shí)效性,正好(hǎo)可(kě)以配™γ <合redis的(de)key的(de)失效時φ≈(shí)間(jiān)使用(yòng)。使得(de)抽獎功能( ✔→ néng)很(hěn)完美(měi)的(d&₹e)解決。
12、點贊、簽到(dào)、打卡
假如(rú)上(shàng)面的(de)微(wēi)博ID® ♣是(shì)t1001,用(yòng)戶ID是(shì)u3001
用(yòng) like:t1001 來(lái)維護 t1001₩γ♠ 這(zhè)條微(wēi)博的(de)所♦<有(yǒu)點贊用(yòng)戶
點贊了(le)這(zhè)條微(wēi)博:→ ↑sadd like:t1001 u3001
取消點贊:srem like:t1001 ₹"α<u3001
是(shì)否點贊:sismember like:t1001 u3↓•001
點贊的(de)所有(yǒu)用(yòng)戶:smembers " like:t1001
點贊數(shù):scard like:✔εt1001
相(xiàng)對(duì)于數(shù)據庫簡單很(hěn)多(duō<☆)
13、商品标簽
使用(yòng)tags:來(lái)給對(duì)象打标簽,✔ 然後可(kě)以直接查找出來(lái)。
14、商品篩選
一(yī)個(gè)集合進行(xíng)查找↑™₹
多(duō)個(gè)集合進行(xíng)運算(♠₩suàn)是(shì)按照(zhào)順序,一(yī)路(lù)算(su₽ 'àn)下(xià)去(qù)的(de)結果
SDIFF計(jì)算(suàn)差集 ≥₩
SINTER 計(jì)算(suàn)并δπ集
SUNION 計(jì)算(suàn)交集"γ∞
15、用(yòng)戶關注、推薦模型
實際上(shàng)就(jiù)是(shì)redisΩ♣的(de)交集,并集差集的(de)使用(yòng)交錯(cuò)
舉例:
16、排行(xíng)榜
實現(xiàn)這(zhè)個(gè)功能(néng)主要(yào)≥"₽用(yòng)到(dào)的(de) redis 數(shù)據類型是(→αε"shì) redis 的(de)有(yǒu)序集合¥φ∑® zset。zset 是(shì) setσ×∑ 類型的(de)一(yī)個(gè)擴展,比原Ω≈有(yǒu)的(de)類型多(duō)了(le)一(yī)個(gè)順序屬性。¥™此屬性在每次插入數(shù)據時(shí)會(huì)自(zì)動調整順序值λγ,保證 value 值按照(zhào)一(yī)定順序→♣☆>連續排列。
查看(kàn)用(yòng)戶 e 的(de)實際排名 (ZREVRANK÷→♥≥ 為(wèi)降序,ZRANK 為(wèi)升序)、實時(sh✔✔✔×í)分(fēn)數(shù)。
微(wēi)信公衆号
業(yè)務咨詢:400-99φ♥βλ69-069(24小(xiǎo)時(shí)服務) 028-860φ♥52918
售後熱(rè)線:028-86052836
公司地(dì)址:成都(dōu)市(shìπ↕δ)武侯區(qū)天益街(jiē)38号理(lǐ♥•)想中心3棟1810