1. 程式人生 > >redis針對string操作

redis針對string操作

string是最簡單的型別,你可以理解成與Memcached是一模一樣的型別,一個key對應一個value,其上支援的操作與Memcached的操作類似。但它的功能更豐富。
  
  string型別是二進位制安全的。意思是redis的string可以包含任何資料,比如jpg圖片或者序列化的物件。從內部實現來看其實string可以看作byte陣列,最大上限是1G位元組,下面是string型別的定義:

struct sdshdr {
  long len;
 	long free;
    char buf[];
};

len是buf陣列的長度。
  
  free是陣列中剩餘可用位元組數,由此可以理解為什麼string型別是二進位制安全的了,因為它本質上就是個byte陣列,當然可以包含任何資料了
  
  buf是個char陣列用於存貯實際的字串內容,其實char和c#中的byte是等價的,都是一個位元組。

另外string型別可以被部分命令按int處理.比如incr等命令,如果只用string型別,redis就可以被看作加上持久化特性的memcached。當然redis對string型別的操作比memcached還是多很多的,具體操作方法如下:

del key 刪除鍵值
exists key
(integer) 0 其中0,代表此key不存在;1代表存在。
set key value

setex 設定key對應的值為string型別的value,並指定此鍵值對應的有效期。
setex key 有效期(秒) alue

setrange 替換

 127.0.0.1:6379> get mail
"
[email protected]
" 127.0.0.1:6379> setrange mail 8 163.com (integer) 15 127.0.0.1:6379> get mail "r[email protected]" 其中的8是指從下標為8(包含8)的字元開始替換

mset 一次設定多個key的值,成功返回ok表示所有的值都設定了,失敗返回0表示沒有任何值被設定。
mset key1 value1 key2 value2 key3 value3

get key 獲取指定key的value值

getset 設定key的值,並返回key的舊值。
getset key value(新值)
返回舊值

getrange key 獲取指定key的value值的子字串,類似java substring
getrange key 0 6
符串左面下標是從0開始的
getrange key -1 -8
字串右面下標是從-1開始的

mget 一次獲取多個key的值,如果對應key不存在,則對應返回nil。
mget key1 key2

incr 對key的值做加加操作,並返回新的值。注意incr一個不是int的value會返回錯誤,incr一個不存在的key,則設定key為1

redis 127.0.0.1:6379> set age 20
OK
redis 127.0.0.1:6379> incr age
(integer) 21
redis 127.0.0.1:6379> get age
"21"

incrby 同incr類似,加指定值 ,key不存在時候會設定key,並認為原來的value是 0

 127.0.0.1:6379> get age
    "34"
    127.0.0.1:6379> incrby age 10
    (integer) 44
    127.0.0.1:6379> get age
    "44"

decr對key的值做的是減減操作,decr一個不存在key,則設定key為-1

decrby同decr,減指定值。

append 給指定key的字串值追加value,返回新字串值的長度。

    127.0.0.1:6379> get name
    "ryp"
    127.0.0.1:6379> append name ing
    (integer) 6
    127.0.0.1:6379> get name
    "ryping"

strlen 取指定key的value值的長度。

127.0.0.1:6379> get mail
"[email protected]"
127.0.0.1:6379> strlen mail
(integer) 15