国产成人免费视频在线网站,无码熟妇人妻av在线影片免费 ,6080yyy午夜理论片在线观看,丰满的大乳老师三级在线观看

for 知乎鏈接圖標(biāo)抓取
Redis的應(yīng)用場景
2022-12-29 2764 作者:
字號:【小】【中】【大】
分享到:

先介紹一下Redis

簡介:REmote DIctionary Server(Redis) 是一個(gè)由Salvatore Sanfilippo寫的 key-value存儲(chǔ)系統(tǒng),是跨平臺(tái)的非關(guān)系型數(shù)據(jù)庫。

Redis是一個(gè)開源的使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存、分布式、可選持久性的鍵值對(Key-Value)存儲(chǔ)數(shù)據(jù)庫,并提供多種語言的API。

Redis通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹担╲alue)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等類型。

優(yōu)勢

1:速度快,因?yàn)閿?shù)據(jù)存在于內(nèi)存中,類似hashmap的優(yōu)勢就是查找和操作的時(shí)間復(fù)雜度都是o(1)

2:支持豐富的數(shù)據(jù)類型,string、list、hash、set、zset

3:支持事務(wù),操作都是原子性的。

4:豐富的特性:可用于緩存、消息,按key設(shè)置過期時(shí)間,過期自動(dòng)刪除

應(yīng)用場景

1、緩存

可以使用String類型

例如:熱點(diǎn)數(shù)據(jù)緩存(例如報(bào)表、熱銷商品),對象緩存、全頁緩存、可以提升熱點(diǎn)數(shù)據(jù)的訪問數(shù)據(jù)。

image1.png

2、數(shù)據(jù)共享分布式

String 類型,因?yàn)?Redis 是分布式的獨(dú)立服務(wù),可以在多個(gè)應(yīng)用之間共享

例如:分布式Session需要引入此依賴

image2.png

3、分布式鎖

String 類型setnx方法,只有不存在時(shí)才能添加成功,返回true

image3.png

將key 的值設(shè)為value ,當(dāng)且僅當(dāng)key不存在。

若給定的 key已經(jīng)存在,則SETNX不做任何動(dòng)作。

4、全局ID

int類型,incrby,利用原子性

image4.png

如果是分庫分表的場景,一次性拿一段。

5、計(jì)數(shù)器

int類型,incr方法

例如:文章的閱讀量、微博點(diǎn)贊數(shù)、允許一定的延遲,先寫入Redis再定時(shí)同步到數(shù)據(jù)庫

image5.png

6、限流

基于redis的數(shù)據(jù)結(jié)構(gòu)zset

zset是set的一個(gè)升級版本,他在set的基礎(chǔ)上增加了一個(gè)順序?qū)傩?,這一屬性在添加修改元素的時(shí)候可以指定,每次指定后,zset會(huì)自動(dòng)重新按新的值調(diào)整順序??梢詫χ付ㄦI的值進(jìn)行排序權(quán)重的設(shè)定,它應(yīng)用排名模塊比較多。

我們可以將請求打造成一個(gè)zset數(shù)組,當(dāng)每一次請求進(jìn)來的時(shí)候,value保持唯一,可以用UUID生成,而score可以用當(dāng)前時(shí)間戳表示,因?yàn)閟core我們可以用來計(jì)算當(dāng)前時(shí)間戳之內(nèi)有多少的請求數(shù)量。而zset數(shù)據(jù)結(jié)構(gòu)也提供了range方法讓我們可以很輕易的獲取到2個(gè)時(shí)間戳內(nèi)有多少請求。

image6.png

7、位統(tǒng)計(jì)

String類型的bitcount(1.6.6的bitmap數(shù)據(jù)結(jié)構(gòu)介紹)

image7.png

字符是以8位二進(jìn)制存儲(chǔ)的

例如:在線用戶統(tǒng)計(jì),留存用戶統(tǒng)計(jì),支持按位與、按位或等等操作,計(jì)算出7天都在線的用戶。

8、購物車

傳統(tǒng)的購物車實(shí)現(xiàn)有很多種方式,如session,cookie,數(shù)據(jù)庫等,如果用Redis相當(dāng)于一個(gè)內(nèi)存數(shù)據(jù)庫,可以用來做緩存,存儲(chǔ)數(shù)據(jù)等。

類型用String 或hash。所有String可以做的hash都可以做。

image8.png

9、用戶消息時(shí)間線

list,雙向鏈表,直接作為timeline就好了。插入有序。

10、消息隊(duì)列

List提供了兩個(gè)阻塞的彈出操作:blpop/brpop,可以設(shè)置超時(shí)時(shí)間。

blpop:blpop key1 timeout 移除并獲取列表的第一個(gè)元素,如果列表沒有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。

brpop:brpop key1 timeout 移除并獲取列表的最后一個(gè)元素,如果列表沒有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。

上面的操作。其實(shí)就是java的阻塞隊(duì)列。學(xué)習(xí)的東西越多。學(xué)習(xí)成本越低。

隊(duì)列:先進(jìn)先除:rpush blpop,左頭右尾,右邊進(jìn)入隊(duì)列,左邊出隊(duì)列。

棧:先進(jìn)后出:rpush brpop。

11、抽獎(jiǎng)

移除并返回集合中的一個(gè)隨機(jī)元素。

image9.png

返回集合中一個(gè)或多個(gè)隨機(jī)數(shù)。

image10.png

將所有的獎(jiǎng)品通過SADD添加到SET集合中,然后通過隨機(jī)命令獲取對應(yīng)的獎(jiǎng)品即可。而且,抽獎(jiǎng)一般是有時(shí)效性,正好可以配合redis的key的失效時(shí)間使用。使得抽獎(jiǎng)功能很完美的解決。

12、點(diǎn)贊、簽到、打卡

假如上面的微博ID是t1001,用戶ID是u3001

用 like:t1001 來維護(hù) t1001 這條微博的所有點(diǎn)贊用戶

點(diǎn)贊了這條微博:sadd like:t1001 u3001

取消點(diǎn)贊:srem like:t1001 u3001

是否點(diǎn)贊:sismember like:t1001 u3001

點(diǎn)贊的所有用戶:smembers like:t1001

點(diǎn)贊數(shù):scard like:t1001

相對于數(shù)據(jù)庫簡單很多

13、商品標(biāo)簽

使用tags:來給對象打標(biāo)簽,然后可以直接查找出來。

image11.png

14、商品篩選

一個(gè)集合進(jìn)行查找

image12.png

多個(gè)集合進(jìn)行運(yùn)算是按照順序,一路算下去的結(jié)果

SDIFF計(jì)算差集   

SINTER 計(jì)算并集

SUNION 計(jì)算交集

15、用戶關(guān)注、推薦模型

實(shí)際上就是redis的交集,并集差集的使用交錯(cuò)

舉例:

image13.png

16、排行榜

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

image14.png

查看用戶 e 的實(shí)際排名 (ZREVRANK 為降序,ZRANK 為升序)、實(shí)時(shí)分?jǐn)?shù)。


我要試用
驗(yàn)證碼
獎(jiǎng)勵(lì)領(lǐng)取
驗(yàn)證碼
for 知乎鏈接圖標(biāo)抓取
×
快速定制通道
獲取驗(yàn)證碼
快速咨詢