redis經常使用命令手冊大全

1、五種數據類型
1.Redis字符串String
String 是最簡單的類型,你能夠理解成與 Memcached 是如出一轍的類型,一個 key 對應一個value,其上支持的操做與 Memcached 的操做相似。但它的功能更豐富。string 類型是二進制安全的。意思是 redis 的 string 能夠包含任何數據.
①.set設置指定的key的值css

127.0.0.1:6379set name mz
OK
127.0.0.1:6379

②.get獲取指定的key的值mysql

127.0.0.1:6379get name
"mz"
127.0.0.1:6379

若是key不存在,返回nilweb

127.0.0.1:6379get col
(nil)
127.0.0.1:6379

③.incr給指定的key值加一,返回一個加一以後的結果。redis

127.0.0.1:6379set num 10
OK
127.0.0.1:6379incr num
(integer) 11
127.0.0.1:6379

④.incrby將 key 所儲存的值加上給定的增量值sql

127.0.0.1:6379incrby num 10
(integer) 21
127.0.0.1:6379

⑤.decr將key 中儲存的數字值減一。數據庫

127.0.0.1:6379decr num
(integer) 20
127.0.0.1:6379

⑥.decrby將 key 所儲存的值減去給定的增量值安全

127.0.0.1:6379decrby num 5
(integer) 15
27.0.0.1:6379

⑦.SETBIT key offset valueruby

127.0.0.1:6379setbit tom 100 1
(integer) 0
127.0.0.1:6379

⑧.getset key value
將給定 key 的值設爲 value ,並返回 key 的舊值(old value)。app

127.0.0.1:6379getset num 0
"15"
127.0.0.1:6379get num
"0"
127.0.0.1:6379

思考:getset和incr結合有什麼做用呢?
若是要設計一個復位的計數器,該如何使用呢?
若是某一個進程發生時,就會調用incr,當該進程結束時,完成get myCount 和set myCount 0.dom

127.0.0.1:6379incr myCount 
(integer) 1
127.0.0.1:6379incr myCount
(integer) 2
127.0.0.1:6379getset myCount 0
"2"
127.0.0.1:6379get myCount
"0"
127.0.0.1:6379

應用:計數器

計數器是 Redis 的原子性自增操做可實現的最直觀的模式了,它的想法至關簡單:每當某個操做發生時,向Redis 發送一個INCR 命令。
好比在一個 web 應用程序中,若是想知道用戶在一年中天天的點擊量,那麼只要將用戶 ID 以及相關的日期信息做爲鍵,並在每次用戶點擊頁面時,執行一次自增操做便可。
好比用戶名是 peter ,點擊時間是 2012 年 3 月 22 日,那麼執行命令 INCR peter::2012.3.22 。
能夠用如下幾種方式擴展這個簡單的模式:
• 能夠經過組合使用INCR 和EXPIRE ,來達到只在規定的生存時間內進行計數 (counting) 的目的。
• 客戶端能夠經過使用GETSET 命令原子性地獲取計數器的當前值並將計數器清零
• 使用其餘自增/自減操做,好比DECR 和INCRBY ,用戶能夠經過執行不一樣的操做增長或減小計數器的值,好比在遊戲中的記分器就可能用到這些命令。

2.redis哈希(hash)

Redis hash 是一個string類型的field和value的映射表,hash特別適合用於存儲對象。Redis 中每一個 hash 能夠存儲 232 - 1 鍵值對(40多億)。
①.hset key fields
設置哈希表中的key對應的 filed和value

127.0.0.1:6379hmset cat name "tomcolor "redage "12"
OK
127.0.0.1:6379>

②.hget key field
獲取哈希表中key的字段值

  127.0.0.1:6379hget cat name
  "tom"
  127.0.0.1:6379

③.hlen key
獲取哈希表中字段的數量
127.0.0.1:6379> hlen cat
(integer) 3
127.0.0.1:6379>

④.hkeys key
獲取該哈希表中全部的filed

127.0.0.1:6379hkeys cat
1) "name"
2) "color"
3) "age"
127.0.0.1:6379

⑤.hvals key 獲取哈希表中全部值

127.0.0.1:6379hvals cat
1) "tom"
2) "red"
3) "12"
127.0.0.1:6379

3.redis列表(list)
①.lpush key value
將一個或多個值插入到列表頭部
key後面的value能夠是多個

127.0.0.1:6379lpush username xm
(integer) 1
127.0.0.1:6379lpush username xg
(integer) 2
127.0.0.1:6379lpush username zg
(integer) 3
127.0.0.1:6379lpush username we we
(integer) 5
127.0.0.1:6379

②.lrange key start end
取出給定索引範圍的列表值

