Redis 五大資料型別之 String(字串)

HuDu發表於2020-09-11

五大資料型別(String)

官方文件

Redis 五大資料型別

Redis 是一個開源(BSD許可)的,記憶體中的資料結構儲存系統,它可以用作資料庫、快取和訊息中介軟體。 它支援多種型別的資料結構,如 字串(strings)雜湊(hashes)列表(lists)集合(sets)有序集合(sorted sets) 與範圍查詢, bitmapshyperloglogs地理空間(geospatial) 索引半徑查詢。 Redis 內建了 複製(replication)LUA指令碼(Lua scripting)LRU驅動事件(LRU eviction)事務(transactions) 和不同級別的 磁碟持久化(persistence), 並通過 Redis哨兵(Sentinel)和自動 分割槽(Cluster)提供高可用性(high availability)。

Redis-key

127.0.0.1:6379> ping
PONG
127.0.0.1:6379> keys *    # 檢視所有的key
(empty list or set)
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name hudu    # set key
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> set age 1
OK
127.0.0.1:6379> EXISTS name    # 檢視是否存在key
(integer) 1
127.0.0.1:6379> EXISTS name1
(integer) 0
127.0.0.1:6379> MOVE name 1    # 移動到指定的資料庫
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name hudu
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> EXPIRE name 10    # 設定過期時間,秒
(integer) 1
127.0.0.1:6379> ttl name    # 檢視key的剩餘時間(time to live)
(integer) 6
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> DEL age    # 移除資料
(integer) 1
127.0.0.1:6379> type name    # 檢視資料型別
string

String(字串)

127.0.0.1:6379> set k1 v1    # 設定值
OK
127.0.0.1:6379> get k1    # 獲取值
"v1"
127.0.0.1:6379> keys *    # 顯示所有的值
1) "k1"
127.0.0.1:6379> EXISTS k1    # 判斷是否存在值
(integer) 1
127.0.0.1:6379> APPEND k1 hello    # 追加字串,如果當前值不存在相當於set一個字串
(integer) 7
127.0.0.1:6379> STRLEN k1    # 檢視值的長度
(integer) 7
127.0.0.1:6379> APPEND k1 ,hudu
(integer) 12
127.0.0.1:6379> STRLEN k1
(integer) 12
127.0.0.1:6379> get k1
"v1hello,hudu"
127.0.0.1:6379> set views 0    # 初識瀏覽量為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> DECR views    # 自減1
(integer) 0
127.0.0.1:6379> get views
"0"
127.0.0.1:6379>  incrby views 10    # 設定步長,指定增量
(integer) 10
127.0.0.1:6379> get views
"10"
127.0.0.1:6379> DECRBY views 5
(integer) 5
127.0.0.1:6379> get views
"5"
127.0.0.1:6379> set k1 hello,hudu
OK
127.0.0.1:6379> get k1
"hello,hudu"
127.0.0.1:6379> GETRANGE k1 0 5    # 獲取字串,是閉區間
"hello,"
127.0.0.1:6379> GETRANGE k1 0 -1    #獲取整個字串的值
"hello,hudu"
127.0.0.1:6379> set k2 abcdefg
OK
127.0.0.1:6379> get k2
"abcdefg"
127.0.0.1:6379> SETRANGE k2 1 xx    # 替換指定位置開始的字串
(integer) 7
127.0.0.1:6379> GETRANGE k2 0 -1
"axxdefg"
127.0.0.1:6379>
  • setex、setnx
# setex(set with expire)# 設定過期時間
# setnx (set if not exist)# 不存在再設定,在分散式鎖中常用

127.0.0.1:6379> setex k3 30 hello    # 設定key3 的值為 hello,30秒後過期
OK
127.0.0.1:6379> ttl k3
(integer) 27
127.0.0.1:6379> ttl k3
(integer) 0
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
127.0.0.1:6379> setnx mykey redis    # 如果mykey不存在建立mykey
(integer) 1
127.0.0.1:6379> setnx mykey mongodb    # 如果mykey存在建立失敗
(integer) 0
127.0.0.1:6379> get mykey
"redis"
127.0.0.1:6379>  ttl k3
(integer) -2
  • mset、mget、msetnx
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3    # 同時設定多個k和v
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k3"
3) "k2"
127.0.0.1:6379> mget k1 k2 k3    # 同時獲取多個k和v
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)
  • 物件
set user:1 {name:hudu,age:22}    # 設定一個user:1物件,值為json字串來儲存一個物件

# 這裡的key是一個巧妙地設計:user:{id}:{filed},如此設計在Redis中是完全OK127.0.0.1:6379[1]> mset user:1:name zhangsan user:1:age 20
OK
127.0.0.1:6379[1]> mget user:1:name user:1:age
1) "zhangsan"
2) "20"
  • getset
127.0.0.1:6379[1]> getset db redis    # 如果不存在值,則返回 nil
(nil)
127.0.0.1:6379[1]> get db
"redis"
127.0.0.1:6379[1]> getset db mongodb    # 如果存在值,獲取原來的值,並設定新的值
"redis"

String 型別的使用場景:value除了我們的字串還可以是我們的數字

  • 計數器
  • 統計多單位的數量
  • 粉絲數
  • 物件快取儲存
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章