三、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