Redis之String

*一炁化三清*發表於2024-05-29

Redis 資料型別

  • string(字串): 基本的資料儲存單元,可以儲存字串、整數或者浮點數。
  • hash(雜湊):一個鍵值對集合,可以儲存多個欄位。
  • list(列表):一個簡單的列表,可以儲存一系列的字串元素。
  • set(集合):一個無序集合,可以儲存不重複的字串元素。
  • zset(sorted set:有序集合): 類似於集合,但是每個元素都有一個分數(score)與之關聯。
  • 點陣圖(Bitmaps):基於字串型別,可以對每個位進行操作。
  • 超日誌(HyperLogLogs):用於基數統計,可以估算集合中的唯一元素數量。
  • 地理空間(Geospatial):用於儲存地理位置資訊。
  • 釋出/訂閱(Pub/Sub):一種訊息通訊模式,允許客戶端訂閱訊息通道,並接收發布到該通道的訊息。
  • 流(Streams):用於訊息佇列和日誌儲存,支援訊息的持久化和時間排序。
  • 模組(Modules):Redis 支援動態載入模組,可以擴充套件 Redis 的功能。

String(字串)

  • string 是 redis 最基本的型別,你可以理解成與 Memcached 一模一樣的型別,一個 key 對應一個 value。
  • string 型別是二進位制安全的。意思是 redis 的 string 可以包含任何資料,比如jpg圖片或者序列化的物件。
  • string 型別是 Redis 最基本的資料型別,string 型別的值最大能儲存 512MB。

常用命令

SET key value:設定鍵的值。
GET key:獲取鍵的值。
INCR key:將鍵的值加 1。
DECR key:將鍵的值減 1。
APPEND key value:將值追加到鍵的值之後

案例

# redis-cli -p 6379
127.0.0.1:6379> set key1 v1                 #設定key的值
OK
127.0.0.1:6379> get key1                    #獲取key的值
"v1"
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> append key1 "hello"         #追加字串
(integer) 7
127.0.0.1:6379> get key1
"v1hello"

127.0.0.1:6379> strlen key1                 #獲取當前字串的長度
(integer) 7

127.0.0.1:6379> EXISTS key1                 #判斷當前key是否存在
(integer) 1

127.0.0.1:6379> APPEND name xiaoli          #追加字串,如果當前key不存在,相當於set
(integer) 6

  • 字串自增減、步長
127.0.0.1:6379> SET views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> INCR views                  #自增1
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> INCR views
(integer) 2
127.0.0.1:6379> DECR views                  #自減1
(integer) 1
127.0.0.1:6379> DECR views
(integer) 0
127.0.0.1:6379> get views
"0"

127.0.0.1:6379> INCRBY views 10             #自增步長10
(integer) 10
127.0.0.1:6379> INCRBY views 10
(integer) 20
127.0.0.1:6379> DECRBY views 6              #自減步長10
(integer) 14
  • 擷取字串
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> KEYS *
(empty array)
127.0.0.1:6379> set key1 helloxiaoming
OK
127.0.0.1:6379> get key1
"helloxiaoming"
127.0.0.1:6379> GETRANGE key1 0 3             #擷取字串【0,3】
"hell"
127.0.0.1:6379> GETRANGE key1 0 -1            #獲取全部字串
"helloxiaoming" 
  • 替換字串
127.0.0.1:6379> set key2 sdagasdg
OK
127.0.0.1:6379> get key2
"sdagasdg"
127.0.0.1:6379> SETRANGE key2 1 00            #替換指定位置開始的字串
(integer) 8
127.0.0.1:6379> get key2
"s00gasdg"
  • setex&setnx

setex (set with expire) #設定過期時間
setnx (set if not exist) #不存在再設定(在分散式鎖中常常使用!!!)


127.0.0.1:6379> SETEX key3 30 hello           #設定key3的值為hello,30s過期。
OK

127.0.0.1:6379> ttl key3
(integer) 19

127.0.0.1:6379> SETNX mykey redis             #設定mykey的值為redis,返回結果為1,設定成功    
(integer) 1
127.0.0.1:6379> keys *
1) "key1"
2) "mykey"
3) "key2"
127.0.0.1:6379> setnx mykey mysql             #設定mykey的值為mysql,返回結果為0,設定失敗,因為已近存在
(integer) 0
127.0.0.1:6379> get key3
(nil)
127.0.0.1:6379> get mykey
"redis"
  • mset&mget
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3           #同時設定多個值
OK
127.0.0.1:6379> KEYS *
1) "k2"
2) "k3"
3) "k1"

127.0.0.1:6379> MGET k1 k2 k3                    #同時獲取多個值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> MSETNX k1 v1 k4 v4               #msetnx是一個原子性操作,要麼一起成功,要麼一起失敗。
(integer) 0
127.0.0.1:6379> get k4
(nil)
  • 物件
127.0.0.1:6379> mset user:1 {name:zhangsan,age:100}      #設定一個user:1的物件,值為json字元來儲存一個物件! user:{id}:{filed}
OK

127.0.0.1:6379> mset user:1:name zhangsan user:1:age 1   
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "user:1:age"
2) "1"
  • getset
127.0.0.1:6379> GETSET db redis             #如果不存在,則返回nil
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> GETSET db mysql             #如果存在值,取舊值,設新值
"redis"
127.0.0.1:6379> get db
"mysql"

相關文章