Redis 資料結構 字串 二

2021-08-21 00:08:09 字數 3688 閱讀 9749

字串型別是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...