1. 程式人生 > >redis資料型別及基本操作

redis資料型別及基本操作

Redis支援五種資料型別:string(字串),hash(雜湊),list(列表),set(集合)及zset(sorted set:有序集合)

一、string型別及基本操作

string 是 redis 最基本的型別,最大上限是1G 位元組。你可以理解成與 Memcached 一模一樣的型別,一個 key 對應一個 value。

string 型別是二進位制安全的。意思是 redis 的 string 可以包含任何資料。比如jpg圖片或者序列化的物件。

set

設定key 對應的值為string 型別的value。

127.0.0.1:6379> set name wh_k
OK

setnx

設定key 對應的值為string 型別的value。如果key 已經存在,返回0,nx 是not exist 的意思。

127.0.0.1:6379> setnx name wh_kgg
(integer) 0

setex

設定key 對應的值為string 型別的value,並指定此鍵值對應的有效期。
例如我們新增一個whk= good 的鍵值對,並指定它的有效期是10 秒

127.0.0.1:6379> setex whk 10 good
OK
127.0.0.1:6379> get whk
"good"
127.0.0.1:6379> get whk
(nil)

setrange

設定指定key 的value 值的子字串。
例如我們希望替換name某部分字元:

127.0.0.1:6379> set name [email protected]
OK
127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> setrange name 4 126.com
(integer) 11
127.0.0.1:6379> get name
"[email protected]"
其中4是指從下標為4(包含4)的字元開始替換,下標從0開始。

mset

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

127.0.0.1:6379> mset num1 12 num2 34 num3 56
OK

msetnx

一次設定多個key 的值,成功返回ok 表示所有的值都設定了,失敗返回0 表示沒有任何值被設定,但是不會覆蓋已經存在的key。

127.0.0.1:6379> msetnx num3 55 num4 78
(integer) 0
127.0.0.1:6379> get num4
(nil)
127.0.0.1:6379> get num3
"56"

get

獲取key 對應的string 值,如果key 不存在返回nil

127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> get name1
(nil)

getset

設定key 的值,並返回key 的舊值。

127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> getset name [email protected]
"[email protected]"
127.0.0.1:6379> get name
"[email protected]"

getrange

獲取指定key 的value 值的子字串,左下標從0開始,右下標從-1開始,當下標超出字串長度時,將預設為是同方向的最大下標。

127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> getrange name 0 4
"[email protected]"
127.0.0.1:6379> getrange name -1 -5
""
127.0.0.1:6379> getrange name  -5 -1
"q.com"

mget

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

127.0.0.1:6379> mget num1 num2 num3 num4 num5
1) "12"
2) "34"
3) "56"
4) (nil)
5) (nil)

incr

將 key 中儲存的數字值增一。

127.0.0.1:6379> get age
"10"
127.0.0.1:6379> incr age
(integer) 11
127.0.0.1:6379> get age
"11"

ncrby

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

127.0.0.1:6379> get age
"11"
127.0.0.1:6379> incrby age 5
(integer) 16
127.0.0.1:6379> get age
"16"
127.0.0.1:6379> incrby age1 5
(integer) 5
127.0.0.1:6379> get age1
"5"

decr

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

127.0.0.1:6379> get age1
"5"
127.0.0.1:6379> decr age1
(integer) 4
127.0.0.1:6379> get age1
"4"

decrby

同decr,減指定值,可為負值。

127.0.0.1:6379> get age1
"4"
127.0.0.1:6379> decrby age1 4
(integer) 0
127.0.0.1:6379> get age1
"0"
127.0.0.1:6379> decrby age1 4
(integer) -4
127.0.0.1:6379> get age1
"-4"

append

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

127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> append name .china
(integer) 16
127.0.0.1:6379> get name
"[email protected]"

取長度操作strlen

取指定key 的value 值的長度。

127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> strlen name
(integer) 16
127.0.0.1:6379> strlen age1
(integer) 2
127.0.0.1:6379> get age
"16"

二、hashes 型別及基本操作

Redis hash 是一個鍵值(key=>value)對集合。是一個 string 型別的 field 和 value 的對映表,特別適合用於儲存物件。

相較於將物件的每個欄位存成單個string 型別。將一個物件儲存在hash 型別中會佔用更少的記憶體,省記憶體的原因是新建一個hash 物件時開始是zipmap(又稱為small hash)來儲存的。當field 或者value的大小超出一定限制後,Redis 會在內部自動將zipmap 替換成正常的hash 實現. 這個限制可以在配置檔案中設定:
hash-max-zipmap-entries 64 #配置欄位最多64 個
hash-max-zipmap-value 512 #配置value 最大為512 位元組

