Redis命令
基本命令
Redis對於鍵的命名並沒有強制的要求,推薦使用“對象類型:對象ID:對象屬性”來命名一個鍵,如user:1:name 來存儲用戶名
獲取所有的鍵名
$ KEYS *
Redis 鍵名通配符規則
? 匹配一個字符
* 匹配任意個字符
[] 匹配中擴號間的任意字符,可以使用”-“表示一個範圍,如a[b-d]
\x 用於轉義字符,如需要匹配“?”,就要使用\?
set命令建立一個num的鍵,並且設置值爲1
$ SET num 1
讀取num的值
$ GET num
判斷一個鍵名 是否存在,存在返回1,不存在返回0 $ EXISTS key
刪除一個或多個鍵,返回值是刪除鍵的個數
$ DEL key [key …]
*DEL命令的參數不支持通配符,可以使用Linux的管道和xargs命令實現刪除所有符合規則的鍵。
如要刪除所有“user:”開始的鍵:
redis-cli KEYS “user:*” | xargs reds-cli DEL
type命令獲取健值的數據類型(string,hash,list,set,zset)
$ TYPE key
向指定的列表類型中增加一個元素,如果鍵不存在就創建它。 $ LPUSH
累加1
$ INCR counter
加上指定整數
$ INCRBY counter 10
累減1
$ DECR counter
減去指定數10
$ DECRBY counter 10
加上指定浮點數
$ INCRBYFLOAT counter 1.5
減去指定浮點數
$ DECRBYFLOAT counter 1.5
向尾部追加值,如果鍵不存在則SET
$ APPEND key value
獲取字符串長度(UTF-8編碼的長度都是3)
$ STRLEN key
同時獲取多個鍵值
$ MGET key [key …]
同時設置多個鍵值
$ MSET key value [key value …]
位操作
獲得一個字符串型鍵指定位置的二進制的值(0或1),超出長度的返回0
$ GETBIT key offset
設置一個字符串型鍵指定位置的二進制的值,返回該位置的舊值,如果當前鍵值的長度小於二進制位的偏移量,Radis會自動分配內存並將健值的當前長度到偏移量的位置都設置爲0
$ SETBIT key offset value
獲得一個字符串型鍵中值是1的二進制個數,通過start,end參數限制統計範圍
$ BITCHOUNT key [start] [end]
BITOP命令對多個字符串類型健進行位運算,並將結果存在destkey參數指定的鍵中。BITOP命令支持的運算操作有and,or,xor和not
$ BITOP operation destkey key [key …]
獲得指定鍵的第一個位置是0或1的位置,類似於indexof
$ BITPOS key 0|1 [start] [end]
散列類型
$ HSET key field value
$ HGET key field
$ HMSET key field value [field value …]
$ HMGET key field [field …]
$ HGETALL key
$ HEXISTS key field 判斷字段是否存在
$ HSETNX key field value 當字段不存在時賦值
$ HINCRBY key field increment
$ HDEL car price
$ HKEYS key 只獲取字段名
$ HVALS key 只獲取字段值
$ HLEN key 獲得字段數量
HSET命令不區分插入和更新操作,當鍵不存在會自動創建,當執行插入操作會返回1,更新插作返回0。
示例:
$ HSET car:1 price 500
$ HSET car:1 color red
$ HSET car:1 name bmw
等價於
$HMSET car:1 price 500 color red name bmws
$ HGET car:1 price
$ HMGET car price name color
$ HGETALL car:1
判斷字段是否存在
$ HEXISTS car:1 price
不存在price就保存
$ HSETNX car:3 price 500
price+2,,要減的時候increment可以是負數
$ HINCRBY car:3 price 2
列表類型
可以存儲一個有序的字符串列表,內部是使用的雙向鏈表實現的。所以向兩端插入數據極快。
向列表左邊增加元素
$ LPUSH key value [value …]
向列表右邊增加元素
$ RPUSH key value [value …]
彈出左邊第一個元素,先移除最左邊第一個元素,再返回該元素值
$ LPOP name
彈出右邊第一個元素,先移除最右邊第一個元素,再返回該元素值
$ RPOP name
獲取列表元素個數
$ LLEN key
獲取列表中的一段,將返回start到stop之間的元素,包含start和stop元素,不會像LPOP一樣刪除該元素
支待負索引,表示從右邊開始計算,-1表示右邊第一個無素,-2表示右邊第二個元素,LRANGE key o -1 可以獲取列表中的所有元素
$ LRANGE key start stop
刪除列表中前count個值爲value的元素,返回實際刪除的個數
$ LREM key count value
返回指定index位置的元素,index從0開始計算
$ LINDEX key index
將索引號爲index位置的元素重新賦值爲value,如果index不存在報(index out of range)
$ LSET key index value
只保留列表指定位置間的數據
$ LTRIM key start end
向列表中插入元素,首先在列表中查找值爲pivot的元素,然後根據第二個參數before|after決定插入位置
$ LINSERT key BEFORE|AFTER pivot value
將元素從一個列表轉到另一個列表
$ RPOPLPUSH source destination
示例:
$ LPUSH mame name1
$ LPUSH name name0
$ RPUSH name name2
$ RPUSH name name3 name4
$ LRANGE name 0 2
$ LRANGE name 0 -1
$ LINDEX name 2
$ LSET name 2 name3-lset
集合類型
對比 集合 列表
有序性 否 是
唯一性 是 否
向集合中添加一個或多個元素,如果key不存在就會自動創建,因爲不能重複,如果元素已經存在就會忽略,返回成功加入的數量,忽略的不計算在內
SADD key member [member…]
從集合中刪除元素
SREM key member [member…]
獲得集合中所有元素
SMEMBERS key
判斷一個元素是否存在於key中,存在返回1,不存在時返回0
SISMEMBER key member
對多個集合執行差集運算,支持多個集合計算,(找不存在的) SDIFF key [key …]
對多個集合執行交集運算,(找相同的)
SINTER key [key…]
對多個集合執行並集運算,(合併) SUNION key [key…]
獲取集合中元素個數 SCARD key
進行集合運算並將結果存入destination
SDIFFSTORE destination key [key …]
SINTERSTORE destination key [key …]
SUNIONSTORE destination key [key …]
隨機獲得集合中的元素
SRANDMEMBER key [count]
*如果有count參數,表示隨機獲得集合中的count個元素
*如果count爲負數,取絕對值,可以大於元素總個數,返回的元素可能會重複
*如果count爲正數,大於集合的元素個數,返回集合全部內容。不會返回重複的元素
從集合中彈出一個元素
SPOP key
有序集合
向有序集合中加入一個元素和該元素的分數。如果存在則替換原分數。返回新增元素個數
ZADD key score member [score member…]
刪除元素
ZREM key member [member…]
獲得元素分數
ZSCORE key member
獲得排名在某個範圍內的元素列表,從小到大排序,[WITHSCORE]表示同時返回元素的分數
ZRANGE key start stop [WITHSCORE]
從大到小排序
ZREVRANG key start stop [WITHSCORE]
獲得指定分數範圍的元素從小到大排序 ZRANGEBYSCORE key min max [WITHSCORE] [LIMIT offset count]
獲得指定分數範圍的元素從大到小排序
ZREVRANGEBYSCORE
增加某個元素的分數
INCRBY key increment member
獲得某個集合中元素數量
ZCARD key
獲得指定分數範圍內的元素個數
ZCOUNT key min max
按照排名範圍刪除元素
ZREMRANGEBYRANK key start stop
按照分數範圍刪除元素
ZREMRANGEBYSCORE key min max
獲得元素排名從小到大
ZRANK key member
獲得元素排名,從大到小
ZREVRANK key member
計算有序集合的交集,並把結果存入destination
ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
*AGGREGATE 是 SUM 時,destination鍵中元素的分數是每個參與計算的集合中該元素分數的合
*MIN|MAX 時,destination鍵中元素的分數是每個參與計算的集合中該元素的最小值或最大值
*WEIGHTS 設置每個集合的權重,每個集合在參與計算時元素的分數會被乘上該集合的權重
計算有序集合的並集
ZUNIONSTORE …
-inf 負無窮
+inf 正無窮
(score 返回結果不包含值爲score的元素
Limit offset count 和sql中的用法基本相同
socre 可以是雙精度浮點數
事務transaction
MULTI SADD … SADD … EXEC
*其中某條語法錯誤,執行後會返回錯誤信息,所有命令都不會執行
*運行錯誤,在執行之前是沒法發現的,如果出現該錯誤,其它命令依然會被執行
*Redis沒有事務回滾的功能
WATCH 命令可以監控一個或多個鍵,一旦其中有一個鍵被修改或修除,之後的事務就不會執行。監控一直持續到EXEC命令。
UNWATCH 命令取消監控
過期時間
設置一個key的過期時間,單位爲秒,到時間後Redis會自動刪除它。返回1表示設置成功,0表示鍵不存在或設置失敗
EXPIRE key seconds
設置時間單位爲毫秒
PEXPIRE key milliseconds
查看一個鍵的過期時間,當鍵不存在時會返回-2,查看永久存在的鍵,返回-1
TTL key
PTTL key
使用Unix時間做爲第二個參數
EXPIREAT key timestamp
PEXPIREAT key timestamp
取消鍵的過期時間設置,成功返回1,失敗返回0
PERSIST key
*當對key重新set值的時候會清除了過期時間,但incr,lpush,hset,zrem等對值操作的命令不會影響過時間。
*使用watch監控一個鍵,如果該鍵過期被清除,不會被認爲該鍵被改變
SORT排序
SORT命令可以對列表類型list,集合類型set和有序集合zset類型鍵進行排序
SORT key
示例:
LPUSH lname1 1 4 6 2 5
SORT lname1
SADD name1 19 35 14 09 35 14 42 46
SORT name1
*對有序集合類型排序的時候會忽略元素的分數,只針對元素自身的值進行排序。
按照字典順序排列非數字元素,desc元素從大到小排序,默認從小到大排序,limit 指定返回範圍
SORT key ALPHA DESC LMIT 1 2
BY參數
by參數的語法爲by 參考鍵,其中參考鍵可以是字符串類型鍵或是散列類型鍵的某個字段(表示爲鍵名→字段名),如果提供了BY參數,SORT命令將不再依據元素自身的值進行排序,而是對每個元素的值替換爲參考鍵中的第一個 “*”並獲取其值,然後依據該值對元素排序。
參考鍵爲散列類型語法
SORT key BY 對象類型:*→字段名 DESC
參考鍵爲字符串類型語法
LPUSH sortbylist 2 1 3
SET id:1 50
SET id:2 100
SET id:3 70
redis> SORT sortbylist by id:* DESC
redis> SORT sortbylist BY id:* DESC GET id:* GET #
GET參數不影響排序,它的作用是使SORT命令的返回結果不再是元素自身的值,GET參數的規則和BY參數一樣,GET也支持字符串類型和散列類型的鍵,並使用*作爲佔位符。一個SORT命令中可以有多個GET參數而BY參數只能一個。GET # 會返回元素本身的值。
store key:將結果保存在key鍵中,保存後鍵的類型爲列表類型,如果存在則覆蓋。返回sort結果的個數
redis> SORT sortbylist BY id:* DESC GET id:* GET # STORE key
任務隊列,BRPOP|BLPOP命令與RPOP命令相比,唯一的區別是當列表中沒有元素是時BRPOP命令會一直阻塞住連接,直到有新元素加入。
BRPOP命令接收兩個參數,第一個是鍵名,第二個是超長時間,單位是秒。當超時返回nil。參數爲0時表示不限制時長。返回鍵名和元素值。
可以設置多個key.會從左至右的優先順序取第一個鍵中的一個元素
BLPOP key1 [key2 …] 0
發佈/訂閱
返回值爲收到該條消息的訂閱者數量
PUBLISH channel message
redis> PUBLISH channel1.1 hi
訂閱頻道,可以同時訂閱多個頻道
SUBSCRIBE channel [channel…]
執行SUBSCRIBE命令後客戶端會進入訂閱狀態,處理些狀態下客戶端不能使用除SUBSCRIBE,UNSUBSCRIBE,PSUBSCRIBE,PUNSUBSCRIBE外的命令
通配符匹配訂閱規則 SUBSCRIBE channel.?*