1、五種數據類型
1.Redis字符串String
String 是最簡單的類型,你能夠理解成與 Memcached 是如出一轍的類型,一個 key 對應一個value,其上支持的操做與 Memcached 的操做相似。但它的功能更豐富。string 類型是二進制安全的。意思是 redis 的 string 能夠包含任何數據.
①.set設置指定的key的值css
127.0.0.1:6379> set name mz
OK
127.0.0.1:6379>
②.get獲取指定的key的值mysql
127.0.0.1:6379> get name
"mz"
127.0.0.1:6379>
若是key不存在,返回nilweb
127.0.0.1:6379> get col
(nil)
127.0.0.1:6379>
③.incr給指定的key值加一,返回一個加一以後的結果。redis
127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> incr num
(integer) 11
127.0.0.1:6379>
④.incrby將 key 所儲存的值加上給定的增量值sql
127.0.0.1:6379> incrby num 10
(integer) 21
127.0.0.1:6379>
⑤.decr將key 中儲存的數字值減一。數據庫
127.0.0.1:6379> decr num
(integer) 20
127.0.0.1:6379>
⑥.decrby將 key 所儲存的值減去給定的增量值安全
127.0.0.1:6379> decrby num 5
(integer) 15
27.0.0.1:6379>
⑦.SETBIT key offset valueruby
127.0.0.1:6379> setbit tom 100 1
(integer) 0
127.0.0.1:6379>
⑧.getset key value
將給定 key 的值設爲 value ,並返回 key 的舊值(old value)。app
127.0.0.1:6379> getset num 0
"15"
127.0.0.1:6379> get num
"0"
127.0.0.1:6379>
思考:getset和incr結合有什麼做用呢?
若是要設計一個復位的計數器,該如何使用呢?
若是某一個進程發生時,就會調用incr,當該進程結束時,完成get myCount 和set myCount 0.dom
127.0.0.1:6379> incr myCount
(integer) 1
127.0.0.1:6379> incr myCount
(integer) 2
127.0.0.1:6379> getset myCount 0
"2"
127.0.0.1:6379> get 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:6379> hmset cat name "tom" color "red" age "12"
OK
127.0.0.1:6379>
②.hget key field
獲取哈希表中key的字段值
127.0.0.1:6379> hget 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:6379> hkeys cat
1) "name"
2) "color"
3) "age"
127.0.0.1:6379>
⑤.hvals key 獲取哈希表中全部值
127.0.0.1:6379> hvals cat
1) "tom"
2) "red"
3) "12"
127.0.0.1:6379>
3.redis列表(list)
①.lpush key value
將一個或多個值插入到列表頭部
key後面的value能夠是多個
127.0.0.1:6379> lpush username xm
(integer) 1
127.0.0.1:6379> lpush username xg
(integer) 2
127.0.0.1:6379> lpush username zg
(integer) 3
127.0.0.1:6379> lpush 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:6379> lpop username
"we"
127.0.0.1:6379> lrange username 0 10
1) "we"
2) "zg"
3) "xg"
4) "xm"
127.0.0.1:6379>
④.經過索引獲取
獲取指定索引處的值,若是該索引處沒有值,則返回nil
127.0.0.1:6379> lindex username 5
(nil)
127.0.0.1:6379> lindex username 4
"xm"
127.0.0.1:6379>
⑤.rpop key
移除列表的最後一個元素,返回值爲移除的元素。
127.0.0.1:6379> rpop username
"xm"
127.0.0.1:6379> lrange 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:6379> lpush username weh
(integer) 5
127.0.0.1:6379> sadd animal dog
(integer) 1
127.0.0.1:6379> sadd animal pig
(integer) 1
127.0.0.1:6379> sadd animal cat
(integer) 1
127.0.0.1:6379> sadd animal cat
(integer) 0
127.0.0.1:6379> smembers animal
1) "pig"
2) "dog"
3) "cat"
127.0.0.1:6379>
發現什麼了嗎?和Java中的set相似,無序不能重複
②.scard key 獲取集合的成員數
127.0.0.1:6379> scard 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:6379> spop animal
"dog"
127.0.0.1:6379> smembers animal
1) "cat"
2) "pig"
3) "sheep"
4) "tiger"
127.0.0.1:6379>
⑤.SISMEMBER key member
判斷 member 元素是不是集合 key 的成員
127.0.0.1:6379> sismember animal cat
(integer) 1
127.0.0.1:6379> sismember animal jj
(integer) 0
127.0.0.1:6379>
是返回1,不然,返回0
⑥.sinter key1 key2
求集合中的交集
127.0.0.1:6379> sadd dog a b c d f g h
(integer) 7
127.0.0.1:6379> sadd pig a b c d m l o
(integer) 7
127.0.0.1:6379> sinter dog pig
1) "d"
2) "b"
3) "a"
4) "c"
127.0.0.1:6379>
⑦.sinterstore newkey key1 key2
返回集合中的交集,並存放到新的集合中
127.0.0.1:6379> sinterstore my dog pig
(integer) 4
127.0.0.1:6379> smembers 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:6379> zadd myaset 1 one
(integer) 1
127.0.0.1:6379> zadd myaset 2 two
(integer) 1
127.0.0.1:6379> zadd myaset 5 three
(integer) 1
127.0.0.1:6379> zadd myaset 6 three
(integer) 0
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>
咱們能夠看到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:6379> zrange myaset 0 6 withscores
1) "two"
2) "2"
3) "three"
4) "6"
127.0.0.1:6379> zincrby myaset 3 three
"9"
127.0.0.1:6379>
three由3增長到了9
④.zrank
返回名稱爲 key 的 zset 中 member 元素的排名(按 score 從小到大排序)即下標
127.0.0.1:6379> zrank myaset two
(integer) 0
127.0.0.1:6379> zrank myaset three
(integer) 1
127.0.0.1:6379>
注意:返回的是索引,不是score
⑤. zrevrank
返回名稱爲 key 的 zset 中 member 元素的排名(按 score 從大到小排序)即下標
127.0.0.1:6379> zrevrange myaset 0 10 withscores
1) "three"
2) "9"
3) "two"
4) "2"
127.0.0.1:6379>
⑥.zcount
返回集合中 score 在給定區間的數量
127.0.0.1:6379> zcount myaset 1 10
(integer) 2
127.0.0.1:6379>
應用:
搜索商品時按照價格排序
二.鍵值命令
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:6379> keys w*
1) "wan"
2) "weh"
127.0.0.1:6379>
3.exists key
是否存在該鍵
4.del key
刪除指定的鍵
127.0.0.1:6379> exists wan
(integer) 1
127.0.0.1:6379> del wan
(integer) 1
127.0.0.1:6379> exists wan
(integer) 0
127.0.0.1:6379>
5.expire
設置過時時間(單位:秒)
127.0.0.1:6379> expire debt 15
(integer) 1
127.0.0.1:6379> ttl debt
(integer) 9
127.0.0.1:6379> ttl debt
(integer) 2
127.0.0.1:6379> ttl debt
(integer) -2
127.0.0.1:6379>
設置debt這個key的過時時間是15秒,而後咱們不斷的用ttl 來獲取這個
key 的有效時長,直至爲-2 說明此值已過時
6.move
將當前數據庫中的 key 轉移到其它數據庫中
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set bus 1
OK
127.0.0.1:6379> move bus 2
(integer) 1
127.0.0.1:6379> select 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:6379> randomkey
"s"
127.0.0.1:6379> randomkey
"myCount"
127.0.0.1:6379> randomkey
"dog"
127.0.0.1:6379>
9.rename
重命名key
127.0.0.1:6379> rename s dg
OK
127.0.0.1:6379>
3、服務相關
1.ping
測試鏈接是否成功
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
2.quit
退出
3.dbsize
返回數據庫中的key的數目
127.0.0.1:6379> dbsize
integer) 26
127.0.0.1:6379>
4.flushdb刪除當前庫的全部key5.flushall刪除全部數據庫的key6.select 庫的索引redis有16個數據庫,默認都存在0號庫