redis系列文章:
https://liudongdong.top/categories/redis
本篇來源:
https://liudongdong.top/archives/redissi-redis-zhi-string
公衆号:雨中散步撒哈拉
備注:歡迎關注公衆号,一起學習,共同進步!
一、基本文法
Redis 字元串(String)
Redis 字元串資料類型的相關指令用于管理 redis 字元串值,基本文法如下:
文法
redis 127.0.0.1:6379> COMMAND KEY_NAME
執行個體
127.0.0.1:6379> set learn_redis liuddOK127.0.0.1:6379> get learn_redis"liudd"127.0.0.1:6379>
适用場景:
- 計數器
- 統計多機關的數量
- 粉絲數
- 對象緩存存儲
二、指令劃分
個人覺得string類型,指令比較多些,便于個人了解和學習,進行了簡單分類!
分為以下幾類:
- 指派指令
- 取值指令
- 特有指令
- 額外指令
- 對象格式操作
以上為個人了解,進行簡單劃分。具體對指令的了解,期待你的了解方法!
1. 指派指令
- set:設定值
- setnx:如果值不存在則進行指派
- mset:批量設值
- msetnx:批量設值,且key不存在
- getset:傳回舊值,設值新值
2. 取值指令
- get:擷取key的值
- mget:批量擷取key的值
3. 特有指令
- exists:判斷key是否存在
- append:根據key進行追加
- strlen:擷取key的長度
- setrange:根據起終下标,進行設值(個人了解為字元串替換replace)
- getrange:根據起終下标,進行取值(個人了解為字元串截取substring)
4. 額外指令
- setex:設值key,并設定過期時間(機關:s/秒))
- psetex:設值key,并設定過期時間(機關:ms/毫秒))
- incr:int類型,進行key的自增(i++)
- decr:int類型,進行key的自減(i--)
- incrby:int類型,根據步長進行key的增加(i+n)
- decrby:int類型,根據步長進行key的增減(i-n)
- incrbyfloat:float類型,根據float值,進行增減(正負)
5. 對象格式操作
根據id和屬性進行對象的存取值
三、分類指令實踐
# 檢視目前庫所有key127.0.0.1:6379> keys *(empty list or set)# 設值k1127.0.0.1:6379> set k1 v1OK# 測試setnx對k1,如果k1存在是否存儲127.0.0.1:6379> setnx k1 kk(integer) 0# 上步傳回0,結果為存儲失敗,進行檢視k1值127.0.0.1:6379> get k1"v1"# k2不存在,進行存儲127.0.0.1:6379> setnx k2 v2(integer) 1# 上步傳回1,存儲成功,進行檢視127.0.0.1:6379> get k2"v2"# 批量設值127.0.0.1:6379> mset k3 v3 k4 v4OK# 批量取值127.0.0.1:6379> mget k3 k41) "v3"2) "v4"# 傳回舊值,設值新值127.0.0.1:6379> getset k4 v5"v4"# 檢視結果127.0.0.1:6379> get k4"v5"127.0.0.1:6379>
前一步,已經根據設值進行了設值和取值,本步單獨進行取值
127.0.0.1:6379> get k1"v1"127.0.0.1:6379> mget k2 k3 k41) "v2"2) "v3"3) "v5"127.0.0.1:6379>
# 檢視目前庫,127.0.0.1:6379> keys *1) "k3"2) "k1"3) "k4"4) "k2"# 判斷是否存儲k4127.0.0.1:6379> exists k4(integer) 1# 判斷是否存在k5127.0.0.1:6379> exists k5(integer) 0# k4進行追加值127.0.0.1:6379> append k4 aaa(integer) 5127.0.0.1:6379> get k4"v5aaa"# 擷取k4值得長度127.0.0.1:6379> strlen k4(integer) 5# 根據起始下标進行替換k4,起始下标為1127.0.0.1:6379> setrange k4 1 kk(integer) 5127.0.0.1:6379> get k4"vkkaa"# 截取擷取值,截取下标範圍[2,4]127.0.0.1:6379> getrange k4 2 4"kaa"# 如果出現負值,則下标為從右向左,開始為-1127.0.0.1:6379> getrange k4 0 -1"vkkaa"127.0.0.1:6379>
題外話:
getrange取值下标規則

