日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

redis命令行操作庫(kù)、鍵、和五大數(shù)據(jù)類型詳解

作者:流水武qin 更新時(shí)間: 2022-11-29 編程語(yǔ)言

一、數(shù)據(jù)庫(kù)操作命令

redis默認(rèn)有16個(gè)數(shù)據(jù)庫(kù),類似數(shù)組下標(biāo)從0開始,初始默認(rèn)使用0號(hào)庫(kù)。

1.1 測(cè)試是否連通

ping

測(cè)試服務(wù)器是否連通 返回pone就是連通了

1.2 切換數(shù)據(jù)庫(kù)

select index

1.3 數(shù)據(jù)移動(dòng)

move key db

1.4 顯示數(shù)據(jù)總量

dbsize

1.5 數(shù)據(jù)清除

flushdb		# 只清除當(dāng)前庫(kù) 
flushall	# 16個(gè)庫(kù)一起清

二、鍵操作命令

2.1 查看當(dāng)前庫(kù)所有key

keys *

2.2 刪除指定key

立即刪除:

del key

異步刪除:

unlink key

2.3 獲取key是否存在

exists key

2.4 獲取key的類型

type key

2.5 更改key的名字

# 當(dāng) key和newkey相同,或者 key不存在時(shí),返回一個(gè)錯(cuò)誤
# 當(dāng) newkey 已經(jīng)存在時(shí), RENAME 命令將覆蓋舊值
rename key newkey	
# 當(dāng)且僅當(dāng)newkey不存在時(shí),將key改名為newkey,否則不會(huì)改名
renamenx key newkey

2.6 指定key的有效期

# 為當(dāng)前key設(shè)置過期10秒的時(shí)間
expire key 10

# 為當(dāng)前key設(shè)置過期10毫秒的時(shí)間
pexpire key 10

# 以Unix時(shí)間戳格式設(shè)置鍵的到期時(shí)間(不常用)
expireat key 1393840000

2.7 獲取key的有效期

# 以秒為單位返回 key 的剩余過期時(shí)間
ttl key
# 以毫秒為單位返回 key 的剩余過期時(shí)間
pttl key

2.8 把key從會(huì)過期的換為不會(huì)過期

persist key

2.9 查詢模式的使用

語(yǔ)法結(jié)構(gòu):

keys pattern

使用示例:

keys *          查詢所有key
keys java*      查詢所有以java開頭的key
keys *java     	查詢所有以java結(jié)尾的key
keys ??heima    查詢所有前面兩個(gè)字符任意,后面以java結(jié)尾的key
keys user:?     查詢所有user:開頭,最后一個(gè)字符任意的key
keys u[st]er:1  查詢所有以u(píng)開頭,以er:1結(jié)尾,中間包含一個(gè)字母,s或t的key

三、五大數(shù)據(jù)類型-string

stringredis最基本的類型,一個(gè)key對(duì)應(yīng)一個(gè)value,是一種單鍵單值的結(jié)構(gòu)。

string類型是二進(jìn)制安全的。意味著redisstring可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對(duì)象。
在這里插入圖片描述

3.1 添加/修改數(shù)據(jù)

set key value

3.2 獲取數(shù)據(jù)

get key

3.3 刪除數(shù)據(jù)

del key

3.4 在key不存在時(shí) 設(shè)置key的值

setnx key value

3.5 添加/修改多個(gè)數(shù)據(jù)

mset key1 value1 key2 value2 …

3.6 獲取多個(gè)數(shù)據(jù)

mget key1 key2 …

3.7 獲取key對(duì)應(yīng)value的長(zhǎng)度

strlen key

3.8 追加信息到原始信息后面

append key value

3.9 將key中儲(chǔ)存的數(shù)字值增加指定的值

# 將key中所儲(chǔ)存的值加1(默認(rèn)就是加1,因此不寫就是加1)
incr key

# 將key中所儲(chǔ)存的值加10
incrby key 10

# 將key中所儲(chǔ)存的值加上指定的浮點(diǎn)數(shù)增量值
incrbyfloat key 9.9

3.10 將key中儲(chǔ)存的數(shù)字值減少指定的值

# 將key中儲(chǔ)存的數(shù)字值減1
decr key

# 將key中所儲(chǔ)存的值減少指定值
decrby key 10

3.11 設(shè)置有效時(shí)間

