Redis-Redis命令&數據類型&使用場景

Redis概述:

redis是速度非常快的非關系型(NoSQL)內存鍵值數據庫,可以存儲鍵和五種不同類型的值之間的映射。
鍵的類型只能為字符串,值支持五種數據類型:字符串,列表,集合,有序集合,散列表
Redis支持很多特性。例如==將內存中的數據持久化到硬盤中,使用復制來擴展讀性能,使用分片來擴展寫性能。==

Redis命令

Redis 命令不區分大小寫,鍵值區分大小寫
Redis命令具有原子性, 不會被其他命令的插入打斷

命令多態:

下文數據類型均有好幾種編碼方式,但是我們redis命令僅是到數據類型,數據類型不同的編碼方式來自行實現,但是對外暴露的接口是一致的。
還有就是數據類型間也有命令多態,如del,expire,type等

與數據類型相關命令

數據類型:

String:

sql操作:
//設置鍵值對,并通過鍵得到值。
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> set math 123
OK
127.0.0.1:6379> get math
"123"
127.0.0.1:6379> set abc 'hh'
OK
127.0.0.1:6379> get babc
(nil)
127.0.0.1:6379> get abc
"hh"
//刪除鍵值對
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> del abc
(integer) 1
//得到對應值的類型
127.0.0.1:6379> type math
string
127.0.0.1:6379> del math
(integer) 1

List:

sql操作:
// 列表中單個值尾插
127.0.0.1:6379> rpush key1 a
(integer) 1
127.0.0.1:6379> rpush key1 b
(integer) 2
//列表多個值尾插
127.0.0.1:6379> rpush key1 c d
(integer) 4
//范圍查詢
127.0.0.1:6379> lrange key1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
//頭刪
127.0.0.1:6379> lpop key1
"a"
//尾刪
127.0.0.1:6379> rpop key1
"d"
127.0.0.1:6379> lrange key1 0 -1
1) "b"
2) "c"
//根據角標得到對應位置值
127.0.0.1:6379> lindex key1 1
"c"

Set:

sql操作:
//單獨添加
127.0.0.1:6379> sadd setkey a
(integer) 1
//批量添加
127.0.0.1:6379> sadd setkey b c
(integer) 2
//批量添加時,只添加不重復元素
127.0.0.1:6379> sadd setkey a d
(integer) 1
//不可添加重復元素
127.0.0.1:6379> sadd setkey a
(integer) 0
//遍歷無序set集合
127.0.0.1:6379> smembers setkey
1) "d"
2) "a"
3) "c"
4) "b"
//判斷元素是否在set集合中
127.0.0.1:6379> sismember setkey e
(integer) 0
127.0.0.1:6379> sismember setkey d
(integer) 1
//刪除所有給定的元素,可以批量刪除
127.0.0.1:6379> srem setkey b
(integer) 1
127.0.0.1:6379> smembers setkey
1) "d"
2) "c"
3) "a"
//隨機取出n個元素,將元素返回給客戶端之后刪除。
127.0.0.1:6379> spop setkey 2
1) "c"
2) "d"
127.0.0.1:6379> smembers setkey
1) "a"

ZSET:

sql操作:
//單個以及批量添加
127.0.0.1:6379> zadd zsetkey 001 m1
(integer) 1
127.0.0.1:6379> zadd zsetkey 002 m2 003 m3
(integer) 2
//不可添加一樣的成員,哪怕分數一樣
127.0.0.1:6379> zadd zsetkey 005 m1
(integer) 0
//范圍查找,只顯示成員
127.0.0.1:6379> zrange zsetkey 0 -1
1) "m2"
2) "m3"
3) "m1"
//成員,分數一起顯示
127.0.0.1:6379> zrange zsetkey 0 -1 withscores
1) "m2"
2) "2"
3) "m3"
4) "3"
5) "m1"
6) "5"
//刪除指定成員,可批量
127.0.0.1:6379> zrem zsetkey m1
(integer) 1
//得到指定分數范圍內的成員個數
127.0.0.1:6379> zcount zsetkey 0 3
(integer) 2
//返回成員在集合中的排名,redis中角標都是從0開始
127.0.0.1:6379> zrank zsetkey m3
(integer) 1
127.0.0.1:6379> zrank zsetkey m2
(integer) 0

