Redis --學習2

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>

以下的就不列舉例子了,實際應用中去官網查手冊。

相關文章
相關標籤/搜索