# 設(shè)置鍵值的同時(shí),設(shè)置過期時(shí)間(時(shí)間單位為秒)
setex key seconds value

# 設(shè)置鍵值的同時(shí),設(shè)置過期時(shí)間(時(shí)間單位為毫秒)
psetex key milliseconds value

3.12 設(shè)置指定key的值,并返回key的舊值

GETSET db mongodb    # 首次設(shè)置沒有舊值,返回 nil
GETSET db redis      # 返回舊值 mongodb

3.13 獲取指定key對(duì)應(yīng)的值的一部分?jǐn)?shù)據(jù)

# getrange key 起始位置 結(jié)束位置
getrange key 0 3

3.14 覆蓋給定key所儲(chǔ)存的字符串的一部分值

# setrange key 起始位置 value
SETRANGE key 6 "Redis"

覆蓋的位置從偏移量6開始。

3.13 string命名規(guī)約

比如新浪微博大V主頁(yè)顯示粉絲數(shù)與微博數(shù)量,這種訪問量很高的數(shù)據(jù),我們應(yīng)按如下規(guī)則命名會(huì)比較好:

  • redis中為大V用戶設(shè)定用戶信息,以用戶主鍵和屬性值作為key,后臺(tái)設(shè)定定時(shí)刷新策略即可。
eg:	user:id:3506728370:fans		→	12210947
eg:	user:id:3506728370:blogs	→	6164
eg:	user:id:3506728370:focuses	→	83
  • 也可以使用json格式保存數(shù)據(jù)
eg:	user:id:3506728370    →	{“fans”:12210947,“blogs”:6164,“ focuses ”:83 }
  • key 的設(shè)置約定
表名 主鍵名 主鍵值 字段名
eg: user id 29437595 fans

這樣設(shè)置,不僅規(guī)則清晰,之后找數(shù)據(jù)和排錯(cuò)也更加方便,便于維護(hù)。

3.14 string類型的其它注意事項(xiàng)

  • 數(shù)據(jù)未獲取到時(shí),返回對(duì)應(yīng)的數(shù)據(jù)為nil,等同于null

  • 數(shù)據(jù)最大存儲(chǔ)量:512MB

  • Stringredis內(nèi)部存儲(chǔ)默認(rèn)就是一個(gè)字符串,當(dāng)遇到增減類操作incrdecr時(shí)會(huì)轉(zhuǎn)成數(shù)值型進(jìn)行計(jì)算

  • 按數(shù)值進(jìn)行操作的數(shù)據(jù),如果原始數(shù)據(jù)不能轉(zhuǎn)成數(shù)值,或超越了redis 數(shù)值上限范圍,將報(bào)錯(cuò)

  • redis所有的操作都是原子性的,采用單線程處理所有業(yè)務(wù),命令是一個(gè)一個(gè)執(zhí)行的,因此無(wú)需考慮并發(fā)帶來

    的數(shù)據(jù)影響.

3.15 string數(shù)據(jù)結(jié)構(gòu)詳解

string的數(shù)據(jù)結(jié)構(gòu)為簡(jiǎn)單動(dòng)態(tài)字符串(Simple Dynamic String,縮寫SDS)。

是可以修改的字符串,內(nèi)部實(shí)現(xiàn)類似于JavaArrayList,采用預(yù)分配冗余空間的方式來減少內(nèi)存的頻繁分配。

它內(nèi)部為當(dāng)前字符串實(shí)際分配的空間capacity一般要高于實(shí)際字符串長(zhǎng)度len

當(dāng)字符串長(zhǎng)度小于1M時(shí),擴(kuò)容都是加倍現(xiàn)有的空間。

如果超過1M,擴(kuò)容時(shí)一次只會(huì)多擴(kuò)1M的空間。需要注意的是字符串最大長(zhǎng)度為512M

四、五大數(shù)據(jù)類型-list

list數(shù)據(jù)類型,一個(gè)key對(duì)應(yīng)多個(gè)value,是一種單鍵多值的數(shù)據(jù)結(jié)構(gòu)。

Redis列表是簡(jiǎn)單的字符串列表,按照插入順序排序。可以添加一個(gè)元素到列表的頭部(左邊)或者尾部(右邊)。

它的底層實(shí)際是個(gè)雙向鏈表,對(duì)兩端的操作性能很高,通過索引下標(biāo)的操作中間的節(jié)點(diǎn)性能會(huì)較差。

