博客 / 詳情

返回

Redis的基本命令

Redis是key-value數據庫,key一般是字符串型,value可以是其他的

String、Hash、List、、Set、SortedSet(五個基本類型)GEO、BitMap、HyperLog

官方文檔Commands | Docs

層級格式

結構

key允許有多個單詞形成層級結構,多個單詞之間用:隔開,格式如下:

項目名:業務名:類型:id

可以將對象序列化為JSON字符串後存儲

避免id衝突

通用命令

MSET

可以一次設置多個鍵值對的命令,屬於原子性操作,要麼成功,要麼失敗

KEYS

查看符合末班的所有key(不建議生產環境)

DEL

有中括號,可以刪除多個

EXISTS

也可以一對多

判斷是否存在

EXPIRE

給key設置有效期,有效期到期時key會被刪除

TTL

查看剩餘有效期

-2相當於已經刪除了

-1相當於永久有效

String類型

意味着它的value是字符串,不過根據字符串的格式不同,又可以分為stringintfloat。無論哪種格式,底層都是字節數組形式存儲,只不過是編碼方式不同。字符串類型空間不超過512m

基礎命令

SET

設置一個值(覆蓋已有值)

SET name "Qfish"

GET

取值

GET name

批量操作

MSET

一次設置多個值

MSET a 1 b 2 c 3

MGET

MGET a b c

設置時間

SETEX

設置值 + 過期時間

秒級過期

SETEX code 60 "123456"

PSETEX

毫秒級過期

PSETEX temp 500 "hi"

SETNX key value

僅當 key 不存在時才設置(常用於分佈式鎖)

SETNX lock 1

數字操作

INCR

自增加1

INCR count

DECR

自減1

DECR count

INCRBY

自增n

INCRBY count 10

DECRBY

自減n

DECRBY count 10

INCRBYFLOAT

自增浮點數

INCRBYFLOAT price 0.8

字符串追加與長度

APPEND

往原值後追加內容

APPEND msg " world"

STRLEN

獲取字符串長度

STRLEN name

子串操作

GETRANGE key start end

按範圍取子串

GETRANGE title 0 4

SETRANGE key offset value

從偏移位置開始覆蓋寫入(不會刪除之後的內容)

SETRANGE name 2 "fish"

GETSET

GETSET key newValue

返回舊值,同時設置新值

GETSET token "new_token"

set key value nx==setnx

setex同理

List類型

可以看做一個雙向鏈表結構,或者也可以説很像雙端隊列,既可以支持正向檢索,也可以支持反向檢索。所以它是有序可重複插入和刪除快查詢速度一般

添加元素

LPUSH key value [value ...]和RPUSH key value [value ...]

分別是向列表左邊和右邊添加數據,同時返回最後一個值

LPUSH mylist a b c → 列表變 [c,b,a] 返回c
RPUSH mylist a b c → [a,b,c] 返回c

刪除元素

LPOP key和RPOP key

顧名思義就是對於列表分別從左和從右刪除元素,並且返回元素

列表是[a,b,c]

LPOP mylist  → 列表變 [b,c]返回a
RPOP mylist  → 列表變[a,b]返回c

LREM key count value

移除列表中與 value 匹配的元素,這裏的count意思是從頭開始三處幾個value

LREM mylist 2 a → 從頭開始刪除 2 個 a

獲取元素

LINDEX key index

獲取指定索引的元素(0為頭,-1為尾)

LINDEX mylist 0 → 獲取頭元素

LRANGE key start stop

獲取指定區間的元素(包含 start 和 stop)

LRANGE mylist 0 -1 → 獲取所有

修改插入元素

LSET key index value

設置指定索引的值

LSET mylist 0 x

LINSERT key BEFORE|AFTER pivot value

在 list 中找到 pivot(基準值),然後把新元素插入到它 前面(BEFORE)後面(AFTER)

LINSERT mylist BEFORE "b" "x"

那麼這時候可能會有人要問,如果有多個怎麼辦,不用擔心,它只會匹配第一個出現的。所以引出一個思考:應該怎麼解決想要特定的值呢?個人建議可以加一個唯一標識,比如id這種

彈出元素

BLPOP key [key ...] timeout和BRPOP key [key ...] timeout

分別是阻塞彈出左邊和右邊元素,timeout 秒。timeout是等待,因為不可能一直等下去,如果沒有元素就會等待timeout

BLPOP mylist 5
BRPOP mylist 5

長度

LLEN key

獲取列表長度

LLEN mylist

LTRIM key start stop

裁剪列表,只保留指定區間

LTRIM mylist 0 9 → 只保留前 0-9的元素,包括start和stop

