天天看點

redis | 四、redis之String

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>       

适用場景:

  1. 計數器
  2. 統計多機關的數量
  3. 粉絲數
  4. 對象緩存存儲

二、指令劃分

個人覺得string類型,指令比較多些,便于個人了解和學習,進行了簡單分類!

分為以下幾類:

  1. 指派指令
  2. 取值指令
  3. 特有指令
  4. 額外指令
  5. 對象格式操作

以上為個人了解,進行簡單劃分。具體對指令的了解,期待你的了解方法!

1. 指派指令

  1. set:設定值
  2. setnx:如果值不存在則進行指派
  3. mset:批量設值
  4. msetnx:批量設值,且key不存在
  5. getset:傳回舊值,設值新值

2. 取值指令

  1. get:擷取key的值
  2. mget:批量擷取key的值

3. 特有指令

  1. exists:判斷key是否存在
  2. append:根據key進行追加
  3. strlen:擷取key的長度
  4. setrange:根據起終下标,進行設值(個人了解為字元串替換replace)
  5. getrange:根據起終下标,進行取值(個人了解為字元串截取substring)

4. 額外指令

  1. setex:設值key,并設定過期時間(機關:s/秒))
  2. psetex:設值key,并設定過期時間(機關:ms/毫秒))
  3. incr:int類型,進行key的自增(i++)
  4. decr:int類型,進行key的自減(i--)
  5. incrby:int類型,根據步長進行key的增加(i+n)
  6. decrby:int類型,根據步長進行key的增減(i-n)
  7. 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取值下标規則

redis | 四、redis之String

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)的末尾。