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人點贊
作者:Fly_Fly_Zhang
鏈接:http://www.lxweimin.com/p/f01d56c3c2af
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。