宏觀來看就是key存儲(chǔ)這一個(gè)list的這樣結(jié)構(gòu)的數(shù)據(jù):

在這里插入圖片描述

4.1 添加/修改數(shù)據(jù)

# 從左邊插入數(shù)據(jù)
# 語(yǔ)法:lpush key value1 [value2] ……
lpush key 10 20 30

# 從左邊插入數(shù)據(jù)
# 語(yǔ)法:rpush key value1 [value2] ……
rpush key 10 20 30

4.2 獲取并移除一個(gè)數(shù)據(jù)(彈出數(shù)據(jù))

lpop key    # 從左側(cè)彈出
rpop key    # 從右側(cè)彈出

每次操作只會(huì)彈出一個(gè)數(shù)據(jù),最終值在鍵在,值光鍵亡。

4.3 從key1列表右邊吐出一個(gè)值,插到key2列表左邊

rpoplpush key1 key2

4.4 按照索引下標(biāo)獲得元素(從左到右獲取)

lrange key start stop

# 示例
# 0左邊第一個(gè),-1右邊第一個(gè),這就表示獲取所有的意思
lrange mylist 0 -1

range操作不會(huì)移除元素,和pop操作是不同的

4.5 按照索引下標(biāo)獲得元素(從左到右)

lindex key index 

4.6 獲得列表長(zhǎng)度

llen key

4.7 在value的后面插入newvalue

linsert key before value newvalue

4.8 刪除count個(gè)和value相等的元素

lrem key count value

# 示例 刪除5個(gè)redis字符串
lrem mylist 5 redis
  • count > 0 : 從表頭開始向表尾搜索,移除與value相等的元素,數(shù)量為count
  • count < 0 : 從表尾開始向表頭搜索,移除與value相等的元素,數(shù)量為count的絕對(duì)值。
  • count = 0 : 移除表中所有與value相等的值。

4.9 將列表key下標(biāo)為index的值替換成指定value

lset key index value 

4.10 規(guī)定時(shí)間內(nèi)獲取并移除數(shù)據(jù)

# 在指定時(shí)間內(nèi) 從左邊移出并獲取列表的第一個(gè)元素
blpop key1 [key2] timeout
# 在指定時(shí)間內(nèi) 從右邊移出并獲取列表的第一個(gè)元素
brpop key1 [key2] timeout
# 在指定時(shí)間內(nèi) 從source列表中取出最后一個(gè)元素,并插入到另外一個(gè)列表destination的頭部
brpoplpush source destination timeout

4.11 list的數(shù)據(jù)結(jié)構(gòu)

list的數(shù)據(jù)結(jié)構(gòu)為快速鏈表quickList

首先在列表元素較少的情況下會(huì)使用一塊連續(xù)的內(nèi)存存儲(chǔ),這個(gè)結(jié)構(gòu)是ziplist,也即是壓縮列表。

它將所有的元素緊挨著一起存儲(chǔ),分配的是一塊連續(xù)的內(nèi)存。當(dāng)數(shù)據(jù)量比較多的時(shí)候才會(huì)改成quicklist

因?yàn)槠胀ǖ逆湵硇枰母郊又羔樋臻g太大,會(huì)比較浪費(fèi)空間。

比如這個(gè)列表里存的只是int類型的數(shù)據(jù),結(jié)構(gòu)上還需要兩個(gè)額外的指針prevnext

redis將鏈表和ziplist結(jié)合起來組成了quicklist。也就是將多個(gè)ziplist使用雙向指針串起來使用。
在這里插入圖片描述

這樣既滿足了快速的插入刪除性能,又不會(huì)出現(xiàn)太大的空間冗余。

五、五大數(shù)據(jù)類型-hash

hash數(shù)據(jù)類型是一個(gè)鍵值對(duì)集合,可以理解為左邊一個(gè)key,對(duì)右邊一個(gè)存儲(chǔ)空間。

右邊這塊兒存儲(chǔ)空間叫hash,也就是說hash是指的一個(gè)數(shù)據(jù)類型。

它指的不是一個(gè)數(shù)據(jù),是這里邊的一堆數(shù)據(jù),那么它底層呢,是用hash表的結(jié)構(gòu)來實(shí)現(xiàn)的。

值得注意的是:

如果右邊存儲(chǔ)空間數(shù)量較少,存儲(chǔ)結(jié)構(gòu)優(yōu)化為類數(shù)組結(jié)構(gòu)。