hset

設定hash field 為指定值,如果key 不存在,則先進行建立

127.0.0.1:6379> hset mytest field1 Hello
(integer) 1
    127.0.0.1:6379> hget mytest field1
"Hello"

hsetnx

設定hash field 為指定值,如果key 不存在,則先建立。如果field 已經存在,返回0。

hmset

同時設定hash 的多個field。

hget

獲取指定的hash field。

hmget

獲取全部指定的hash filed。

127.0.0.1:6379> hmget mytest field1 field2 field3
1) "Hello"
2) "world"
3) "!"

hincrby

指定的hash filed 加上給定值(無hincr操作)。

127.0.0.1:6379> hset mytest field4 10
(integer) 1
127.0.0.1:6379> hget mytest field4
"10"
127.0.0.1:6379> hincr mytest field4
(error) ERR unknown command 'hincr'
127.0.0.1:6379> hincrby mytest field4 8
(integer) 18

hexists

測試指定field 是否存在,存在返回1,不存在返回0。

hlen

返回指定hash 的field 數量。

127.0.0.1:6379> hlen mytest
(integer) 5

hdel

刪除指定hash 的field 。

127.0.0.1:6379> hlen mytest
(integer) 2
127.0.0.1:6379> hdel mytest field3
(integer) 1
127.0.0.1:6379> hlen mytest
(integer) 1

hkeys

返回hash 的所有field。

127.0.0.1:6379> hkeys mytest
1) "txt1"
127.0.0.1:6379> hset mytest field2 2
(integer) 1
127.0.0.1:6379> hkeys mytest
1) "txt1"
2) "field2"

hvals

返回hash 的所有value值。

127.0.0.1:6379> hvals mytest
1) "Hello"
2) "2"

hgetall

獲取某個hash 中全部的filed 及value。

127.0.0.1:6379> hgetall mytest
1) "txt1"
2) "Hello"
3) "field2"
4) "2"

三、lists 型別及操作

list 是一個連結串列結構,簡單的字串列表,按照插入順序排序,連結串列的最大長度是(2的32 次方)。主要功能是push、pop、獲取一個範圍的所有值等等,操作中key 可以理解為連結串列的名字。

lpush

在key 對應list 的頭部新增字串元素(left)

127.0.0.1:6379> lrange testlist 0 0
1) "word"
127.0.0.1:6379> lpush testlist "hello"
(integer) 2
127.0.0.1:6379> lrange testlist 0 1
1) "hello"
2) "word"

rpush

在key 對應list 的尾部新增字串元素(right)

127.0.0.1:6379> lrange testlist 0 1
1) "hello"
2) "word"
127.0.0.1:6379> rpush testlist "!"
(integer) 3
127.0.0.1:6379> lrange testlist 0 2
1) "hello"
2) "word"
3) "!"

linsert

在key 對應list 的特定位置之前或之後新增字串元素

127.0.0.1:6379> linsert testlist before "word" "beautiful"
(integer) 4
127.0.0.1:6379> lrange testlist 0 3
1) "hello"
2) "beautiful"
3) "word"
4) "!"

lset

設定list 中指定下標的元素值(下標從0 開始)

127.0.0.1:6379> lrange testlist 0 3
1) "hello"
2) "beautiful"
3) "word"
4) "!"
127.0.0.1:6379> lset testlist 0 "Say"
OK
127.0.0.1:6379> lrange testlist 0 4
1) "Say"
2) "beautiful"
3) "word"
4) "!"

lrem

從key 對應list 中刪除count 個和value 相同的元素。
count>0 時,按從頭到尾的順序刪除;count<0 時,按從尾到頭的順序刪除;count<0 時,按從尾到頭的順序刪除。

127.0.0.1:6379> lrange testlist 0 6
1) "2010"
2) "Say"
3) "beautiful"
4) "word"
5) "2010"
6) "2010"
127.0.0.1:6379> lrem testlist 2 "2010"
(integer) 2
127.0.0.1:6379> lrange testlist 0 6
1) "Say"
2) "beautiful"
3) "word"
4) "2010"

ltrim

保留指定key 的值範圍內的資料

127.0.0.1:6379> lrange testlist 0 3
1) "Say"
2) "beautiful"
3) "word"
4) "2010"
127.0.0.1:6379> ltrim testlist 0 2
OK
127.0.0.1:6379> lrange testlist 0 3
1) "Say"
2) "beautiful"
3) "word"

lpop

從list 的頭部刪除元素,並返回刪除元素

