網(wǎng)站首頁(yè) 編程語(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
string
是redis
最基本的類型,一個(gè)key
對(duì)應(yīng)一個(gè)value
,是一種單鍵單值的結(jié)構(gòu)。
string
類型是二進(jìn)制安全的。意味著redis
的string
可以包含任何數(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
-
String
在redis
內(nèi)部存儲(chǔ)默認(rèn)就是一個(gè)字符串,當(dāng)遇到增減類操作incr
,decr
時(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)類似于Java
的ArrayList
,采用預(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è)額外的指針prev
和next
。
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
redis
的set
數(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è)value
為null
的hash
表。
所以添加,刪除,查找的復(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)的。
Java
中HashSet
的內(nèi)部實(shí)現(xiàn)使用的是HashMap
,只不過所有的value
都指向同一個(gè)對(duì)象。
redis
的set
結(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)
zset
是redis
提供的一個(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):
-
hash
:hash
的作用就是關(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)
zset
是redis
提供的一個(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):
-
hash
:hash
的作用就是關(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
相關(guān)推薦
- 2022-04-16 C++中不得不說的map容器_C 語(yǔ)言
- 2022-08-17 R語(yǔ)言ggplot2拼圖包patchwork安裝使用_R語(yǔ)言
- 2022-08-12 Python使用Opencv打開筆記本電腦攝像頭報(bào)錯(cuò)解問題及解決_python
- 2023-01-21 C#實(shí)現(xiàn)Word轉(zhuǎn)換RTF的示例代碼_C#教程
- 2022-04-04 運(yùn)行npm run dev報(bào)錯(cuò)(已解決)
- 2022-05-31 利用Python進(jìn)行數(shù)據(jù)清洗的操作指南_python
- 2022-11-29 redis配置文件詳解
- 2022-02-09 Linux驅(qū)動(dòng)之platform總線詳解_Linux
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支