如果右邊存儲(chǔ)空間數(shù)量較多,存儲(chǔ)結(jié)構(gòu)使用HashMap結(jié)構(gòu)。

在這里插入圖片描述

宏觀來看就是一個(gè)string類型的field(字段)和value(值)的映射表,特別適合用于存儲(chǔ)對(duì)象。

類似Java里面的Map<String,Object>

比如用戶id為查找的key,存儲(chǔ)的value為用戶對(duì)象的各個(gè)字段的鍵值對(duì):如果用普通的key/value結(jié)構(gòu)來存儲(chǔ)

在這里插入圖片描述

這樣通過 **key(用戶ID) + field(屬性標(biāo)簽) **就可以操作對(duì)應(yīng)屬性數(shù)據(jù)了。

既不需要重復(fù)存儲(chǔ)數(shù)據(jù),也不會(huì)帶來反復(fù)序列化和并發(fā)修改控制的問題。

5.1 添加/修改數(shù)據(jù)

# key 是redis的鍵   field是hash中數(shù)據(jù)的鍵
hset key field value
# 示例
hset key name "張三"

5.2 獲取數(shù)據(jù)

# 從key中取出 hash的鍵為field的值
hget key field

# 獲取key中全部的hash數(shù)據(jù)
hgetall key

5.3 刪除數(shù)據(jù)

# 設(shè)置了幾個(gè)field就刪除幾個(gè)
hdel key field1 field2...

5.4 設(shè)置field的值,如果該field存在則不做任何操作

hsetnx key field value

5.5 添加/修改多個(gè)數(shù)據(jù)(批量添加)

hmset key field1 value1 field2 value2 …

5.6 獲取多個(gè)數(shù)據(jù)

hmget key field1 field2 …

5.7 獲取哈希表中字段的數(shù)量

hlen key

5.8 獲取哈希表中是否存在指定的字段

hexists key field

5.9 列出該hash集合的所有field

hkeys key

5.10 列出該hash集合的所有value

hvals key

5.11 為哈希表 key 中的域 field 的值加上指定值

# 這里的increment只能是整數(shù)
hincrby key field increment

# 這里的increment只能是浮點(diǎn)數(shù)
hincrbyfloat key field increment

5.12 當(dāng)field不存在時(shí)才添加field

hsetnx key field value

5.13 hash類型數(shù)據(jù)其它的注意事項(xiàng)

  • hash類型中value只能存儲(chǔ)字符串,不允許存儲(chǔ)其他數(shù)據(jù)類型,不存在嵌套現(xiàn)象。

    如果數(shù)據(jù)未獲取到,對(duì)應(yīng)的值為(nil)。

  • 每個(gè)hash可以存儲(chǔ) 2^32-1個(gè)鍵值對(duì)

    hash類型十分貼近對(duì)象的數(shù)據(jù)存儲(chǔ)形式,并且可以靈活添加刪除對(duì)象屬性。

    hash設(shè)計(jì)初衷不是為了存儲(chǔ)大量對(duì)象而設(shè)計(jì) 的,切記不可濫用,更不可以將hash作為對(duì)象列表使用。

  • hgetall操作可以獲取全部屬性,如果field過多,遍歷整體數(shù)據(jù)效率會(huì)很低,有可能成為數(shù)據(jù)訪問瓶頸。

5.14 hash類型對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)

hash類型的數(shù)據(jù)結(jié)構(gòu)主要有兩種:ziplist(壓縮列表),hashtable(哈希表)。

當(dāng)field-value長(zhǎng)度較短且個(gè)數(shù)較少時(shí),使用ziplist,否則使用hashtable

六、五大數(shù)據(jù)類型-set

redisset數(shù)據(jù)類型對(duì)外提供的功能與list類似是一個(gè)列表的功能,特殊之處在于set是可以自動(dòng)排重的。

當(dāng)需要存儲(chǔ)一個(gè)列表數(shù)據(jù),又不希望出現(xiàn)重復(fù)數(shù)據(jù)時(shí),set是一個(gè)很好的選擇。

并且set提供了判斷某個(gè)成員是否在一個(gè)set集合內(nèi)的重要接口,這個(gè)也是list所不能提供的。

set是一個(gè)string類型的無(wú)序集合。它底層其實(shí)是一個(gè)valuenullhash表。
在這里插入圖片描述