127.0.0.1:6379> lrange testlist 0 3
1) "Say"
2) "beautiful"
3) "word"
127.0.0.1:6379> lpop testlist 
"Say"
127.0.0.1:6379> lrange testlist 0 3
1) "beautiful"
2) "word"

rpop

從list 的尾部刪除元素,並返回刪除元素

127.0.0.1:6379> lrange testlist 0 3
1) "beautiful"
2) "word"
127.0.0.1:6379> rpop testlist
"word"
127.0.0.1:6379> lrange testlist 0 3
1) "beautiful"

rpoplpush

從第一個list 的尾部移除元素並新增到第二個list 的頭部,最後返回被移除的元素值,整個操作是原子的.如果第一個list 是空或者不存在返回nil

127.0.0.1:6379> lrange testlist 0 3
1) "beautiful"
127.0.0.1:6379> lrange testlist2 0 1
(empty list or set)
127.0.0.1:6379> rpoplpush testlist testlist2
"beautiful"
127.0.0.1:6379> lrange testlist 0 1
(empty list or set)
127.0.0.1:6379> lrange testlist2 0 1
1) "beautiful"

lindex

返回名稱為key 的list 中index 位置的元素

127.0.0.1:6379> lrange testlist2 0 1
1) "beautiful"
127.0.0.1:6379> index testlist2 1
(error) ERR unknown command 'index'
127.0.0.1:6379> lindex testlist2 1
(nil)
127.0.0.1:6379> lindex testlist2 0
"beautiful"

llen

返回key 對應list 的長度

127.0.0.1:6379> lrange testlist2 0 1
1) "beautiful"
127.0.0.1:6379> llen testlist2
(integer) 1

四、sets 型別及操作

set 是集合,和我們數學中的集合概念相似,對集合的操作有新增刪除元素,有對多個集合求交併差等操作,操作中key 理解為集合的名字。集合成員是唯一的,這就意味著集合中不能出現重複的資料。set 元素最大可以包含(2 的32 次方)個元素。

sadd

向set 中新增元素

127.0.0.1:6379> sadd testset 'Hello'
(integer) 1
127.0.0.1:6379> sadd testset 'everybody'
(integer) 1
127.0.0.1:6379> smembers testset
1) "Hello"
2) "everybody"

srem

刪除set 中的元素member

127.0.0.1:6379> smembers testset
1) "Hello"
2) "everybody"
127.0.0.1:6379> srem testset 'Hello'
(integer) 1
127.0.0.1:6379> smembers testset
1) "everybody"

spop

隨機刪除set 中一個元素

127.0.0.1:6379> smembers testset
1) "is"
2) "OK"
3) "everybody"
127.0.0.1:6379> spop testset
"is"
127.0.0.1:6379> smembers testset
1) "OK"
2) "everybody"

sdiff

返回與第一個key 的差集

127.0.0.1:6379> smembers testset
1) "OK"
2) "everybody"
127.0.0.1:6379> sadd testset1 'OK'
(integer) 1
127.0.0.1:6379> sadd testset1 '!!'
(integer) 1
127.0.0.1:6379> smembers testset1
1) "!!"
2) "OK"
127.0.0.1:6379> sdiff testset testset1
1) "everybody"
127.0.0.1:6379> sdiff testset1 testset
1) "!!"

sdiffstore

返回與第一個key 的差集,並將結果存為另一個key

127.0.0.1:6379> sdiff testset1 testset
1) "!!"
127.0.0.1:6379> sdiffstore testset2 testset1 testset
(integer) 1
127.0.0.1:6379> smembers testset2
1) "!!"

sinter

返回所有給定key 的交集

127.0.0.1:6379> smembers testset
1) "OK"
2) "everybody"
127.0.0.1:6379> smembers testset1
1) "!!"
2) "OK"
127.0.0.1:6379> sinter testset testset1 
1) "OK"
127.0.0.1:6379> sdiff testset testset1
1) "everybody"

sinterstore

返回所有交集,並將結果存為另一個key

127.0.0.1:6379> sinter testset testset1 
1) "OK"
127.0.0.1:6379> sdiff testset testset1
1) "everybody"
127.0.0.1:6379> sinterstore testset3 testset testset1
(integer) 1
127.0.0.1:6379> smembers testset3
1) "OK"

sunion

返回所有的並集

127.0.0.1:6379> smembers testset3
1) "OK"
127.0.0.1:6379> smembers testset2
1) "!!"
127.0.0.1:6379> sunion testset3 testset2
1) "!!"
2) "OK"

sunionstore

返回所有並集,並將結果存為另一個key

127.0.0.1:6379> sunion testset3 testset2
1) "!!"
2) "OK"
127.0.0.1:6379> sunionstore testset4 testset3 testset2
(integer) 2
127.0.0.1:6379> smembers testset4
1) "!!"
2) "OK"