Hash

sql操作:
//hset 一次只能插入一個key ,當key相同時,value值會被覆蓋
127.0.0.1:6379> hset hashkey key1 0
(integer) 1
127.0.0.1:6379> hget hashkey key1
"0"
//同key時value也會被覆蓋
127.0.0.1:6379> hset hashkey key1 1
(integer) 0value
//得到指定key的value
127.0.0.1:6379> hget hashkey key1
"1"
127.0.0.1:6379> hmset hashkey key2 2
OK
//多key插入,注意兩個set返回值不一樣
127.0.0.1:6379> hmset hashkey key3 1 key4 3
OK
//得到所有key-value
127.0.0.1:6379> hgetall hashkey
1) "key1"
2) "1"
3) "key2"
4) "2"
5) "key3"
6) "1"
7) "key4"
8) "3"
//得到鍵值對個數。
127.0.0.1:6379> hlen hashkey
(integer) 4

其它命令

排序:

注意,不能對string和hash鍵值對進行排序。當value值不是數字時,需要加alpha 進行排序。

//  列表排序
127.0.0.1:6379> rpush list 4 2 7 1 8 1
(integer) 6
127.0.0.1:6379> sort list
1) "1"
2) "1"
3) "2"
4) "4"
5) "7"
6) "8"
127.0.0.1:6379> sort desc
(empty list or set)
127.0.0.1:6379> sort list desc
1) "8"
2) "7"
3) "4"
4) "2"
5) "1"
6) "1"

//有序集合排序
127.0.0.1:6379> sadd setkey key1 2 key2 3 key3 2
(integer) 5
127.0.0.1:6379> sort setkey alpha
1) "2"
2) "3"
3) "key1"
4) "key2"
5) "key3"

使用場景

計數器/排行榜:

可以對String進行自增自減運算,從而實現計數器功能。
Redis這種內存型數據庫的讀寫性能非常高,很適合存儲頻繁讀寫的計數量。
redis在內存中對數字進行遞增或者遞減操作。set,zset也使得我們在執行這些操作的時候變得非常簡單。當我們要從排序集合中獲取排名前十的用戶,并且我們是使用zset集合的desc操作,我們只需要這樣執行:

zrange user_scores 0 10 withscores 

緩存:

將熱點數據放到內存,設置內存的最大使用量以及淘汰策略來保證緩存的命中率。

查找表:

如DNS(域名解析)記錄就很適合進行存儲。
查找表和緩存類似,也是利用了Redis快速查找的特性。但是查找表的內容不能失效,而緩存的內容是可以失效,因為緩存是不作為可靠的數據來源。

消息隊列:

list是一個雙向鏈表,可以使用rpush和lpop來寫入和讀取數據從而實現隊列。

會話緩存:

redis緩存提供持久化,當維護一個不是嚴格要求一致性的緩存時,可以防止緩存數據丟失。
在分布式的應用場景下具有多個應用服務器,可以使用redis來統一存儲應用服務器的會話信息。
當應用服務器不再存儲用戶的會話信息,也就不再具有狀態,用戶就可以請求任意的應用服務器。

分布式鎖實現

在分布式的場景下,無法使用單機環境下的鎖多個節點上的進程進行同步,可以使用redis自帶的setnx命令實現分布式鎖,還可以使用官方提供的RedLock分布式鎖實現。

其它:

set可以實現交集,并集等操作,從而實現共同好友等功能。
zset可以實現有序性操作,從而實現排行榜等操作。

==感覺文章不錯的同學麻煩動動小手點點關注訂閱唄,您的肯定是對我持續更新最大的支持!==

</article>

0人點贊

java

作者:Fly_Fly_Zhang
鏈接:http://www.lxweimin.com/p/f01d56c3c2af
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。