所以添加,刪除,查找的復(fù)雜度都是O(1)

一個(gè)算法,隨著數(shù)據(jù)的增加,執(zhí)行時(shí)間的長(zhǎng)短,如果是O(1),那么意味著隨著數(shù)據(jù)增加,查找數(shù)據(jù)的時(shí)間不變。

這在大數(shù)據(jù)查找時(shí)就顯得很有優(yōu)勢(shì)了。

6.1 添加數(shù)據(jù)

sadd key member1 [member2]...

# 示例:
asdd myset 9 8 7

6.2 獲取全部數(shù)據(jù)

smembers key

6.3 刪除一部分?jǐn)?shù)據(jù)

srem key member1 [member2]...

6.4 獲取集合數(shù)據(jù)總量

scard key

6.5 判斷集合中是否包含指定數(shù)據(jù)

sismember key member

6.6 隨機(jī)獲取集合中指定數(shù)量的數(shù)據(jù)

srandmember key [count]

6.7 隨機(jī)獲取集中的某個(gè)數(shù)據(jù)并將該數(shù)據(jù)移除集合

# count不指定時(shí)默認(rèn)為1
spop key [count]

6.8 把集合中一個(gè)值從一個(gè)集合移動(dòng)到另一個(gè)集合

# source 源集合的名稱
# destination 目標(biāo)集合的名稱
# value源集合想要移動(dòng)的值
smove source destination value

6.9 返回兩個(gè)集合的交集元素

sinter key1 key2

6.10 返回兩個(gè)集合的并集元素

sunion key1 key2

6.11 返回兩個(gè)集合的差集元素

sdiff key1 key2

6.12 求兩個(gè)集合的交、并、差集并存儲(chǔ)到指定集合中

# 求兩個(gè)集合的交集元素并存儲(chǔ)到destination集合當(dāng)中
sinterstore destination key1 key2

# 求兩個(gè)集合的并集元素并存儲(chǔ)到destination集合當(dāng)中
sunionstore destination key1 key2

# 求兩個(gè)集合的差集元素并存儲(chǔ)到destination集合當(dāng)中
sdiffstore destination key1 key2

6.13 set 類型數(shù)據(jù)操作的注意事項(xiàng)

  • set 類型不允許數(shù)據(jù)重復(fù),如果添加的數(shù)據(jù)在set中已經(jīng)存在,將只保留一份。

  • set 雖然與hash的存儲(chǔ)結(jié)構(gòu)相同,但是無(wú)法啟用hash中存儲(chǔ)值的空間。

6.14 set類型的數(shù)據(jù)結(jié)構(gòu)

Set數(shù)據(jù)結(jié)構(gòu)是dict字典,字典是用哈希表實(shí)現(xiàn)的。

JavaHashSet的內(nèi)部實(shí)現(xiàn)使用的是HashMap,只不過所有的value都指向同一個(gè)對(duì)象。

redisset結(jié)構(gòu)也是一樣,它的內(nèi)部也使用hash結(jié)構(gòu),所有的value都指向同一個(gè)內(nèi)部值。

七、五大數(shù)據(jù)類型-Zset(sorted set)

Redis有序集合zset與普通集合set非常相似,是一個(gè)沒有重復(fù)元素的字符串集合。

不同之處是有序集合的每個(gè)成員都關(guān)聯(lián)了一個(gè)評(píng)分(score)。

這個(gè)評(píng)分(score)被用來按照從最低分到最高分的方式排序集合中的成員。

集合的成員是唯一的,但評(píng)分可以重復(fù) 。

因?yàn)樵厥怯行虻? 所以你也可以很快的根據(jù)評(píng)分(score)或者次序(position)來獲取一個(gè)范圍的元素。

并且訪問有序集合的中間元素也是非常快的。

優(yōu)勢(shì)利用zset實(shí)現(xiàn)一個(gè)文章訪問量的排行榜,就是非常不錯(cuò)的選擇。

7.1 將一個(gè)或多個(gè)元素及其score 值加入到有序集 key 當(dāng)中

# 就是每個(gè)值前面得加一個(gè)分?jǐn)?shù)用來排序
zadd key score1 value1 score2 value2

7.2 返回有序集key中,下標(biāo)在start到stop之間的元素