127.0.0.1:6379> lrange username 0 7
1"we"
2"we"
3"zg"
4"xg"
5"xm"

注:後面那個索引超出也沒有關係,redis會自動處理,會取出在哪一個範圍內的全部值
看完有什麼發現呢?是否是以爲跟棧的特色很類似,先進後出。
③.lpop key
移除並獲取列表中的第一個元素

127.0.0.1:6379lpop username
"we"
127.0.0.1:6379lrange username 0 10
1) "we"
2) "zg"
3) "xg"
4) "xm"
127.0.0.1:6379

④.經過索引獲取
獲取指定索引處的值,若是該索引處沒有值,則返回nil

127.0.0.1:6379lindex username 5
(nil)
127.0.0.1:6379lindex username 4
"xm"
127.0.0.1:6379

⑤.rpop key
移除列表的最後一個元素,返回值爲移除的元素。

127.0.0.1:6379rpop username
"xm"
127.0.0.1:6379lrange username 0 10
1) "we"
2) "zg"
3) "xg"
127.0.0.1:6379

應用:

雙十一秒殺
最新消息的排行

4.redis集合set

Redis 的 Set 是 String 類型的無序集合。集合成員是惟一的,這就意味着集合中不能出現重複的數據。
Redis 中集合是經過哈希表實現的,因此添加,刪除,查找的複雜度都是 O(1)。
集合中最大的成員數爲 232 - 1 (4294967295, 每一個集合可存儲40多億個成員)。

①.lpush key value

127.0.0.1:6379lpush username weh
(integer) 5
127.0.0.1:6379sadd animal dog
(integer) 1
127.0.0.1:6379sadd animal pig
(integer) 1
127.0.0.1:6379sadd animal cat
(integer) 1
 127.0.0.1:6379sadd animal cat
(integer) 0
127.0.0.1:6379smembers animal
1) "pig"
2) "dog"
3) "cat"
127.0.0.1:6379

發現什麼了嗎?和Java中的set相似,無序不能重複

②.scard key 獲取集合的成員數

127.0.0.1:6379scard animal
(integer) 5
127.0.0.1:6379

③.smembers key返回集合中的全部成員

127.0.0.1:6379> smembers animal
1"sheep"
2"pig"
3"dog"
4"cat"
5"tiger"

④.spop key
移除並返回集合中的一個隨機元素

127.0.0.1:6379spop animal
"dog"
127.0.0.1:6379smembers animal
 1) "cat"
 2) "pig"
 3) "sheep"
 4) "tiger"
127.0.0.1:6379

⑤.SISMEMBER key member
判斷 member 元素是不是集合 key 的成員

 127.0.0.1:6379sismember animal cat
 (integer) 1
 127.0.0.1:6379sismember animal jj
 (integer) 0
 127.0.0.1:6379

是返回1,不然,返回0
⑥.sinter key1 key2
求集合中的交集

127.0.0.1:6379sadd dog a b c d f g h
(integer) 7
127.0.0.1:6379sadd pig a b c d m l o
(integer) 7
127.0.0.1:6379sinter dog pig
1) "d"
2) "b"
3) "a"
4) "c"
127.0.0.1:6379

⑦.sinterstore newkey key1 key2
返回集合中的交集,並存放到新的集合中

127.0.0.1:6379sinterstore my dog pig
(integer) 4
127.0.0.1:6379smembers my
1) "a"
2) "c"
3) "b"
4) "d"
127.0.0.1:6379

應用:

每個人的QQ好友都存放到一個集合中,這樣求兩我的共同好友的,只需求出交集便可。

5.redis有序集合sorted set
sorted set 是 set 的一個升級版本,它在 set 的基礎上增長了一個順序屬性,這一屬性在添加修改元素的時候能夠指定,每次指定後,zset 會自動從新按新的值調整順序。能夠理解爲有兩列的 mysql 表,一列存 value,一列存順序。操做中 key 理解爲 zset 的名字。和 set 同樣 sorted set 也是 string 類型元素的集合,不一樣的是每一個元素都會關聯一個 double類型的 score。sorted set 的實現是 skip list 和 hash table 的混合體。
當元素被添加到集合中時,一個元素到 score 的映射被添加到 hash table 中,因此給定一個元素獲取 score 的開銷是 O(1),另外一個 score 到元素的映射被添加到 skip list,並按照 score 排序,因此就能夠有序的獲取集合中的元素。添加,刪除操做開銷都是 O(log(N))和 skip list 的開銷一致,redis 的 skip list 實現用的是雙向鏈表,這樣就能夠逆序從尾部取元素。sorted set 最
常常的使用方式應該是做爲索引來使用.咱們能夠把要排序的字段做爲 score 存儲,對象的 id當元素存儲。

