redis使用小結

本文轉自:https://mp.weixin.qq.com/s/dP2ctK2FDVgCVwEsyqZPhg

Redis 簡介

Redis 是徹底開源免費的,遵照 BSD 協議,是一個高性能的 key - value 數據庫java

Redis 與 其餘 key - value 緩存產品有如下三個特點:redis

  • Redis 支持數據持久化,能夠將內存中的數據保存在磁盤中,重啓的時候能夠再次加載進行使用。數據庫

  • Redis 不單單支持簡單的 key - value 類型的數據,同時還提供 list,set,zset,hash 等數據結構的存儲編程

  • Redis 支持數據的備份,即 master - slave 模式的數據備份緩存

Redis 優點

  • 性能極高 – Redis 讀的速度是 110000 次 /s, 寫的速度是 81000 次 /s 。安全

  • 豐富的數據類型 - Redis 支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操做。數據結構

  • 原子性 - Redis 的全部操做都是原子性的,意思就是要麼成功執行要麼失敗徹底不執行。單個操做是原子性的。多個操做也支持事務,即原子性,經過 MULTI 和 EXEC 指令包起來。編程語言

  • 其餘特性 - Redis 還支持 publish/subscribe 通知,key 過時等特性。性能

Redis 數據類型

Redis 支持 5 中數據類型:string(字符串),hash(哈希),list(列表),set(集合),zset(sorted set:有序集合)。網站

string string 是 redis 最基本的數據類型。一個 key 對應一個 value。string 類型的值最大能存儲 512 MB

      string 是二進制安全的。也就是說 redis 的 string 能夠包含任何數據。好比 jpg 圖片或者序列化的對象。

 

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"

 

hash:Redis hash 是一個鍵值對(key - value)集合。

Redis hash 是一個 string 類型的 key 和 value 的映射表,hash 特別適合用於存儲對象。

理解:能夠將 hash 當作一個 key - value 的集合。也能夠將其想成一個 hash 對應着多個 string。

與 string 區別:string 是 一個 key - value 鍵值對,而 hash 是多個 key - value 鍵值對。也就是key:object   object裏面封裝:多個鍵值對

// hash-key 能夠當作是一個鍵值對集合的名字,在這裏分別爲其添加了 sub-key1 : value一、sub-key2 : value二、sub-key3 : value3 這三個鍵值對
127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 1
127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-key sub-key3 value3
(integer) 1
// 獲取 hash-key 這個 hash 裏面的全部鍵值對
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"
5) "sub-key3"
6) "value3"
// 刪除 hash-key 這個 hash 裏面的 sub-key2 鍵值對
127.0.0.1:6379> hdel hash-key sub-key2
(integer) 1
127.0.0.1:6379> hget hash-key sub-key2
(nil)
127.0.0.1:6379> hget hash-key sub-key1
"value1"
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key3"
4) "value3"

list:Redis 列表是簡單的字符串列表,按照插入順序排序。咱們能夠網列表的左邊或者右邊添加元素。

咱們能夠看出 list 就是一個簡單的字符串集合,和 Java 中的 list 相差不大,區別就是這裏的 list 存放的是字符串。list 內的元素是可重複的。

 

127.0.0.1:6379> rpush list-key v1
(integer) 1
127.0.0.1:6379> rpush list-key v2
(integer) 2
127.0.0.1:6379> rpush list-key v1
(integer) 3
127.0.0.1:6379> lrange list-key 0 -1
1) "v1"
2) "v2"
3) "v1"
127.0.0.1:6379> lindex list-key 1
"v2"
127.0.0.1:6379> lpop list
(nil)
127.0.0.1:6379> lpop list-key
"v1"
127.0.0.1:6379> lrange list-key 0 -1
1) "v2"
2) "v1"

set:redis 的 set 是字符串類型的無序集合。集合是經過哈希表實現的,所以添加、刪除、查找的複雜度都是 O(1)。

redis 的 set 與 java 中的 set 仍是有點區別的。redis 的 set 是一個 key 對應着 多個字符串類型的 value,也是一個字符串類型的集合,可是和 redis 的 list 不一樣的是 set 中的字符串集合元素不能重複,可是 list 能夠。

127.0.0.1:6379> sadd k1 v1
(integer) 1
127.0.0.1:6379> sadd k1 v2
(integer) 1
127.0.0.1:6379> sadd k1 v3
(integer) 1
127.0.0.1:6379> sadd k1 v1
(integer) 0
127.0.0.1:6379> smembers k1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379>
127.0.0.1:6379> sismember k1 k4
(integer) 0
127.0.0.1:6379> sismember k1 v1
(integer) 1
127.0.0.1:6379> srem k1 v2
(integer) 1
127.0.0.1:6379> srem k1 v2
(integer) 0
127.0.0.1:6379> smembers k1
1) "v3"
2) "v1"

Zset:redis zset 和 set 同樣都是 字符串類型元素的集合,而且集合內的元素不能重複。

不一樣的是 zset 每一個元素都會關聯一個 double 類型的分數。redis 經過分數來爲集合中的成員進行從小到大的排序。

zset 的元素是惟一的,可是分數(score)卻能夠重複。

zset 是按照 分輸的大小來排序的。

127.0.0.1:6379> zadd zset-key 728 member1
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "982"
127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores
1) "member1"
2) "728"
127.0.0.1:6379> zrem zset-key member1
(integer) 1
127.0.0.1:6379> zrem zset-key member1
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"

小總結:

        類型簡介特性場景string(字符串)二進制安全能夠包含任何數據,好比 jpg 圖片或者序列化的對象,一個鍵最大能存儲 521M---Hash(哈希)鍵值對集合,即編程語言中的 Map 類型適合存儲對象,而且能夠像數據庫中 update 同樣只修改某一項屬性值存儲、讀取、修改用戶屬性List(列表)雙向鏈表增刪快,提供了操做某一段元素的 API一、最新消息排行等功能(朋友圈的時間線)

       消息隊列Set(集合)哈希表實現,元素不能重複添加刪除查找的複雜度都是 O(1);爲集合提供了求交集、並集、差集等操做共同好友;利用惟一性,統計訪問網站的全部獨立 ip;好友推薦時,根據 tag 求交集,大於某個閾值就能夠推薦Zset(有序集合)將 Set 中的元素增長一個權重參數 score,元素按 score 有序排列數據插入集合時,已經進行自然排序排行榜;帶權重的消息隊列。

相關文章
相關標籤/搜索