# WITHSCORES可加可不加,但是加了可以讓分?jǐn)?shù)一起和值返回到結(jié)果集
zrange key start stop [WITHSCORES]

# 示例:獲取key中下邊0-5之間的元素
zrange key 0 5 WITHSCORES

7.3 返回有序集key中,所有 score 值介于min和max之間的元素

zrangebyscore key min max [withscores] [limit offset count]

# 示例
ZRANGEBYSCORE salary -inf +inf					# 顯示整個(gè)有序集salary的數(shù)據(jù)
ZRANGEBYSCORE salary -inf +inf WITHSCORES    	# 顯示整個(gè)有序集及成員的 score 值
ZRANGEBYSCORE salary -inf 5000 WITHSCORES    	# 顯示工資 <=5000 的所有成員
ZRANGEBYSCORE salary (5000 400000				# 顯示工資大于 5000 小于等于 400000 的成員
ZRANGEBYSCORE salary (5000 (400000				# 顯示工資大于 5000 小于 400000 的成員

包括等于 min 或 max 的元素

返回值按score從小到大排列

zrevrangebyscore key max min [withscores] [limit offset count]

這個(gè)和上面的用法幾乎一樣,只不過返回值按score從大到小排列

7.4 為元素的score加上增量 increment

zincrby key increment value

# 示例
zincrby myzset 2 "one"		# 返回值是增加后的分?jǐn)?shù)

7.4 刪除有序集合中指定值的元素

zrem key value

7.5 統(tǒng)計(jì)該有序集分?jǐn)?shù)區(qū)間內(nèi)的元素個(gè)數(shù)

zcount key min max

7.6 返回該值在有序集合中的排名,從0開始

zrank key value>

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

zsetredis提供的一個(gè)非常特別的數(shù)據(jù)結(jié)構(gòu)。

一方面它等價(jià)于Java的數(shù)據(jù)結(jié)構(gòu)Map<String, Double>,可以給每一個(gè)元素value賦予一個(gè)權(quán)重score。

另一方面它又類似于TreeSet,內(nèi)部的元素會(huì)按照權(quán)重score進(jìn)行排序,可以得到每個(gè)元素的名次,還可以通過

score的范圍來獲取元素的列表。

zset底層使用了兩個(gè)數(shù)據(jù)結(jié)構(gòu):

  • hashhash的作用就是關(guān)聯(lián)元素value和權(quán)重score

    保障元素value的唯一性,可以通過元素value找到相應(yīng)的score值。

  • 跳躍表,跳躍表的目的在于給元素value排序,根據(jù)score的范圍獲取元素列表。

zrevrangebyscore key max min [withscores] [limit offset count]

這個(gè)和上面的用法幾乎一樣,只不過返回值按score從大到小排列

7.4 為元素的score加上增量 increment

zincrby key increment value

# 示例
zincrby myzset 2 "one"		# 返回值是增加后的分?jǐn)?shù)

7.4 刪除有序集合中指定值的元素

zrem key value

7.5 統(tǒng)計(jì)該有序集分?jǐn)?shù)區(qū)間內(nèi)的元素個(gè)數(shù)

zcount key min max

7.6 返回該值在有序集合中的排名,從0開始

zrank key value>

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

zsetredis提供的一個(gè)非常特別的數(shù)據(jù)結(jié)構(gòu)。

ZSet數(shù)據(jù)較少時(shí)底層數(shù)據(jù)結(jié)構(gòu)是ziplist,數(shù)據(jù)較多時(shí)轉(zhuǎn)為skiplist

一方面它等價(jià)于Java的數(shù)據(jù)結(jié)構(gòu)Map<String, Double>,可以給每一個(gè)元素value賦予一個(gè)權(quán)重score

另一方面它又類似于TreeSet,內(nèi)部的元素會(huì)按照權(quán)重score進(jìn)行排序,可以得到每個(gè)元素的名次,還可以通過

score的范圍來獲取元素的列表。

zset底層使用了兩個(gè)數(shù)據(jù)結(jié)構(gòu):

  • hashhash的作用就是關(guān)聯(lián)元素value和權(quán)重score

    保障元素value的唯一性,可以通過元素value找到相應(yīng)的score值。

  • 跳躍表,跳躍表的目的在于給元素value排序,根據(jù)score的范圍獲取元素列表。

原文鏈接:https://blog.csdn.net/qq_44749491/article/details/128061624

欄目分類
最近更新