redis系列文章:
redis系列(一)- 安裝與啓動
redis系列(二)- 語法與命令redis
Redis支持的鍵值類型有:String字符類型、map散列類型、list列表類型、set集合類型、sortedset有序集合類型。本篇將對這些鍵值類型在使用上進行總結,並介紹下Keys命令,雖然語法簡單,但因爲數量過多,還須要咱們多多實踐。數據庫
語法:SET key valuejson
127.0.0.1:6379> set test 123
OK複製代碼
語法:GET key數組
127.0.0.1:6379> get test
"123「複製代碼
語法:GETSET key value緩存
127.0.0.1:6379> getset s2 222
"111"
127.0.0.1:6379> get s2
"222"複製代碼
語法:bash
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> mget k1 k3
1) "v1"
2) "v3"複製代碼
語法:DEL keyapp
127.0.0.1:6379> del test
(integer) 1複製代碼
當存儲的字符串是整數時,redis提供一個實用的命令INCR,其做用是讓當前鍵值遞增,並返回遞增後的值。post
語法:INCR keyui
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3複製代碼
語法:INCRBY key incrementspa
127.0.0.1:6379> incrby num 2
(integer) 5
127.0.0.1:6379> incrby num 2
(integer) 7
127.0.0.1:6379> incrby num 2
(integer) 9複製代碼
語法:DECR key
127.0.0.1:6379> decr num
(integer) 9
127.0.0.1:6379> decr num
(integer) 8複製代碼
語法:DECRBY key decrement
127.0.0.1:6379> decr num
(integer) 6
127.0.0.1:6379> decr num
(integer) 5
127.0.0.1:6379> decrby num 3
(integer) 2
127.0.0.1:6379> decrby num 3
(integer) -1複製代碼
append的做用是向鍵值的末尾追加value。若是鍵不存在則將該鍵的值設置爲value,即至關於set key value。返回值是追加後字符串的總長度。
語法:APPEND key value
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str " world!"
(integer) 12
127.0.0.1:6379> get str
"hello world!"複製代碼
STRLEN命令返回鍵值的長度,若是鍵不存在則返回0.
語法:STRLEN key
127.0.0.1:6379> strlen str
(integer) 0
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> strlen str
(integer) 5複製代碼
在redis中,map也叫hash。假設有User對象以JSON序列化的形式存儲到Redis中,User對象有id,username、password、age、name等屬性,存儲的過程以下:
保存、更新: User對象 --> json(string) --> redis 。
若是在業務上只是更新age屬性,其餘的屬性並不作更新我應該怎麼作呢? 若是仍然採用上邊的方法在傳輸、處理時會形成資源浪費,下邊講的hash能夠很好的解決這個問題。
hash叫散列類型,它提供了字段和字段值的映射。字段值只能是字符串類型,
不支持散列類型、集合類型等其餘類型。以下:
HSET命令不區分插入和一時更新操做,當執行插入操做時HSET命令返回1,當執行更新操做時返回0。
語法:HSET key field value
127.0.0.1:6379> hset user username zhangesan
(integer) 1複製代碼
語法:HMSET key field value [field value...]
127.0.0.1:6379> hmset user age 20 username lisi
OK複製代碼
語法:HSETNX key field value
127.0.0.1:6379> hsetnx user age 30
(integer) 0複製代碼
若是user中沒有age字段,則設置age值爲30,不然不作任何操做。
語法:HGET key field
127.0.0.1:6379> hget user username
"zhangesan"複製代碼
語法:HMGET key filed[field...]
127.0.0.1:6379> hmget user age username
1) "20"
2) "lisi"複製代碼
語法:HGETALL key
127.0.0.1:6379> hgetall user
1) "age"
2) "20"
3) "username"
4) "lisi"複製代碼
能夠刪除一個或多個字段,返回值是被刪除的字段個數。
語法:HDEL key field [field...]
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hdel user age name
(integer) 0
127.0.0.1:6379> hdel user age username
(integer) 1複製代碼
語法:HINCRBY key field increment
127.0.0.1:6379> hincrby user age 2 將用戶的年齡加2
(integer) 22
127.0.0.1:6379> hget user age 獲取用戶的年齡
"22「複製代碼
語法:HEXISTS key field
127.0.0.1:6379> hexists user age 查看user中是否有age字段
(integer) 1
127.0.0.1:6379> hexists user name 查看user中是否有name字段
(integer) 0複製代碼
語法:
127.0.0.1:6379> hmset user age 20 name lisi
OK
127.0.0.1:6379> hkeys user
1) "age"
2) "name"
127.0.0.1:6379> hvals user
1) "20"
2) "lisi"複製代碼
語法:HLEN key
127.0.0.1:6379> hlen user
(integer) 2複製代碼
redis的list採用鏈表來存儲,故對於redis的list數據類型的操做,是操做list的兩端數據來操做的。
語法:LPUSH key value [value...]
127.0.0.1:6379> lpush list1 1 2 3
(integer) 3複製代碼
127.0.0.1:6379> rpush list1 4 5 6
(integer) 3複製代碼
LRANGE命令是列表類型最經常使用的命令之一,獲取列表中的某一片斷,將返回start、stop之間的全部元素(包含兩端的元素),索引從0開始。索引能夠是負數,如:「-1」表明最右邊的一個元素。
語法:LRANGE key start stop
127.0.0.1:6379> lrange list1 0 2
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> lrange list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"複製代碼
LPOP命令從列表左邊彈出一個元素,會分兩步完成:
第一步:裝列表左邊的元素從列表中移除
第二步:返回被移除的元素值。
語法:
127.0.0.1:6379> lpop list1
"1"
127.0.0.1:6379> rpop list1
"6"複製代碼
語法:LLEN key
127.0.0.1:6379> llen list1
(integer)4複製代碼
LREM命令會刪除列表中前count個值爲value的元素,返回實際刪除的元素個數。根據count值的不一樣,該命令的執行方式會有所不一樣。
語法:LREM key count value
127.0.0.1:6379> lrem list1 1 4 從左邊開始刪除值爲4的元素
(integer)1複製代碼
語法:LINDEX key index
127.0.0.1:6379> lindex list1 2
"5"複製代碼
語法:LSET key index value
127.0.0.1:6379> lset list1 2 4
OK
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "3"
3) "4"複製代碼
指定範圍和LRANGE一致
語法:LTRIM key start stop
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> ltrim list1 0 1
OK
127.0.0.1:6379> lrange list1 0 -1
1) "4"複製代碼
該命令首先會在列表中從左到右查找值爲pivot的元素,而後根據第二個參數是BEFORE仍是AFTER來決定將value插入到該元素的前面仍是後面。
語法:LINSERT key BEFORE|AFTER pivot value
127.0.0.1:6379> lrange list1 0 -1
1) "4"
127.0.0.1:6379> linsert list1 after 4 5
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "4"
2) "5"複製代碼
語法:RPOPLPUSH source destination
127.0.0.1:6379> rpoplpush list1 list2
"5"
127.0.0.1:6379> lrange list2 0 -1
1)"5"
127.0.0.1:6379> lrange list1 0 -1
1) "4"複製代碼
set(集合)與list(列表)的區別:
語法:SADD key member [member...]
127.0.0.1:6379> sadd set1 a b c
(integer)3
127.0.0.1:6379> sadd set1 a
(integer)0複製代碼
語法:SREM key memeber [member...]
127.0.0.1:6379> srem set1 c d d不在集合中,故只移除c
(integer)1複製代碼
語法:SMEMBERS key
127.0.0.1:6379> smemebers set1
1)"b"
1)"a"複製代碼
語法:SISMEMBER key member
127.0.0.1:6379> sismember set1 a
(integer)1
127.0.0.1:6379> sismember set1 h
(integer)0複製代碼
屬於A而且不屬於B的元素構成的集合。
語法:SDIFF key [key...]
127.0.0.1:6379> sadd setA 1 2 3
(integer)3
127.0.0.1:6379> sadd setB 2 3 4
(integer)3
127.0.0.1:6379> sdiff setA setB
1)"1"
127.0.0.1:6379> sdiff setB setA
1)"4"複製代碼
屬於A且屬於B的元素構成的集合。
語法:SINTER key [key...]
127.0.0.1:6379> sinter setA setB
1)"2"
2)"3"複製代碼
屬於A或者屬於B的元素構成的集合。
語法:SUNION key [key...]
127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"複製代碼
語法:SCARD key
127.0.0.1:6379> smembers setA
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> scard setA
(integer)3複製代碼
注意:因爲集合是無序的,因此SPOP命令會從集合中隨機選擇一個元素彈出。
語法:SPOP key
127.0.0.1:6379> spop setA
"1"複製代碼
Sortedset又叫zset,是有序集合,可排序,可是惟一。Sortedset與set不一樣之處是,會給set中的元素添加一個分數,而後經過這個分數進行排序。
向有序集合中加入一個元素和該元素的分數,若是該元素已經存在則會用新的分數替換原有的分數。返回值是新加入到集合中的元素個數,不包含以前已經存在的元素。
語法:ZADD key score member [score member...]
127.0.0.1:6379> zadd scoreboard 80 zhangesan 89 lisi 94 wangwu
(integer)3
127.0.0.1:6379> zadd scoreboard 97 lisi
(integer)0複製代碼
語法:ZSCORE key member
127.0.0.1:6379> zscore scoreboard lisi
"97"複製代碼
移除有序集key中的一個或多個成員,不存在的成員將被忽略。
當key存在但不是有序集類型時,返回一個錯誤。
語法:ZREM key member [member...]
127.0.0.1:6379> zrem scoreboard lisi
(integer)1複製代碼
語法:ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrange scoreboard 0 2
1)"zhangesan"
2)"wangwu"
3)"lisi"複製代碼
語法:ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrevrange scoredboard 0 2
1)"lisi"
2)"wangwu"
3)"zhangesan"複製代碼
若是須要得到元素的分數,能夠在命令尾部加上WITHSCORES參數
127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES
1) "zhangsan"
2) "80"
3) "wangwu"
4) "94"複製代碼
語法:ZRANK key member
127.0.0.1:6379> zrank scoreboard lisi
(integer)0複製代碼
語法:ZREVRANK key member
127.0.0.1:6379> zrevrank scoreboard zhangsan
(integer)1複製代碼
語法:ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count]
127.0.0.1:6379> zrangebyscore scoreboard 90 97 WITHSCORES
1) "wangwu"
2) "94"
3) "lisi"
4) "97"
127.0.0.1:6379> zrangebyscore scoreboard 70 100 limit 1 2
1) "wangwu"
2) "lisi"複製代碼
返回值是更改後的分數
語法:ZINCRBY key increment member
127.0.0.1:6379> zincrby scoreboard 4 lisi
"101"複製代碼
語法:ZCARD key
127.0.0.1:6379> zcard scoreboard
(integer)3 複製代碼
語法:ZCOUNT key min max
127.0.0.1:6379> zcount scoreboard 80 90
(integer) 1複製代碼
語法:ZREMRANGEBYRANK key start stop
127.0.0.1:6379> zremrangebyrank scoreboard 0 1
(integer)2
127.0.0.1:6379> zrange scoreboard 0 -1
1)"lisi"複製代碼
語法:ZREMRANGEBYSCORE key min max
127.0.0.1:6379> zadd scoreboard 84 zhangsan
(integer)1
127.0.0.1:6379> zremrangebyscore scoreboard 80 100
(integer)1複製代碼
返回知足給定pattern的全部key
127.0.0.1:6379> keys mylist*
1) "mylist"
2) "mylist5"
3) "mylist6"
4) "mylist7"
5) "mylist8"複製代碼
確認一個key是否存在
示例:從結果來看,數據庫中不存在HongWan這個key,可是age這個key是存在的
127.0.0.1:6379> exists HongWan
(integer)0
127.0.0.1:6379> exists age
(integer)1複製代碼
刪除一個key
127.0.0.1:6379> del age
(integer)1
127.0.0.1:6379> exists age
(integer)0複製代碼
重命名key
示例:把age改爲age_new。
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> rename age age_new
OK
127.0.0.1:6379>keys *
1) "age_new"複製代碼
返回值的類型
示例:判斷出值的類型
127.0.0.1:6379> type addr
string
127.0.0.1:6379> type myzset2
set
127.0.0.1:6379> type mylist
list複製代碼
redis在實際使用過程當中更多的是用做緩存,然而緩存的數據通常都是須要設置生存時間的,即:到期後數據銷燬。
EXPIRE key seconds 設置key的生存時間(單位:秒)key在多少秒後會自動刪除
TTL key 設置key剩餘的生存時間
PERSIST key 清除生存時間
PEXPIRE key milliseconds 生存時間設置單位爲:毫秒複製代碼
示例:
127.0.0.1:6379> set test 1 設置test的值爲1
OK
127.0.0.1:6379> get test 獲取test的值
"1"
127.0.0.1:6379> EXPIRE test 5 設置test的生存時間爲5秒
(integer)1
127.0.0.1:6379> TTL test 查看test的生於生成時間還有1秒刪除
(integer)1
127.0.0.1:6379> TTL test
(integer) -2
127.0.0.1:6379> get test 獲取test的值,已經刪除
(nil)複製代碼