字串型別是redis最基礎的資料結構,鍵,值均為字串型別,並且其他資料結構都是在字串的基礎上構建的。
注:字串值最大不能超過512mb;
一、命令
1、常用命令
1)設定值
set key value [ ex seconds] [px millseconds] [nx | xx]
ex seconds 為鍵設定秒級過期時間
px milliseconds 為鍵設定毫秒級過期時間
nx 鍵必須不存在才能設定成功,用於新增
xx 鍵必須存在才能設定成功,用於更新,與nx相反
//設定1000秒
127.0.0.1:6379> set test test ex 1000
ok127.0.0.1:6379> ttl test
(integer) 999
//更新為500秒
set test test ex 500 xx
ok127.0.0.1:6379> ttl test
(integer) 498
//由於nx用於新增,所以更新會失敗
127.0.0.1:6379> set test test ex 500 nx
(nil)
127.0.0.1:6379>
2)判斷鍵是否存在
exists key 返回0表示不存在,1表示存在
3)除了set,redis還提供了setex 和setnx兩個命令
setnx和nx 選項一樣,setex和ex選項一樣
setnx key value 如果鍵存在,則返回0,表示儲存失敗
setex key seconds value 設定key的值過期時間seconds秒
使用場景:
setnx可以作為分布式鎖的一種實現方案,官網給出的setnx分布式鎖方法:
4) 獲取值
get key 如果獲取的鍵不存在,返回nil(空)
5)批量設定值
mset key1 value1 key2 value2 ...
6)批量獲取值
mget key1 key2 key3 如果某些鍵不存在,則對應位置返回nil
127.0.0.1:6379> mset a 1 b 2 c 3
ok127.0.0.1:6379> mget a d b c f
1) "1"
2) (nil)
3) "2"
4) "3"
5) (nil)
tip:如果沒有mget批量操作,那麼n次get的是時間= n次網路時間+n次命令時間
使用mget的時間 n次get的時間 = 1次網路時間 + n次命令時間
7)計數(場景:統計瀏覽次數等)
incr key 該命令用於對值做自增操作,返回結果分為三種情況
i 值不是整數,返回錯誤
ii 值是整數,返回自增後的結果
iii 鍵不存在,建立鍵,並且將值預設為0自增,返回結果為1
//值不為整數,返回錯誤
127.0.0.1:6379> incr ff
(error) err value is not an integer or out of range
127.0.0.1:6379>
redis還提供了 decr(自減) incrby(自增指定數字) decrby(自減指定數字) incrbyfloat(自增浮點數)
127.0.0.1:6379> set number 5
ok127.0.0.1:6379> decr number
(integer) 4
127.0.0.1:6379> incrby number 3
(integer) 7
127.0.0.1:6379> incrbyfloat number 1.5
"8.5"
2、不常用命令
1)追加值
127.0.0.1:6379> get number
"8.5"
(integer) 4
127.0.0.1:6379> get number
"8.5w"
127.0.0.1:6379>
2)字串長度
strlen key 返回字串的長度 ,integer型別,如果是中文,乙個中文佔3位元組
127.0.0.1:6379> set china 中國
ok127.0.0.1:6379> strlen china
(integer) 6
127.0.0.1:6379> set ceshi 12
ok127.0.0.1:6379> strlen ceshi
(integer) 2
127.0.0.1:6379>
3)設定並返回原來的值
getset key value
127.0.0.1:6379> getset test ceshi
(nil)
127.0.0.1:6379> getset test hehe
"ceshi"
127.0.0.1:6379>
4)設定指定位置的字元
setrange key offeset value offeset:表示指定位置
127.0.0.1:6379> set tes pest
ok127.0.0.1:6379> setrange tes 0 b
(integer) 4
127.0.0.1:6379> get tes
"best"
127.0.0.1:6379>
5)獲取部分字串
getrange key start end [start,end]包左也包右
127.0.0.1:6379> get tes
"be1t"
127.0.0.1:6379> getrange tes 1 2
"e1"
127.0.0.1:6379>
6)返回當前鍵的資料結構
127.0.0.1:6379> type tes
string
7)每種資料結構都有至少兩種以上的編碼,redis會根據當前的值以及長度決定使用哪種內部編碼
object encoding key 查詢內部編碼
127.0.0.1:6379> object encoding tes
"raw"
3、共享session
分布式的web服務將使用者的資訊如果儲存在各伺服器中,出於負載均衡的考慮,分布式服務會將使用者的訪問分發到不同的伺服器上,使用者可能重新整理一次就需要重新登入,為了解決這個問題,可以將使用者的session進行統一管理,儲存到redis,每次使用者重新整理或者查詢登入資訊直接從redis獲取即可。
4、限速
為了安全考慮入,如每次登入時讓使用者輸入手機驗證碼,但是不能頻繁呼叫簡訊閘道器,會限制使用者每分鐘獲取驗證碼評率;如下偽**
phonenum="151******xx";
key = "shortmsg:limit:" + phonenum;
i***ists = redis.set(key,1,"ex 60","nx");
if(i***ists != null || redis.incr(key) <= 5) else{
//限速
redis資料結構 字串
字串在redis中是非常常見的資料結構,儲存的key必須是字串,value也可以是字串。redis並沒有直接採用c語言中的字串表示,而是自己構建了一種資料結構sds dynamic string 簡單動態字串 sds是redis的預設字串表示。sds結構 sds示例 c語言使用n 1的字元陣列表示長...
Redis 資料結構 簡單動態字串
redis 是基於 c 語言的記憶體資料庫,但是 redis 中並沒有使用 c 語言的字串 實質是 以空格結尾的字元陣列 作為預設的字串,而是自己構建了一種名為簡單動態字串 dynamic string 的抽象資料結構,將其用作預設的字串表示。通常而言,sds 在 redis 中被用於 1.預設的字...
資料結構 字串
1 字串 include string.h include stdio.h include stdlib.h include math.h include time.h define ok 1 define error 0 define true 1 define false 0 define ma...