共計(jì) 7607 個(gè)字符,預(yù)計(jì)需要花費(fèi) 20 分鐘才能閱讀完成。
這篇文章主要介紹“Redis 常用數(shù)據(jù)結(jié)構(gòu)有哪些及怎么實(shí)現(xiàn)”,在日常操作中,相信很多人在 Redis 常用數(shù)據(jù)結(jié)構(gòu)有哪些及怎么實(shí)現(xiàn)問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”Redis 常用數(shù)據(jù)結(jié)構(gòu)有哪些及怎么實(shí)現(xiàn)”的疑惑有所幫助!接下來,請(qǐng)跟著丸趣 TV 小編一起來學(xué)習(xí)吧!
Redis 常用數(shù)據(jù)結(jié)構(gòu)
Redis 提供了一些數(shù)據(jù)結(jié)構(gòu)供我們往 Redis 中存取數(shù)據(jù),最常用的的有 5 種,字符串(String)、哈希(Hash)、列表(list)、集合(set)、有序集合(ZSET)。
字符串(String)
字符串類型是 Redis 最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)。首先鍵都是字符串類型,而且其他幾種數(shù)據(jù)結(jié)構(gòu)都是在字符串類型基礎(chǔ)上構(gòu)建的,所以字符串類型能為其他四種數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)奠定基礎(chǔ)。字符串類型的值實(shí)際可以是字符串(簡單的字符串、復(fù)雜的字符串(例如 JSON、XML))、數(shù)字(整數(shù)、浮點(diǎn)數(shù)),甚至是二進(jìn)制(圖片、音頻、視頻),但是值最大不能超過 512MB。
(雖然 Redis 是 C 寫的,C 里面有字符串 本質(zhì)使用 char 數(shù)組來實(shí)現(xiàn),但是處于種種考慮,Redis 還是自己實(shí)現(xiàn)了字符串類型)
操作命令 set 設(shè)置值
set key value
set 命令有幾個(gè)選項(xiàng):
ex seconds: 為鍵設(shè)置秒級(jí)過期時(shí)間。
px milliseconds: 為鍵設(shè)置毫秒級(jí)過期時(shí)間。
nx: 鍵必須不存在, 才可以設(shè)置成功,用于添加(分布式鎖常用)。
xx: 與 nx 相反, 鍵必須存在,才可以設(shè)置成功, 用于更新。
從執(zhí)行效果上看,ex 參數(shù)和 expire 命令基本一樣。還有一個(gè)需要特別注意的地方是如果一個(gè)字符串已經(jīng)設(shè)置了過期時(shí)間,然后你調(diào)用了 set 方法修改了它,它的過期時(shí)間會(huì)消失。
而 nx 和 xx 執(zhí)行效果如下
除了 set 選項(xiàng),Redis 還提供了 setex 和 setnx 兩個(gè)命令:
setex key
seconds value
setnx key value
setex 和 setnx 的作用和 ex 和 nx 選項(xiàng)是一樣的。也就是,setex 為鍵設(shè)置秒級(jí)過期時(shí)間,setnx 設(shè)置時(shí)鍵必須不存在, 才可以設(shè)置成功。
setex 示例:
setnx 示例:
因?yàn)殒I foo-ex 已存在, 所以 setnx 失敗, 返回結(jié)果為 0,鍵 foo-ex2 不存在,所以 setnx 成功, 返回結(jié)果為 1。
有什么應(yīng)用場(chǎng)景嗎? 以 setnx 命令為例子,由于 Redis 的單線程命令處理機(jī)制,如果有多個(gè)客戶端同時(shí)執(zhí)行 setnx key value,根據(jù) setnx 的特性只有一個(gè)客戶端能設(shè)置成功,setnx 可以作為分布式鎖的一種實(shí)現(xiàn)方案。當(dāng)然分布式鎖沒有不是只有一個(gè)命令就 OK 了,其中還有很多的東西要注意,我們后面會(huì)用單獨(dú)的章節(jié)來講述基于 Redis 的分布式鎖。
get 獲取值
如果要獲取的鍵不存在, 則返回 nil(空):
mset 批量設(shè)置值
通過 mset 命令一次性設(shè)置 4 個(gè)鍵值對(duì)
mget 批量獲取值
批量獲取了鍵 a、b、c、d 的值:
如果有些鍵不存在, 那么它的值為 nil(空),結(jié)果是按照傳入鍵的順序返回。
批量操作命令可以有效提高效率,假如沒有 mget 這樣的命令,要執(zhí)行 n 次 get 命令具體耗時(shí)如下:
n 次 get 時(shí)間 = n 次網(wǎng)絡(luò)時(shí)間 + n 次命令時(shí)間
使用 mget 命令后,要執(zhí)行 n 次 get 命令操作具體耗時(shí)如下:
n 次 get 時(shí)間 = 1 次網(wǎng)絡(luò)時(shí)間 + n 次命令時(shí)間
Redis 可以支撐每秒數(shù)萬的讀寫操作,但是這指的是 Redis 服務(wù)端的處理能力,對(duì)于客戶端來說,一次命令除了命令時(shí)間還是有網(wǎng)絡(luò)時(shí)間,假設(shè)網(wǎng)絡(luò)時(shí)間為 1 毫秒,命令時(shí)間為 0.1 毫秒(按照每秒處理 1 萬條命令算),那么執(zhí)行 1000 次 get 命令需要 1.1 秒(10001+10000.1=1100ms),1 次 mget 命令的需要 0.101 秒(11+10000.1=101ms)。
Incr 數(shù)字運(yùn)算
incr 命令用于對(duì)值做自增操作, 返回結(jié)果分為三種情況:
值不是整數(shù), 返回錯(cuò)誤。
值是整數(shù),返回自增后的結(jié)果。
鍵不存在,按照值為 0 自增, 返回結(jié)果為 1。
除了 incr 命令,Redis 提供了 decr(自減)、incrby(自增指定數(shù)字)、decrby(自減指定數(shù)字)、incrbyfloat(自增浮點(diǎn)數(shù)),具體效果請(qǐng)同學(xué)們自行嘗試。
append 追加指令
append 可以向字符串尾部追加值
strlen 字符串長度
返回字符串長度
注意:每個(gè)中文占 3 個(gè)字節(jié)
getset 設(shè)置并返回原值
getset 和 set 一樣會(huì)設(shè)置值, 但是不同的是,它同時(shí)會(huì)返回鍵原來的值
setrange 設(shè)置指定位置的字符
下標(biāo)從 0 開始計(jì)算。
getrange 截取字符串
getrange 截取字符串中的一部分,形成一個(gè)子串,需要指明開始和結(jié)束的偏移量,截取的范圍是個(gè)閉區(qū)間。
命令的時(shí)間復(fù)雜度
字符串這些命令中,除了 del、mset、mget 支持多個(gè)鍵的批量操作,時(shí)間復(fù)雜度和鍵的個(gè)數(shù)相關(guān),為 O(n),getrange 和字符串長度相關(guān),也是 O(n),其余的命令基本上都是 O(1)的時(shí)間復(fù)雜度,在速度上還是非常快的。
使用場(chǎng)景
字符串類型的使用場(chǎng)景很廣泛:
緩存功能
Redis 作為緩存層,MySQL 作為存儲(chǔ)層,絕大部分請(qǐng)求的數(shù)據(jù)都是從 Redis 中獲取。由于 Redis 具有支撐高并發(fā)的特性, 所以緩存通常能起到加速讀寫和降低后端壓力的作用。
計(jì)數(shù)
使用 Redis 作為計(jì)數(shù)的基礎(chǔ)工具,它可以實(shí)現(xiàn)快速計(jì)數(shù)、查詢緩存的功能, 同時(shí)數(shù)據(jù)可以異步落地到其他數(shù)據(jù)源。
共享 Session
一個(gè)分布式 Web 服務(wù)將用戶的 Session 信息(例如用戶登錄信息)保存在各自服務(wù)器中,這樣會(huì)造成一個(gè)問題,出于負(fù)載均衡的考慮,分布式服務(wù)會(huì)將用戶的訪問均衡到不同服務(wù)器上,用戶刷新一次訪問可能會(huì)發(fā)現(xiàn)需要重新登錄,這個(gè)問題是用戶無法容忍的。
為了解決這個(gè)問題, 可以使用 Redis 將用戶的 Session 進(jìn)行集中管理,,在這種模式下只要保證 Redis 是高可用和擴(kuò)展性的, 每次用戶更新或者查詢登錄信息都直接從 Redis 中集中獲取。
限速
比如,很多應(yīng)用出于安全的考慮, 會(huì)在每次進(jìn)行登錄時(shí), 讓用戶輸入手機(jī)驗(yàn)證碼, 從而確定是否是用戶本人。但是為了短信接口不被頻繁訪問, 會(huì)限制用戶每分鐘獲取驗(yàn)證碼的頻率,例如一分鐘不能超過 5 次。一些網(wǎng)站限制一個(gè) IP 地址不能在一秒鐘之內(nèi)方問超過 n 次也可以采用類似的思路。
哈希(Hash)
Java 里提供了 HashMap,Redis 中也有類似的數(shù)據(jù)結(jié)構(gòu),就是哈希類型。但是要注意,哈希類型中的映射關(guān)系叫作 field-value,注意這里的 value 是指 field 對(duì)應(yīng)的值,不是鍵對(duì)應(yīng)的值。
操作命令
基本上,哈希的操作命令和字符串的操作命令很類似,很多命令在字符串類型的命令前面加上了 h 字母,代表是操作哈希類型,同時(shí)還要指明要操作的 field 的值。
hset 設(shè)值
hset user:1 name lijin
如果設(shè)置成功會(huì)返回 1,反之會(huì)返回 0。此外 Redis 提供了 hsetnx 命令,它們的關(guān)系就像 set 和 setnx 命令一樣, 只不過作用域由鍵變?yōu)?field。
hget 取值
hget user:1 name
如果鍵或 field 不存在,會(huì)返回 nil。
hdel 刪除 field
hdel 會(huì)刪除一個(gè)或多個(gè) field,返回結(jié)果為成功刪除 field 的個(gè)數(shù)。
hlen 計(jì)算 field 個(gè)數(shù)
hmset 批量設(shè)值
hmget 批量取值
hexists 判斷 field 是否存在
若存在返回 1,不存在返回 0
hkeys 獲取所有 field
它返回指定哈希鍵所有的 field
hvals 獲取所有 value
hgetall 獲取所有 field 與 value
在使用 hgetall 時(shí),如果哈希元素個(gè)數(shù)比較多,會(huì)存在阻塞 Redis 的可能。如果只需要獲取部分 field,可以使用 hmget,如果一定要獲取全部 field-value,可以使用 hscan 命令,該命令會(huì)漸進(jìn)式遍歷哈希類型,hscan 將在后面的章節(jié)介紹。
hincrby 增加
hincrby 和 hincrbyfloat,就像 incrby 和 incrbyfloat 命令一樣,但是它們的作用域是 filed。
hstrlen 計(jì)算 value 的字符串長度
命令的時(shí)間復(fù)雜度
哈希類型的操作命令中,hdel,hmget,hmset 的時(shí)間復(fù)雜度和命令所帶的 field 的個(gè)數(shù)相關(guān) O(k),hkeys,hgetall,hvals 和存儲(chǔ)的 field 的總數(shù)相關(guān),O(N)。其余的命令時(shí)間復(fù)雜度都是 O(1)。
使用場(chǎng)景
從前面的操作可以看出,String 和 Hash 的操作非常類似,那為什么要弄一個(gè) hash 出來存儲(chǔ)。
哈希類型比較適宜存放對(duì)象類型的數(shù)據(jù),我們可以比較下,如果數(shù)據(jù)庫中表記錄 user 為:
idnameage1lijin182msb20
1、使用 String 類型
需要一條條去插入獲取。
set user:1:name lijin;
set user:1:age 18;
set user:2:name msb;
set user:2:age 20;
優(yōu)點(diǎn):簡單直觀,每個(gè)鍵對(duì)應(yīng)一個(gè)值
缺點(diǎn):鍵數(shù)過多,占用內(nèi)存多,用戶信息過于分散,不用于生產(chǎn)環(huán)境
2、將對(duì)象序列化存入 redis
set user:1 serialize(userInfo);
優(yōu)點(diǎn):編程簡單,若使用序列化合理內(nèi)存使用率高
缺點(diǎn):序列化與反序列化有一定開銷,更新屬性時(shí)需要把 userInfo 全取出來進(jìn)行反序列化,更新后再序列化到 redis
3、使用 hash 類型
hmset user:1 name lijin age 18
hmset user:2 name msb age 20
優(yōu)點(diǎn):簡單直觀,使用合理可減少內(nèi)存空間消耗
缺點(diǎn):要控制內(nèi)部編碼格式,不恰當(dāng)?shù)母袷綍?huì)消耗更多內(nèi)存
列表(list)
列表 (list) 類型是用來存儲(chǔ)多個(gè)有序的字符串,a、b、c、c、b 四個(gè)元素從左到右組成了一個(gè)有序的列表, 列表中的每個(gè)字符串稱為元素 (element),一個(gè)列表最多可以存儲(chǔ)(2^32-1) 個(gè)元素(4294967295)。
在 Redis 中,可以對(duì)列表兩端插入 (push) 和彈出(pop),還可以獲取指定范圍的元素列表、獲取指定索引下標(biāo)的元素等。列表是一種比較靈活的數(shù)據(jù)結(jié)構(gòu),它可以充當(dāng)棧和隊(duì)列的角色,在實(shí)際開發(fā)上有很多應(yīng)用場(chǎng)景。
列表類型有兩個(gè)特點(diǎn):
第一、列表中的元素是有序的,這就意味著可以通過索引下標(biāo)獲取某個(gè)元素或者某個(gè)范圍內(nèi)的元素列表。
第二、列表中的元素可以是重復(fù)的。
操作命令 lrange 獲取指定范圍內(nèi)的元素列表(不會(huì)刪除元素)
key start end
索引下標(biāo)特點(diǎn):從左到右為 0 到 N -1
lrange 0 - 1 命令可以從左到右獲取列表的所有元素
rpush 向右插入
lpush 向左插入
linsert 在某個(gè)元素前或后插入新元素
這三個(gè)返回結(jié)果為命令完成后當(dāng)前列表的長度,也就是列表中包含的元素個(gè)數(shù),同時(shí) rpush 和 lpush 都支持同時(shí)插入多個(gè)元素。
lpop 從列表左側(cè)彈出(會(huì)刪除元素)
r
請(qǐng)注意,彈出來元素就沒了。
rpop 從列表右側(cè)彈出
rpop 將會(huì)把列表最右側(cè)的元素 d 彈出。
lrem 對(duì)指定元素進(jìn)行刪除
lrem 命令會(huì)從列表中找到等于 value 的元素進(jìn)行刪除,根據(jù) count 的不同分為三種情況:
count 0,從左到右, 刪除最多 count 個(gè)元素。
count 0,從右到左, 刪除最多 count 絕對(duì)值個(gè)元素。
count=0,刪除所有。
返回值是實(shí)際刪除元素的個(gè)數(shù)。
ltirm 按照索引范圍修剪列表
例如想保留列表中第 0 個(gè)到第 1 個(gè)元素
ls
lset 修改指定索引下標(biāo)的元素
lindex 獲取列表指定索引下標(biāo)的元素
l
llen 獲取列表長度
blpop 和 brpop 阻塞式彈出元素
blpop 和 brpop 是 lpop 和 rpop 的阻塞版本,除此之外還支持多個(gè)列表類型,也支持設(shè)定阻塞時(shí)間,單位秒,如果阻塞時(shí)間為 0,表示一直阻塞下去。我們以 brpop 為例說明。
A 客戶端阻塞了(因?yàn)闆]有元素就會(huì)阻塞)
A 客戶端一直處于阻塞狀態(tài)。此時(shí)我們從另一個(gè)客戶端 B 執(zhí)行
A 客戶端則輸出
注意:brpop 后面如果是多個(gè)鍵,那么 brpop 會(huì)從左至右遍歷鍵,一旦有一個(gè)鍵能彈出元素,客戶端立即返回。
使用場(chǎng)景
列表類型可以用于比如:
消息隊(duì)列,Redis 的 lpush+brpop 命令組合即可實(shí)現(xiàn)阻塞隊(duì)列,生產(chǎn)者客戶端使用 lrpush 從列表左側(cè)插入元素,多個(gè)消費(fèi)者客戶端使用 brpop 命令阻塞式的“搶”列表尾部的元素, 多個(gè)客戶端保證了消費(fèi)的負(fù)載均衡和高可用性。
文章列表
每個(gè)用戶有屬于自己的文章列表,現(xiàn)需要分頁展示文章列表。此時(shí)可以考慮使用列表, 因?yàn)榱斜聿坏怯行虻? 同時(shí)支持按照索引范圍獲取元素。
實(shí)現(xiàn)其他數(shù)據(jù)結(jié)構(gòu)
lpush+lpop =Stack(棧)
lpush +rpop =Queue(隊(duì)列)
lpsh+ ltrim =Capped Collection(有限集合)
lpush+brpop=Message Queue(消息隊(duì)列)
集合(set)
集合(set)類型也是用來保存多個(gè)的字符串元素, 但和列表類型不一樣的是,集合中不允許有重復(fù)元素, 并且集合中的元素是無序的, 不能通過索引下標(biāo)獲取元素。
一個(gè)集合最多可以存儲(chǔ) 2 的 32 次方 - 1 個(gè)元素。Redis 除了支持集合內(nèi)的增刪改查,同時(shí)還支持多個(gè)集合取交集、并集、差集,合理地使用好集合類型, 能在實(shí)際開發(fā)中解決很多實(shí)際問題。
集合內(nèi)操作命令 sadd 添加元素
允許添加多個(gè),返回結(jié)果為添加成功的元素個(gè)數(shù)
srem 刪除元素
允許刪除多個(gè),返回結(jié)果為成功刪除元素個(gè)數(shù)
scard 計(jì)算元素個(gè)數(shù)
sismember 判斷元素是否在集合中
如果給定元素 element 在集合內(nèi)返回 1,反之返回 0
srandmember 隨機(jī)從集合返回指定個(gè)數(shù)元素
指定個(gè)數(shù)如果不寫默認(rèn)為 1
spop 從集合隨機(jī)彈出元素
同樣可以指定個(gè)數(shù),如果不寫默認(rèn)為 1,注意,既然是彈出,spop 命令執(zhí)行后, 元素會(huì)從集合中刪除, 而 srandmember 不會(huì)。
smembers 獲取所有元素(不會(huì)彈出元素)
返回結(jié)果是無序的
集合間操作命令
現(xiàn)在有兩個(gè)集合, 它們分別是 set1 和 set2
sinter 求多個(gè)集合的交集
suinon 求多個(gè)集合的并集
sdiff 求多個(gè)集合的差集
將交集、并集、差集的結(jié)果保存
sinterstore destination key [key ...]
suionstore destination key [key ...]
sdiffstore destination key [key ...]復(fù)制代碼
集合間的運(yùn)算在元素較多的情況下會(huì)比較耗時(shí),所以 Redis 提供了上面三個(gè)命令 (原命令 +store) 將集合間交集、并集、差集的結(jié)果保存在 destination key 中,例如:
使用場(chǎng)景
集合類型比較典型的使用場(chǎng)景是標(biāo)簽(tag)。例如一個(gè)用戶可能對(duì)娛樂、體育比較感興趣,另一個(gè)用戶可能對(duì)歷史、新聞比較感興趣,這些興趣點(diǎn)就是標(biāo)簽。有了這些數(shù)據(jù)就可以得到喜歡同一個(gè)標(biāo)簽的人,以及用戶的共同喜好的標(biāo)簽,這些數(shù)據(jù)對(duì)于用戶體驗(yàn)以及增強(qiáng)用戶黏度比較重要。
例如一個(gè)電子商務(wù)的網(wǎng)站會(huì)對(duì)不同標(biāo)簽的用戶做不同類型的推薦,比如對(duì)數(shù)碼產(chǎn)品比較感興趣的人,在各個(gè)頁面或者通過郵件的形式給他們推薦最新的數(shù)碼產(chǎn)品,通常會(huì)為網(wǎng)站帶來更多的利益。
除此之外,集合還可以通過生成隨機(jī)數(shù)進(jìn)行比如抽獎(jiǎng)活動(dòng),以及社交圖譜等等。
有序集合(ZSET)
有序集合相對(duì)于哈希、列表、集合來說會(huì)有一點(diǎn)點(diǎn)陌生, 但既然叫有序集合, 那么它和集合必然有著聯(lián)系, 它保留了集合不能有重復(fù)成員的特性, 但不同的是, 有序集合中的元素可以排序。但是它和列表使用索引下標(biāo)作為排序依據(jù)不同的是, 它給每個(gè)元素設(shè)置一個(gè)分?jǐn)?shù) (score) 作為排序的依據(jù)。
有序集合中的元素不能重復(fù),但是 score 可以重復(fù),就和一個(gè)班里的同學(xué)學(xué)號(hào)不能重復(fù), 但是考試成績可以相同。
有序集合提供了獲取指定分?jǐn)?shù)和元素范圍查詢、計(jì)算成員排名等功能,合理的利用有序集合,能幫助我們?cè)趯?shí)際開發(fā)中解決很多問題。
集合內(nèi)操作命令 zadd 添加成員
返回結(jié)果代表成功添加成員的個(gè)數(shù)
要注意:
zadd 命令還有四個(gè)選項(xiàng) nx、xx、ch、incr 四個(gè)選項(xiàng)
nx: member 必須不存在,才可以設(shè)置成功,用于添加。
xx: member 必須存在,才可以設(shè)置成功, 用于更新。
ch: 返回此次操作后, 有序集合元素和分?jǐn)?shù)發(fā)生變化的個(gè)數(shù)
incr: 對(duì) score 做增加,相當(dāng)于后面介紹的 zincrby
zcard 計(jì)算成員個(gè)數(shù)
zscore 計(jì)算某個(gè)成員的分?jǐn)?shù)
如果成員不存在則返回 nil
zrank 計(jì)算成員的排名
zrank 是從分?jǐn)?shù)從低到高返回排名
zrevrank 反之
很明顯,排名從 0 開始計(jì)算。
zrem 刪除成員
允許一次刪除多個(gè)成員。
返回結(jié)果為成功刪除的個(gè)數(shù)。
zincrby 增加成員的分?jǐn)?shù)
zrange 和 zrevrange 返回指定排名范圍的成員
有序集合是按照分值排名的,zrange 是從低到高返回,zrevrange 反之。如果加上withscores 選項(xiàng),同時(shí)會(huì)返回成員的分?jǐn)?shù)
zrangebyscore 返回指定分?jǐn)?shù)范圍的成員
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores][limit offset count]復(fù)制代碼
其中 zrangebyscore 按照分?jǐn)?shù)從低到高返回,zrevrangebyscore 反之。例如下面操作從低到高返回 200 到 221 分的成員,withscores 選項(xiàng)會(huì)同時(shí)返回每個(gè)成員的分?jǐn)?shù)。
同時(shí) min 和 max 還支持開區(qū)間(小括號(hào))和閉區(qū)間(中括號(hào)),-inf 和 +inf 分別代表無限小和無限大:
zcount 返回指定分?jǐn)?shù)范圍成員個(gè)數(shù)
zcount key min max
zremrangebyrank 按升序刪除指定排名內(nèi)的元素
zremrangebyrank key start end
zremrangebyscore 刪除指定分?jǐn)?shù)范圍的成員
zremrangebyscore key min max
集合間操作命令 zinterstore 交集
zinterstore
這個(gè)命令參數(shù)較多,下面分別進(jìn)行說明
destination: 交集計(jì)算結(jié)果保存到這個(gè)鍵。
numkeys: 需要做交集計(jì)算鍵的個(gè)數(shù)。
key [key …]: 需要做交集計(jì)算的鍵。
weights weight[weight …]: 每個(gè)鍵的權(quán)重,在做交集計(jì)算時(shí),每個(gè)鍵中的每個(gè) member 會(huì)將自己分?jǐn)?shù)乘以這個(gè)權(quán)重, 每個(gè)鍵的權(quán)重默認(rèn)是 1。
aggregate sum/
min |max: 計(jì)算成員交集后,分值可以按照 sum(和)、min(最小值)、max(最大值)做匯總, 默認(rèn)值是 sum。
不太好理解,我們用一個(gè)例子來說明。(算平均分)
zunionstore 并集
該命令的所有參數(shù)和 zinterstore 是一致的,只不過是做并集計(jì)算,大家可以自行實(shí)驗(yàn)。
到此,關(guān)于“Redis 常用數(shù)據(jù)結(jié)構(gòu)有哪些及怎么實(shí)現(xiàn)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!