1. 程式人生 > 其它 >Redis五大基本資料型別之String

Redis五大基本資料型別之String

前置條件

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