Hash類型

也叫散列,其value是一個無序字典,類似於Java中的HashMap結構

Hash結構可以將對象中的每個字段獨立存儲,可以針對單個字段做CRUD

基礎操作

HSET key field value

設置一個字段的值,

HSET user:1 name "tom"

HGET key field

獲取一個字段值

HGET user:1 name

HDEL key field [field ...]

刪除一個或多個字段

HDEL user:1 name age

HEXISTS key field

字段是否存在

HEXISTS user:1 age

然後就會發現,hash相比於string前面只是多了一個h,這還是很好記的,然後多了一個field,其實可以直接當做map一樣理解就可以了

批量操作

HMSET key field value [field value ...](8.0 之後推薦 HSET 多字段)

HMSET user:1 name "tom" age 18

HMGET key field [field ...]

HMGET user:1 name age

HGETALL key

返回所有字段和值

HGETALL user:1

遍歷操作

HKEYS key

返回所有字段名

HKEYS user:1

HVALS key

返回所有字段值

HVALS user:1

HLEN key

返回字段數量

HLEN user:1

數字操作(字段裏的數字也能自增)

HINCRBY key field increment

HINCRBY user:1 age 1

HINCRBYFLOAT key field increment

HINCRBYFLOAT wallet balance 8.5

HSETNX key field value

作用參考string版,當然過期的話只能用EXPIRE,不存在HSETEX這

Set類型

可以看成value為null的HashMap,也是一個Hash表。所以它是無序元素不可重複查找快支持交集、並集、差集等功能。如果是學過C++的小夥伴,千萬不要和STL裏面的Set搞混了。

添加元素

SADD key member [member ...]

SADD myset a b c

刪除元素

SREM key member [member ...]

SREM myset a

判斷是否存在

SISMEMBER key member

SISMEMBER myset a   # 1 或 0

獲取所有元素

SMEMBERS key

SMEMBERS myset

獲取元素數量

SCARD key

SCARD myset

返回隨機元素(不刪除)

SRANDMEMBER key [count]

count是返回的個數

SRANDMEMBER myset     # 返回一個
SRANDMEMBER myset 3   # 返回三個(可重複)

隨機彈出(返回並刪除)

SPOP key [count]

SPOP myset        # 隨機刪除並返回
SPOP myset 2

交集

SINTER key [key ...]

SINTER set1 set2

保存交集

SINTERSTORE key destkey

SINTERSTORE result set1 set2

並集

SUNION key [key ...]

SUNION set1 set2

保存並集

SUNIONSTORE result set1 set2

差集(屬於 A 不屬於 B)

SDIFF key [key ...]

SDIFF set1 set2

差集合並

SDIFFSTORE result set1 set2

掃描

SSCAN key cursor [MATCH pattern] [COUNT count]

SortedSet類型

可排序查詢速度快元素不重複

添加 / 更新元素

ZADD key score member [score member ...]

添加或者更新成員的 score。

ZADD rank 100 user1
ZADD rank 200 user2 150 user3

獲取元素(按排名或分數)

ZRANGE key start stop [WITHSCORES]

按 score 從小到大 + 按 rank 獲取元素。

ZRANGE rank 0 -1 WITHSCORES

ZREVRANGE key start stop [WITHSCORES]

按 score 從大到小。


按 score 區間查詢

ZRANGEBYSCORE key min max [WITHSCORES]

按 score 範圍查成員。

ZRANGEBYSCORE rank 100 200

ZREVRANGEBYSCORE key max min

倒序版。


獲取排名 / 分數

ZSCORE key member

查看某成員分數。

ZSCORE rank user1

ZRANK key member

成員在 升序 排名中的位置(0-based)。

ZRANK rank user1

ZREVRANK key member

下降序排名。


刪除相關

ZREM key member [member ...]

刪除成員。

ZREM rank user1 user2

ZREMRANGEBYSCORE key min max

按 score 刪除。

ZREMRANGEBYRANK key start stop

按排名刪除。


計數相關

ZCARD key

獲取成員數量。

ZCOUNT key min max

統計 score 在範圍內的數量。


修改 score

ZINCRBY key increment member

讓成員 score 增加/減少。

ZINCRBY rank 10 user1

集羣/集合操作

ZINTERSTORE destination numkeys key [key ...]

多個 ZSet 求交集並存儲。

ZUNIONSTORE destination numkeys key [key ...]

多個 ZSet 求並集並存儲。

可以搭配 WEIGHTS、AGGREGATE 做更復雜權重計算。


其它常用

ZPOPMax / ZPOPMin

彈出 score 最大/最小的成員。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.