Redis五大基本資料型別之String
阿新 • • 發佈:2022-04-13
前置條件
redis安裝完成並啟動
連線redis並清空所有資料
Redis-key
在redis中無論什麼資料型別,在資料庫中都是以key-value形式儲存,通過進行對Redis-key的操作,來完成對資料庫中資料的操作。
key常見操作
127.0.0.1:6379> FLUSHALL #清空所有資料 OK 127.0.0.1:6379> 127.0.0.1:6379> keys * #確認清空 (empty array) 127.0.0.1:6379> set name itblue #設定一個key OK 127.0.0.1:6379> keys * #檢視key 1) "name" 127.0.0.1:6379> set age 10 #設定一個key 並賦值 OK 127.0.0.1:6379> keys * #查詢key 1) "age" 2) "name" 127.0.0.1:6379> EXISTS name #查詢key是否存在 (integer) 1 127.0.0.1:6379> EXISTS name1 (integer) 0 127.0.0.1:6379>
設定key過期時間
127.0.0.1:6379> get name #查詢key的值 "bluehaha" 127.0.0.1:6379> expire name 30 #設定key name 30秒過期時間 (integer) 1 127.0.0.1:6379> ttl name #檢視當前key剩餘時間 (integer) 21 127.0.0.1:6379> ttl name (integer) 17 127.0.0.1:6379> ttl name (integer) 15 127.0.0.1:6379> ttl name (integer) 12 127.0.0.1:6379> ttl name (integer) 10 127.0.0.1:6379> ttl name (integer) 4 127.0.0.1:6379> ttl name #key name 已過期 (integer) -2 127.0.0.1:6379> get name #查詢不到key name (nil) 127.0.0.1:6379> 127.0.0.1:6379> type age #檢視key name的型別 string 127.0.0.1:6379> 其它操作可以搜尋 官方檢視幫助文件補充
String型別
string基本操作
127.0.0.1:6379> set key1 v1 #設定一個key=key1 值=v1 OK 127.0.0.1:6379> get key1 #檢視key1的值 "v1" 127.0.0.1:6379> exists key1 #檢視key1是否存在 (integer) 1 127.0.0.1:6379> 127.0.0.1:6379> append key1 "hello world" #追加key1的值 (integer) 13 #預設返回字串長度 127.0.0.1:6379> get key1 #檢視key1的值 "v1hello world" #內容追加成功 127.0.0.1:6379> append key3 "hellojoke"#如果追加的key不存在就建立 (integer) 9 127.0.0.1:6379> get key3 #之前不存在key3 append之後就存在了 "hellojoke" 127.0.0.1:6379> 127.0.0.1:6379> strlen key1 #獲取key1長度 (integer) 13 127.0.0.1:6379>
String實現i++
127.0.0.1:6379> set views 0 #建立key=views 值=0
OK
127.0.0.1:6379> get views# 查詢
"0"
127.0.0.1:6379> incr views #incr 對key=views的值+1操作
(integer) 1 #+1=1
127.0.0.1:6379> incr views
(integer) 2 #1+1=2
127.0.0.1:6379> incr views
(integer) 3 #2=1=3
127.0.0.1:6379>
127.0.0.1:6379> get views #key=views 的值=3
"3"
127.0.0.1:6379>
127.0.0.1:6379> get views
"3"
127.0.0.1:6379> incr views #相當於i++ 現在views=4
(integer) 4
127.0.0.1:6379> incr views #自增1 =5
(integer) 5
127.0.0.1:6379> incr views #自增+1=6
(integer) 6
# i--
127.0.0.1:6379> decr views # decr=自減 1
(integer) 5 #views=5
127.0.0.1:6379> decr views #再次自減
(integer) 4 #views=4
127.0.0.1:6379> decr views #再次自減
(integer) 3 #views=3
127.0.0.1:6379>
#以上不論自增還是自減 預設都是1
#設定自增/自減的步長
127.0.0.1:6379> incrby viewer 10 #incrby 自增步長=10
(integer) 10
127.0.0.1:6379> incrby viewer 10 #自增=10 #views=20
(integer) 20
127.0.0.1:6379> incrby viewer 10#自增=10 #views=30
(integer) 30
127.0.0.1:6379> incrby views 10 #自增=10 views=15
(integer) 15
127.0.0.1:6379> decrby views 5# ecrby 自減步長=10
(integer) 10 #15變成10
127.0.0.1:6379>
Sting 擷取替換
#擷取
127.0.0.1:6379> set key1 onetwohaha #設定key=key1的值
OK
127.0.0.1:6379> get key1 #檢視key1的值
"onetwohaha"
127.0.0.1:6379> getrange key1 0 3# getrange 擷取key1 [0-3]的字元
"onet"
127.0.0.1:6379> getrange key1 0 -1 #擷取全部字元
"onetwohaha"
##替換
127.0.0.1:6379> set key3 abcdef #設定key3的值
OK
127.0.0.1:6379> get key3 #檢視key3的值
"abcdef"
127.0.0.1:6379> setrange key3 1 ** #從第一個字串開始 後面的2個字串替換成* 也就是把 字串位置 1 和2的替換成*
(integer) 6
127.0.0.1:6379> get key3
"a**def"
127.0.0.1:6379>
String 批量設定
#setex(set with expire) 設定失效
#setnx(set if not exist) 設定如果不存在就建立 分散式鎖中常使用
127.0.0.1:6379> setex key4 30 "hello world" #設定key4 失效時間30s
OK
127.0.0.1:6379> ttl key4
(integer) 24
127.0.0.1:6379> ttl key4 #key4的有效時間在減少
(integer) 21
127.0.0.1:6379> setnx key5 "redis" #如果不存在就建立 key5=redis
(integer) 1 #成功了返回1
#說明key5確實不存在 並建立了key5=redis
127.0.0.1:6379> keys * #key4已經過期沒有了
1) "key1"
2) "key3"
3) "key2"
4) "key5"
127.0.0.1:6379> ttl key4 #key4已經過期沒有了
(integer) -2
127.0.0.1:6379> setnx key5 "redishaha" #如果不存在就建立置
(integer) 0 #設定失敗了返回0 因為上面建立了key5=redis
127.0.0.1:6379> get key5 # 後面的沒有建立成功
#key5的值還是redis 所有setnx是沒有則建立並賦值
"redis"
127.0.0.1:6379>
#批量設定
#mset 同時設定多個key=value
#mget
127.0.0.1:6379> flushall #先清空
OK
127.0.0.1:6379> get keys #確認是空的
(nil)
127.0.0.1:6379> keys * #沒有任何key
(empty array)
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 #同時設定多個值
OK
127.0.0.1:6379> keys * #建立的所有key
1) "k1"
2) "k3"
3) "k2"
127.0.0.1:6379> mget k1 k2 k3 #建立的所有value
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4 #msetnx如果不存在批量建立
#原子性操作 要麼一起成功 要麼一起失敗
(integer) 0 #建立失敗 因為k1是存在的
127.0.0.1:6379> get key4 #所以key4也沒有建立成功
(nil)
127.0.0.1:6379>
#建立物件
set user:1 {name:zhangsan,age:3} #設定一個key=user:1物件 值為json字元來儲存一個物件
#巧妙的設計了key
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2 #user:1:name作為key來使用 key的名字 見名知意
OK
127.0.0.1:6379> mget user:1:name user:1:age #獲取資訊
1) "zhangsan"
2) "2"
127.0.0.1:6379>
127.0.0.1:6379> keys *
1) "k3"
2) "user:1:age" #這個作為一個key存進去
3) "k1"
4) "k2"
5) "user:1:name"
127.0.0.1:6379>
#getset 先get獲取當前值在set設定新的值
127.0.0.1:6379> getset dba redis #如果不存在就返回nil 在設定新的值
(nil) #key=dba 預設值是null 所有返回這個
127.0.0.1:6379> get dba #再次查詢 可以查詢到set後的的結果
"redis"
127.0.0.1:6379> getset dba mango #如果存在先返回原來的值 在設定新的值 更新操作
"redis" #原來的值
127.0.0.1:6379> getset dba mango #再次查詢 set成功的值
"mango"
127.0.0.1:6379>
String的應用場景
string除了是字串 可以是數字 統計訪問量等
計數器
粉絲數
統計多單位數量
物件快取
本篇命令集錦
set key1 v1 #設定一個key1 值v1
exists key1 #檢視key1是否存在
append key1 "hello world" #追加key1的值 不存在就建立
get key3 #查詢key3的值
strlen key1 #獲取字串key1長度
incr views #自增views的值 預設步長為1
decr views #自減views的值 預設步長為1
incrby viewer 10 #自增viewer的值 設定步長為10
decrby views 5 #自減viewer的值 設定步長為5
getrange key1 0 3 #擷取 key的[0-3]個字元的值
setrange key3 1 aa # 從第一個開始 後面2個字元替換成aa
setex key4 30 "hello world" #設定key4 失效時間30s
ttl key4 #檢視key4當前有效時間
setnx key5 "redis" #如果不存在就建立 key5
mset k1 v1 k2 v2 k3 v3 #同時設定多個key-value
mget k1 k2 k3 #同時獲取多個key的值
msetnx k1 v1 k4 v4 #如果不存在批量建立 原子性操作 要麼一起成功 要麼一起失敗
setnx key5 "redis" #如果不存在就建立 key5