Redis 5種數據類型使用場景java
#1.Stringredis
1.1 應用場景app
String是最經常使用的一種數據類型,例如:key/value存儲,value能夠是String、數字等。code
1.2 經常使用操做排序
1>set賦值,用法:set key value索引
2>get賦值,用法:get keyrem
3>incr遞增數字,僅僅對key的value爲數字類型時使用,至關於java的自增,如i++,用法:incr key字符串
#設置key:add的值爲6,incr實行該key的value自增 redis 127.0.0.1:6379> set add 6 OK redis 127.0.0.1:6379> incr add (integer) 7 redis 127.0.0.1:6379> incr add (integer) 8 redis 127.0.0.1:6379> #若是key的value爲String類型,出現以下現象 redis 127.0.0.1:6379> set addString 'lxl' OK redis 127.0.0.1:6379> incr addString (error) ERR value is not an integer or out of range redis 127.0.0.1:6379> #很明顯報錯了,報錯信息:vlaue不是一個integer類型
4>incrby 增長指定的數字,僅僅對數字類型的key有用,至關於java的i+=3,用法:incrby key increment,表示key自增increment,increment的值能夠爲負數,表示減小。get
redis 127.0.0.1:6379> set add 15 OK redis 127.0.0.1:6379> incrby add 3 (integer) 18 redis 127.0.0.1:6379> incrby add -5 (integer) 13 redis 127.0.0.1:6379>
5>decr遞減數字,同incr遞增原理同樣hash
6>decrby減小指定數字,同incrby原理同樣
7>append 向尾部追加值,至關於java中的"hello".append("boy"),用法:append key value
redis 127.0.0.1:6379> set ceshi hello OK redis 127.0.0.1:6379> append ceshi world (integer) 10 redis 127.0.0.1:6379> get ceshi "helloworld" redis 127.0.0.1:6379>
8> strlen 獲取字符串長度,用法:strlen key
redis 127.0.0.1:6379> get ceshi "helloworld" redis 127.0.0.1:6379> strlen ceshi (integer) 10 redis 127.0.0.1:6379>
9>mset 同時設置多個key的值,用法mset key1 value1 [key2 value2 ……]
redis 127.0.0.1:6379> mset name lxl sex 男 age 29 OK redis 127.0.0.1:6379> get name "lxl" redis 127.0.0.1:6379> get sex "? redis 127.0.0.1:6379> get age "29" redis 127.0.0.1:6379>
10>mget 同時獲取多個key的值,用法:mget key1 key2 ……
redis 127.0.0.1:6379> mset name lxl sex 男 age 29 OK redis 127.0.0.1:6379> get name "lxl" redis 127.0.0.1:6379> get sex "? redis 127.0.0.1:6379> get age "29" redis 127.0.0.1:6379> mget name sex age 1) "lxl" 2) "? 3) "29" redis 127.0.0.1:6379>
#2.散列
它至關於java中的hashMap,它的值是一個字典,保存不少key/value對。
2.1應用場景:例如,咱們須要存儲一個用戶的信息,該用戶包含以下信息:name、sex、age等。
redis的hash提供的存儲方案:每一個用戶都設置一個id,做爲key,用戶的全部屬性用一個hashMp存放,hashMap裏面的
每一個屬性做爲key,value爲屬性值。
2.2經常使用命令
1>hset賦值,用法:hset key field(字段) value(值)
redis 127.0.0.1:6379> hset userId name 'lxl' (integer) 0 redis 127.0.0.1:6379>
2>hget取值,用法:hget key field
redis 127.0.0.1:6379> hget userId name "lxl" redis 127.0.0.1:6379>
3>hmset 一次性賦值多個字段,用法hmset key field1 value1 [field2 value2 ……]
redis 127.0.0.1:6379> hmset userId name 'lxl' sex 0 age '29' address 成都 OK redis 127.0.0.1:6379>
4>hmget 一次性取多個字段值,用法hmget key filed1 [field2 ……]
redis 127.0.0.1:6379> hmset userId name 'lxl' sex 0 age '29' address 成都 OK redis 127.0.0.1:6379> hmget userId name age 1) "lxl" 2) "29" redis 127.0.0.1:6379>
5>hgetall 一次性取全部字段的值,用法hgetall key
redis 127.0.0.1:6379> hmset userId name 'lxl' sex 0 age '29' address 成都 OK redis 127.0.0.1:6379> hmget userId name age 1) "lxl" 2) "29" redis 127.0.0.1:6379> hgetall userId 1) "name" 2) "lxl" 3) "sex" 4) "0" 5) "age" 6) "29" 7) "address" 8) "砛xc9都" redis 127.0.0.1:6379>
6>hexists 判斷字段是否存在,1:存在,0:不存在,實際上能夠增長字段,用法:hexists key filed
#很明顯看得出來,userId對應的hashMap中存在sex這個字段 redis 127.0.0.1:6379> hexists userId sex (integer) 1 redis 127.0.0.1:6379>
7>hdel 刪除一個或多個字段,用法:hdel key field [field2……]
#刪除前字段有5個 redis 127.0.0.1:6379> hgetall userId 1) "name" 2) "lxl" 3) "sex" 4) "0" 5) "age" 6) "29" 7) "address" 8) "砛xc9都" 9) "job" 10) "IT" #刪除age這個字段 redis 127.0.0.1:6379> hdel userId age (integer) 1 redis 127.0.0.1:6379> hgetall userId 1) "name" 2) "lxl" 3) "sex" 4) "0" 5) "address" 6) "砛xc9都" 7) "job" 8) "IT" redis 127.0.0.1:6379>
8>hkeys 獲取hash中全部的字段名,用法hkeys key
redis 127.0.0.1:6379> hkeys userId 1) "name" 2) "sex" 3) "address" 4) "job" redis 127.0.0.1:6379>
9>hvals 獲取全部的字段值,用法:hvals key
redis 127.0.0.1:6379> hvals userId 1) "lxl" 2) "0" 3) "砛xc9都" 4) "IT" redis 127.0.0.1:6379>
10>hlen 獲取字段數量,用法:hlen key
redis 127.0.0.1:6379> hvals userId 1) "lxl" 2) "0" 3) "砛xc9都" 4) "IT" redis 127.0.0.1:6379> hlen userId (integer) 4 redis 127.0.0.1:6379>
#3.列表
redis的列表其實就是一個雙向鏈表,它能夠實現遍歷、正向(反向)添加(刪除)數據。
2.1應用場景:能夠實現消息排列等。
2.2經常使用命令
1>lpush 向列表左端添加元素,用法:lpush key value
redis 127.0.0.1:6379> lpush testList ZhangSan (integer) 1 redis 127.0.0.1:6379> lpush testList LiSi (integer) 2 redis 127.0.0.1:6379>
2>rpush 向列表右端添加元素,用法:rpush key value
redis 127.0.0.1:6379> rpush testList WangWu (integer) 3 redis 127.0.0.1:6379> rpush testList ZhaoLiu (integer) 4 redis 127.0.0.1:6379>
3>lrange 獲取列表中某一個片斷的值,用法:lrange key start stop,index從0開始,-1表示最後一個元素。
redis 127.0.0.1:6379> lpush testList ZhangSan (integer) 1 redis 127.0.0.1:6379> lpush testList LiSi (integer) 2 redis 127.0.0.1:6379> rpush testList WangWu (integer) 3 redis 127.0.0.1:6379> rpush testList ZhaoLiu (integer) 4 redis 127.0.0.1:6379> lrange testList 0 -1 1) "LiSi" 2) "ZhangSan" 3) "WangWu" 4) "ZhaoLiu" redis 127.0.0.1:6379> #從返回的結果中能夠發現 #1.從左到右添加元素ZhangSan、LiSi,因此出現1)是ZhangSan、2)是LiSi的狀況; #2.從又到左添加元素WangWu、ZhaoLiu,因此出現3)和4)的狀況
4>lpop,從列表左端彈出元素,用法:lpop key
redis 127.0.0.1:6379> lrange testList 0 -1 1) "LiSi" 2) "ZhangSan" 3) "WangWu" 4) "ZhaoLiu" redis 127.0.0.1:6379> lpop testList "LiSi" redis 127.0.0.1:6379>
5>rpop,從列表右端彈出元素,用法:rpop key
redis 127.0.0.1:6379> lrange testList 0 -1 1) "ZhangSan" 2) "WangWu" 3) "ZhaoLiu" redis 127.0.0.1:6379> rpop testList "ZhaoLiu" redis 127.0.0.1:6379>
6>llen,獲取列表中元素的個數,用法llen key
redis 127.0.0.1:6379> lrange testList 0 -1 1) "ZhangSan" 2) "WangWu" redis 127.0.0.1:6379> llen testList (integer) 2 redis 127.0.0.1:6379>
7>lrem,刪除列表中指定的值,返回值爲成功刪除指定值的個數,用法:lrem key count value,刪除列表中count個value,當count>0時,從左邊開始查找;count<0時,從右邊開始查;count=0時,刪除全部值爲value的元素。
#從右到左,刪除值爲ZhangSan,個數爲2 redis 127.0.0.1:6379> lrange testList 0 -1 1) "jj" 2) "ZhangSan" 3) "hh" 4) "ff" 5) "ZhangSan" 6) "ee" 7) "dd" 8) "cc" 9) "ZhangSan" 10) "WangWu" redis 127.0.0.1:6379> lrem testList -2 ZhangSan (integer) 2 redis 127.0.0.1:6379>
8>lindex,獲取指定索引的元素值,index從0開始,用法:lindex key index
redis 127.0.0.1:6379> lrange testList 0 -1 1) "jj" 2) "ZhangSan" 3) "hh" 4) "ff" 5) "ee" 6) "dd" 7) "cc" 8) "WangWu" redis 127.0.0.1:6379> lindex testList 5 "dd" redis 127.0.0.1:6379>
9>lset,設置指定索引的元素值,用法:lset key index value
#設置第3個值爲hello redis 127.0.0.1:6379> lrange testList 0 -1 1) "jj" 2) "ZhangSan" 3) "hh" 4) "ff" 5) "ee" 6) "dd" 7) "cc" 8) "WangWu" redis 127.0.0.1:6379> lset testList 3 hello OK redis 127.0.0.1:6379> lrange testList 0 -1 1) "jj" 2) "ZhangSan" 3) "hh" 4) "hello" 5) "ee" 6) "dd" 7) "cc" 8) "WangWu" redis 127.0.0.1:6379>
10>ltrim,保留指定片斷,用法:ltrim key start stop
redis 127.0.0.1:6379> lrange testList 0 -1 1) "ff" 2) "ee" 3) "dd" 4) "cc" 5) "bb" 6) "aa" 7) "hh" 8) "hello" redis 127.0.0.1:6379> ltrim testList 2 6 OK redis 127.0.0.1:6379> lrange testList 0 -1 1) "dd" 2) "cc" 3) "bb" 4) "aa" 5) "hh" redis 127.0.0.1:6379>
11>linsert,向列表中插入元素,返回list的長度,用法:linsert key before|after privot value,從左邊開始尋找值爲privot的第一個元素,而後根據條件before|after決定在該元素前面仍是後面插入value。
redis 127.0.0.1:6379> lrange testList 0 -1 1) "dd" 2) "cc" 3) "bb" 4) "aa" 5) "hh" redis 127.0.0.1:6379> linsert testList after bb hello (integer) 6 redis 127.0.0.1:6379> lrange testList 0 -1 1) "dd" 2) "cc" 3) "bb" 4) "hello" 5) "aa" 6) "hh" redis 127.0.0.1:6379>
#4.集合
集合對外提供的功能與list大體相同,不一樣之處是set能夠自動排除重複元素。
4.1應用場景:當咱們須要存儲一個列表數據,又不但願出現重複數據時,能夠採用set。
4.2經常使用命令
1>sadd 添加元素,用法:sadd key value1 [value2……]
redis 127.0.0.1:6379> sadd testSet name sex age (integer) 3 redis 127.0.0.1:6379>
2>smembers,獲取集合中全部的元素,用法:smembers key
redis 127.0.0.1:6379> sadd testSet name sex age (integer) 3 redis 127.0.0.1:6379> smembers testSet 1) "sex" 2) "age" 3) "name" redis 127.0.0.1:6379>
3>srem,刪除集合中元素,用法:srem key value1[value2……]
redis 127.0.0.1:6379> smembers testSet 1) "sex" 2) "age" 3) "name" redis 127.0.0.1:6379> srem testSet age (integer) 1 redis 127.0.0.1:6379> smembers testSet 1) "sex" 2) "name" redis 127.0.0.1:6379>
4>sismember,判斷元素是否在集合中,存在返回1;不存在返回0。用法:sismember key value
redis 127.0.0.1:6379> smembers testSet 1) "sex" 2) "name" redis 127.0.0.1:6379> sismember testSet name (integer) 1 redis 127.0.0.1:6379>
5>sdiff,對集合作差集運算,用法:sdiff key1 key2 [key3……],先計算key1與key2的差集,而後再用結果與key3作差集。
sinter,對集合作交集運算,用法同sdiff。
sunion,對集合作並集運算,用法同sdiff。
6>scard,得到集合中元素的個數,用法:scard key
redis 127.0.0.1:6379> smembers testSet 1) "sex" 2) "name" redis 127.0.0.1:6379> scard testSet (integer) 2 redis 127.0.0.1:6379>
#5.有序集合
與set相比較,sorted set提供了一個優先級(score)的參數來爲成員排序,並且插入是有序的,即自動排序。
5.1應用場景:當咱們須要一個有序且元素不重複的集合列表,就能夠採用sorted set。
5.2經常使用命令
1>zadd,添加元素,用法:zadd key score1 value1
redis 127.0.0.1:6379> zadd testZset 5 zhangsan (integer) 0 redis 127.0.0.1:6379>
2>zscore,獲取元素的分數,用法:zscore key value
redis 127.0.0.1:6379> zadd testZset 5 zhangsan (integer) 0 redis 127.0.0.1:6379> zscore testZset zhangsan "5" redis 127.0.0.1:6379>
以下的就不列舉例子了,實際應用中去官網查手冊。