以某一個條件爲權重,進行排序。

①.zadd key scores members
向名稱爲 key 的 zset 中添加元素 member,score 用於排序。若是該元素已經存在,則根據score 更新該元素的順序

127.0.0.1:6379zadd myaset 1 one
(integer) 1
127.0.0.1:6379zadd myaset 2 two
(integer) 1
127.0.0.1:6379zadd myaset 5 three
(integer) 1
127.0.0.1:6379zadd myaset 6 three
(integer) 0
127.0.0.1:6379zrange myaset 0 6 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "6"
127.0.0.1:6379

咱們能夠看到three被設置了兩次,以最後一次爲準

②.zrem
刪除名稱爲 key 的 zset 中的元素 member

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

two被刪除

③. zincrby

若是在名稱爲 key 的 zset 中已經存在元素 member,則該元素的 score 增長 increment;不然向集合中添加該元素,其 score 的值爲 increment

127.0.0.1:6379zrange myaset 0 6 withscores
1) "two"
2) "2"
3) "three"
4) "6"
127.0.0.1:6379zincrby myaset 3 three
"9"
127.0.0.1:6379

three由3增長到了9
④.zrank
返回名稱爲 key 的 zset 中 member 元素的排名(按 score 從小到大排序)即下標

127.0.0.1:6379zrank myaset two
(integer) 0
127.0.0.1:6379zrank myaset three
(integer) 1
127.0.0.1:6379

注意:返回的是索引,不是score

⑤. zrevrank
返回名稱爲 key 的 zset 中 member 元素的排名(按 score 從大到小排序)即下標

127.0.0.1:6379zrevrange myaset 0 10 withscores
1) "three"
2) "9"
3) "two"
4) "2"
127.0.0.1:6379

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

127.0.0.1:6379zcount myaset 1 10
(integer) 2
127.0.0.1:6379

應用:

搜索商品時按照價格排序

二.鍵值命令

  1. keys *
    返回全部key

    127.0.0.1:6379> keys *
     1"color"
     2"a"
     3"mz"
     4"my"
     5"x"
     6"name"
     7"customer"
     8"dog"
     9"username"

    2.keys w*
    取出以w開頭的key

     127.0.0.1:6379keys w*
     1) "wan"
     2) "weh"
     127.0.0.1:6379

    3.exists key
    是否存在該鍵
    4.del key
    刪除指定的鍵

    127.0.0.1:6379exists wan
     (integer) 1
    127.0.0.1:6379del wan
    (integer) 1
    127.0.0.1:6379exists wan
    (integer) 0
    127.0.0.1:6379

    5.expire
    設置過時時間(單位:秒)

    127.0.0.1:6379expire debt 15
    (integer) 1
    127.0.0.1:6379ttl debt
    (integer) 9
    127.0.0.1:6379ttl debt
    (integer) 2
    127.0.0.1:6379ttl debt
    (integer-2
    127.0.0.1:6379

    設置debt這個key的過時時間是15秒,而後咱們不斷的用ttl 來獲取這個
    key 的有效時長,直至爲-2 說明此值已過時
    6.move
    將當前數據庫中的 key 轉移到其它數據庫中

    127.0.0.1:6379select 0
    OK
    127.0.0.1:6379set bus 1
    OK
    127.0.0.1:6379move bus 2
    (integer) 1
    127.0.0.1:6379select 2
    OK
    127.0.0.1:6379[2]get bus
    "1"
    127.0.0.1:6379[2]

    7.移除給定 key 的過時時間

    127.0.0.1:6379[2]expire bus 100
    (integer) 1
    127.0.0.1:6379[2]ttl bus
     (integer) 83
    127.0.0.1:6379[2]persist bus
    (integer) 1
    127.0.0.1:6379[2]ttl bus
    (integer-1
    127.0.0.1:6379[2]

    8.randomkey
    隨即返回一個key

    127.0.0.1:6379randomkey
    "s"
    127.0.0.1:6379randomkey
    "myCount"
    127.0.0.1:6379randomkey
    "dog"
    127.0.0.1:6379

9.rename
重命名key

 127.0.0.1:6379rename s dg
 OK
 127.0.0.1:6379

3、服務相關
1.ping
測試鏈接是否成功

 127.0.0.1:6379ping
  PONG
 127.0.0.1:6379

2.quit
退出

3.dbsize
返回數據庫中的key的數目

 127.0.0.1:6379dbsize
 integer) 26
 127.0.0.1:6379

4.flushdb刪除當前庫的全部key5.flushall刪除全部數據庫的key6.select 庫的索引redis有16個數據庫,默認都存在0號庫

相關文章
相關標籤/搜索