smove

從第一個對應的set 中移除member 並新增到第二個對應set 中

127.0.0.1:6379> smembers testset1
1) "!!"
2) "OK"
127.0.0.1:6379> smembers testset2
1) "!!"
127.0.0.1:6379> smove testset1 testset2 "!!"
(integer) 1
127.0.0.1:6379> smembers testset1
1) "OK"
127.0.0.1:6379> smembers testset2
1) "!!"

scard

返回set 的元素個數

127.0.0.1:6379> smembers testset2
1) "!!"
127.0.0.1:6379> scard testset2
(integer) 1

sismember

測試member 是否是set 的元素

127.0.0.1:6379> smembers testset1
1) "OK"
127.0.0.1:6379> sismember testset1 OK
(integer) 1
127.0.0.1:6379> sismember testset1 ok
(integer) 0
127.0.0.1:6379> sismember testset1 "OK"
(integer) 1
127.0.0.1:6379> sismember testset1 'OK'
(integer) 1

srandmember

隨機返回set 的一個元素,但是不刪除元素

127.0.0.1:6379> smembers testset1
1) "OK"
2) "!"
3) "Everybody"
127.0.0.1:6379> srandmember testset1
"!"
127.0.0.1:6379> smembers testset1
1) "OK"
2) "!"
3) "Everybody"

五、sorted sets (有序集合)型別及操作

有序集合是集合的升級版,不同的是每個元素都會關聯一個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數(score)卻可以重複。

zadd

向zset 中新增元素member,score 用於排序。如果該元素已經存在,則根據score 更新該元素的順序。

127.0.0.1:6379> zadd testzset  1 'one'
(integer) 1
127.0.0.1:6379> zadd testzset 2 'two'
(integer) 1
127.0.0.1:6379> zadd testzset 3 'two'
(integer) 0
127.0.0.1:6379> zrange testzset 0 2
1) "one"
2) "two"
127.0.0.1:6379> zrange testzset 0 2 withscores
1) "one"
2) "1"
3) "two"
4) "3"

zrem

刪除zset 中的元素member

127.0.0.1:6379> zrange testzset 0 2 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> zrem testzset one
(integer) 1
127.0.0.1:6379> zrange testzset 0 2 withscores
1) "two"
2) "2"
3) "three"
4) "3"

zincrby

如果zset 中已經存在元素member,則增加該元素的score,new_score=old_score+zincrby_score;否則向集合中新增該元素。

127.0.0.1:6379> zrange testzset 0 2 withscores
1) "two"
2) "2"
3) "three"
4) "3"
127.0.0.1:6379> zincrby testzset 5 "two"
"7"
127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "two"
4) "7"
127.0.0.1:6379> zincrby testzset 5 "four"
"5"
127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"

zrank

返回某個元素的排名(按score 從小到大排),即下標

127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"
127.0.0.1:6379> zrank testzset "four"
(integer) 1
127.0.0.1:6379> zrank testzset "two"
(integer) 2
127.0.0.1:6379> zrank testzset "three"
(integer) 0

zrevrank

返回zset中元素的排名(按score 從大到小排序),即下標

127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"
127.0.0.1:6379> zrevrank testzset "four"
(integer) 1
127.0.0.1:6379> zrevrank testzset "two"
(integer) 0
127.0.0.1:6379> zrevrank testzset "three"
(integer) 2

zrevrange

返回(按score 從大到小排序) 從start 到end 的所有元素

127.0.0.1:6379> zrevrange testzset 0 1 withscores
1) "two"
2) "7"
3) "four"
4) "5"

zrangebyscore

返回集合中score 在給定區間的元素

127.0.0.1:6379> zrange testzset 0 2 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"
127.0.0.1:6379> zrangebyscore testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"

zcount

返回集合中score 在給定區間的數量

127.0.0.1:6379> zcount testzset 3 5
(integer) 2

zcard

返回集合中元素個數

127.0.0.1:6379> zcard testzset
(integer) 3
127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"

zscore

返回給定元素對應的score

127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"
127.0.0.1:6379> zscore testzset "three"
"3"

zremrangebyrank

刪除集合中排名在給定區間(下標)的元素

127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"
127.0.0.1:6379> zremrangebyrank testzset 2 2
(integer) 1
127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"

zremrangebyscore

刪除集合中score 在給定區間的元素

127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
127.0.0.1:6379> zremrangebyscore testzset 3 5
(integer) 2
127.0.0.1:6379> zrange testzset 0 5 withscores
(empty list or set)