1. 程式人生 > >三、Redis的常見命令及使用

三、Redis的常見命令及使用

對value操作的命令

exists(key) // 確認一個key是否存在
del(key) // 刪除一個key
type(key) // 返回值的型別
keys(pattern) // 返回滿足給定pattern的所有key
randomkey // 隨機返回key空間的一個
keyrename(oldname,newname) // 重新命名key
dbsize // 返回當前資料庫中key的數目
expire // 設定一個key的活動時間(s)
ttl // 獲得一個key的活動時間
select(index) // 按索引查詢
move(key,dbindex) // 移動當前資料庫的key到dbindex資料庫
flushdb // 當前資料庫中的所有key
flushall // 刪除所有資料庫中的所有key

對string操作命令

set(key, value) // 給資料庫中名稱為key的string賦予值value
get(key) // 返回資料庫中名稱位key的string的value
getset(key,value) // 給名稱為key的string賦予上一次的vvalue
mget(key1,key2,...,key N) // 返回庫中多個string的value
setnx(key,value) // 新增string,名稱為key,值為value
setex(key,time,value) // 向庫中新增string,設定過期時間time
mset(key N,value N) // 批量設定多個string的值
msetnx(key N,value N) // 如果所有名稱為key i的string都不存在
incr(key) // 名稱為key的string增1操作
incrby(key,integer) // 名稱為key的string增加integer
decr(key) // 名稱為key的string減1操作
decrby(key,integer) // 名稱為key的string減少integer
append(key,value) // 名稱為key的string的值附加value
substr(key,start,end) // 返回名稱為key的string的value的子串

對List操作的命令

rpush(key,value) // 在名稱為key的list尾新增一個值為value的元素
lpush(key,value) // 在名稱為key的list頭新增一個值為value的元素
llen(key) // 返回名稱為key的list的長度
lrange(key,start,end) // 返回名稱位key的list中的start至end之間的元素
ltrim(key,start,end) // 擷取名稱位key的list
lindex(key,index) // 返回名稱位key的list中的index位置的元素
lset(key,index,value) // 給名稱為key的list中的index位置的元素賦值
lrem(key,count,value) // 刪除count個key的list中值為value的元素
lpop(key) // 返回並刪除名稱為key的list的首元素
rpop(key) // 返回並刪除名稱為key的list的尾元素
bloop(key1,key2,...,key N,timeout) // lpop命令的block版本
brpop(key1,key2,... N,timeout) // rpop的block版本
rpoplpush(srckey,dstkey) // 返回並刪除名稱位srckey的list的尾元素,並將該元素新增到名稱為dstkey的list的頭部

對Set操作的命令

sadd(key,member) // 向名稱為key的set中新增元素member
srem(key,member) // 刪除名稱位key的set中的元素member
spop(key) // 隨機返回並刪除名稱為key的set中的一個元素
smove(srckey,dstkey,menber) // 移到集合元素
scard(key) // 返回名稱為key的set的基數
sismember(key,member) // member是否是名稱為key的set的元素
sinter(key1,key2,..key N) //求交集
sinterstore(dstkey,(keys)) // 求交集並將交集儲存到dstkey的集合
sunion(key1,(keys)) // 求並集
sunionstore(dstkey,(keys)) // 求並集並將並集儲存到dstkey的集合
sdiff(key1,(keys)) // 求差集
sdiffstore(dstkey,(keys)) // 求差集並將差集儲存到dstkey的集合
smembers(key) // 返回名稱為key的set的所有元素
arandmember(key) // 隨機返回名稱位key的set的一個元素

對Hash操作的命令

hset(key,field,value) // 向名稱位key的hash中新增元素field
hget(key,field) // 返回名稱為 key的hash中field對應的value
hmget(key,(fields)) // 返回名稱為key的hash中的field i對應的value
hmset(key,(fields)) // 向名稱位key的hash中新增元素field
hincrby(key,field,integer) // 將名稱位key的hash中的field的value增加integer
hexists(key,field) // 名稱為key的hash中是否存在鍵為field的域
hdel(key,field) // 刪除名稱為key的hash中鍵為field的域
hlen(key) // 返回名稱位key的hash中元素的個數
hkeys(key) // 返回名稱為key的hash中的所有鍵
hvals(key) // 返回名稱位key的hash中所有鍵對應的value
hgetall(key) // 返回名稱為key的hash中所有的鍵(field)及對應的value

 

Redis資料型別

string(字串)

- string是redis最基本的型別,而且string型別是二進位制安全的。意思是redis的string 可以包含任何資料。比如jpg圖片或者序列號的物件

- 從內部實現來看其實string可以看作byte陣列,最大上限是1G位元組

- string型別的值也可以視為integer,從而可以讓"incr"命令族操作,這種情況下,該integer的值限制在64位有符和數

- 在list、set和zset中包含的獨立的元素型別都是string型別

應用場景:string是最常用的一種資料型別,普通的key/value儲存

 

list(雙向連結串列)

- redis的list型別其實就是一個每個子元素都是string型別的雙向連結串列,所有[r]push和[r]pop命令的演算法時間複雜度都是O(1),另外list回記錄連結串列的長度,所以llen操作也是O(1).

- 可以通過push,pop操作從連結串列的頭部或者尾部新增刪除元素。這使得;list既可以用做棧,也可以用作佇列

- list最大長度是2^32-1個元素

應用場景: Redis list應用場景非常多,也是Redis最重要的資料結構之一,比如twitter的關注列表,粉絲列表等都可以用Redia的list結構來實現

 

set(無序集合)

- set就是redis string的無序集合,不允許有重複元素

- set的最大元素是2^32-1

- 對set的操作還有交集、並集、差集等

應用場景:Set對外提供的功能與list類似,當你需要儲存一個列表資料,又不希望出現重複資料時,set是個很好的選擇,並且set提供了判斷某個成員是否在set集合內的介面,這個也是list所不能提供的

 

Sorted set(有序集合)-- zset

- zset是set的一個升級版本,在set的基礎上增加了一個順序熟悉,這一資料在新增修改元素時可以指定,每次指定後set會自動安裝指定值重新調整順序。可以理解位一張表,一列存value,一列存順序,操作中的key理解位zset的名字。

- zset的最大元素是2^32-1

- 對於已經有序的zset,仍然可以使用sort命令,通過指定asc|desc引數對起進行排序。

應用場景: Sorted set的使用場景與set類似,區別不是自動有序的,而sorted set可以通過使用者額外提供一個優先順序(score)的引數來為成員排序,並且是插入有序的,即自動排序,當你需要一個有序的並且不重複的集合列表,那麼可以選擇sorted set資料結構

 

hash(hash表)

- redis Hash型別對資料域和值提供了對映,這一結構很方便表示物件

- 在Hash中可以只儲存有限的幾個"域",而不是將所有的“域”作為key,這可以節省記憶體

應用場景:比如,我們儲存供應商酒店價格的時候可以採取此結構,用酒店編碼作為key,價格資訊作為value