image.png
# 設值過期時間為3秒127.0.0.1:6379> setex k 3 kkOK127.0.0.1:6379> get k"kk"127.0.0.1:6379> get k(nil)# 設值過期時間為3000毫秒(3秒)127.0.0.1:6379> psetex kk 3000 kkOK127.0.0.1:6379> get kk"kk"127.0.0.1:6379> get kk(nil)# 對i自增127.0.0.1:6379> incr i(integer) 1127.0.0.1:6379> incr i(integer) 2127.0.0.1:6379> get i"2"# 對i自減127.0.0.1:6379> decr i(integer) 1127.0.0.1:6379> decr i(integer) 0127.0.0.1:6379> get i"0"# 根據步長增加127.0.0.1:6379> incrby i 3(integer) 3# 根據步長減少127.0.0.1:6379> decrby i 4(integer) -1127.0.0.1:6379> get i"-1"# 對i進行float浮點數操作127.0.0.1:6379> incrbyfloat i 2.1"1.1"127.0.0.1:6379> get i"1.1"127.0.0.1:6379>
對象指令格式
mset key:{id}:{屬性}
# id為1的user,進行設值127.0.0.1:6379> mset user:1:name liudd user:1:age 2OK# 擷取user,id為1的值127.0.0.1:6379> mget user:1:name user:1:age1) "liudd"2) "2"# 設值id為2的user對象127.0.0.1:6379> mset user:2:name liudd2 user:2:age 3OK127.0.0.1:6379> mget user:2:name user:2:age1) "liudd2"2) "3"127.0.0.1:6379> keys *1) "k1"2) "user:2:name"3) "k2"4) "user:1:age"5) "user:2:age"6) "k3"7) "user:1:name"8) "k4"9) "i"127.0.0.1:6379>
附錄:指令清單
下表列出了常用的 redis 字元串指令:
1 | SET key value 設定指定 key 的值 |
2 | GET key 擷取指定 key 的值。 |
3 | GETRANGE key start end 傳回 key 中字元串值的子字元 |
4 | GETSET key value 将給定 key 的值設為 value ,并傳回 key 的舊值(old value)。 |
5 | GETBIT key offset 對 key 所儲存的字元串值,擷取指定偏移量上的位(bit)。 |
6 | [MGET key1 key2..] 擷取所有(一個或多個)給定 key 的值。 |
7 | SETBIT key offset value 對 key 所儲存的字元串值,設定或清除指定偏移量上的位(bit)。 |
8 | SETEX key seconds value 将值 value 關聯到 key ,并将 key 的過期時間設為 seconds (以秒為機關)。 |
9 | SETNX key value 隻有在 key 不存在時設定 key 的值。 |
10 | SETRANGE key offset value 用 value 參數覆寫給定 key 所儲存的字元串值,從偏移量 offset 開始。 |
11 | STRLEN key 傳回 key 所儲存的字元串值的長度。 |
12 | [MSET key value key value …] 同時設定一個或多個 key-value 對。 |
13 | [MSETNX key value key value …] 同時設定一個或多個 key-value 對,當且僅當所有給定 key 都不存在。 |
14 | PSETEX key milliseconds value 這個指令和 SETEX 指令相似,但它以毫秒為機關設定 key 的生存時間,而不是像 SETEX 指令那樣,以秒為機關。 |
15 | INCR key 将 key 中儲存的數字值增一。 |
16 | INCRBY key increment 将 key 所儲存的值加上給定的增量值(increment) 。 |
17 | INCRBYFLOAT key increment 将 key 所儲存的值加上給定的浮點增量值(increment) 。 |
18 | DECR key 将 key 中儲存的數字值減一。 |
19 | DECRBY key decrement key 所儲存的值減去給定的減量值(decrement) 。 |
20 | APPEND key value 如果 key 已經存在并且是一個字元串, APPEND 指令将指定的 value 追加到該 key 原來值(value)的末尾。 |