Redis之Redis的數據類型

​1.Redis的數據類型

Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(無序集合)及ZSet(有序集合)redis

2.String(字符串)

2.1Sting介紹

1.string 是 redis 最基本的類型,你能夠理解成與 Memcached 如出一轍的類型,一個 key 對應一個 value, 但最大不能超過512M。sql

2. string 類型是二進制安全的。意思是 redis 的 string 能夠包含任何數據。好比jpg圖片或者序列化的對象。數據庫

2.2String特色

1.字符串類型是redis最基礎的數據結構,首先鍵是字符串類型,並且其餘幾種結構都是在字符串類型基礎上構建的,因此字符串類型能爲其餘四種數據結構的學習尊定基礎json

2.字符串類型實際上能夠是字符串(簡單的字符串、複雜的字符串(xml、json)、數字(整數、浮點數)、二進制(圖片、音頻、視頻).後端

2.3String應用場景

1. 緩存功能字符串最經典的使用場景,redis最爲緩存層,Mysql做爲儲存層,絕大部分請求數據都是redis中獲取,因爲redis具備支撐高併發特性,因此緩存一般能起到加速讀寫和下降 後端壓力的做用。緩存

2.計數器許多運用都會使用redis做爲計數的基礎工具,他能夠實現快速計數、查詢緩存的功能,同時數據能夠一步落地到其餘的數據源。如:視頻播放數,微博的評論數、點贊數、分享數,抖音做品的收藏數,京東商品的銷售量、評價數系統就是使用redis做爲視頻播放數計數的基礎組件。安全

3.共享session集羣模式下,在應用很少的狀況下通常使用容器自帶的session複製功能就能知足,當應用增多相對複雜的系統中,通常都會搭建以Redis等內存數據庫爲中心的session服務,session再也不由容器管理,而是由session服務及內存數據庫管理。 在這種模式下只要保證redis的高可用和擴展性的,每次獲取用戶更新或查詢登陸信息都直接從redis中集中獲取。bash

4.限速:處於安全考慮,每次進行登陸時讓用戶輸入手機驗證碼,爲了短信接口不被頻繁訪問,會限制用戶每分鐘獲取驗證碼的頻率。session

2.4String經常使用命令

01 set :用於給指定的key設置value,支持設置已存在的key
02 get:用於取指定key的value
03 setnx:用於給指定的key設置value,若是key已經存在則返回0。nx表明:not exist
04 setex:用於給指定的key設置value,而且須要指定該key的有效時間。10秒後則返回爲空
05 setrange:給指定的key的值從新覆蓋內容,從4指定位置,替換內容爲ming,最終結果爲xiaoming
06 mset:批量設置key對應的value值,如下設置username、age、sex 分別對應 wangwu、十、1
07 msetnx:批量設置key對應的value值,若是key已存在則返回0。因爲以上設置過,則結果返回0
08 getset:給指定key設置新值,而且返回以前原始數據。
09 getrange:返回一個字符串的子字符串,至關於字符串截取,下標0是起始位置,下標3是結尾位置
10 mget:批量獲取key對應的value,按順序展現
11 incr:將指定key中存儲的數字值增一,必須是數字類型,不然會返回錯誤信息
11 incrby:將指定key中存儲的數字指定增長多少
12 decr:將指定key中存儲的數字值減一,必須是數字類型,不然會返回錯誤信息
13 decrby:將指定key中存儲的數字指定減小多少
14 append:給指定的key中的值追加字符串
15 strlen:返回指定key中value的長度複製代碼

3. Hash(哈希)

3.1Hash介紹

Redis hash 是一個鍵值(key/value)對集合,相似Java裏面的Map<String,Object>,數據結構

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

3.2 Hash的應用場景

哈希結構相對於字符串序列化緩存信息更加直觀,而且在更新操做上更加便捷。

因此存儲一些結構化的數據,好比用戶的暱稱、年齡、性別、積分等,存儲一個用戶信息對象數據以及能夠購物車。

3.3Hash的命令

1.hset key field value設置一個散列,可是在散列中一次只能設置一個屬性,若是要批量設置多個屬性,則須要使用 hmset命令
​
2.hget key field獲取指定key對應的散列中的指定屬性對應的值,也是隻能每次獲取一個屬性對應的值,若是要獲取批量屬性值,則須要使用命令 hmget
​
3.hmset key field value[(field value)...]設置一個散列,例如:hmset key1 name lonely age 18,該追令會生成一個key爲key1的散列,散列中的屬性有兩個 分別是 name以及age,對應的值分別是 lonely和18
​
4.hmget key field...返回指定key對應的散列中指定key-name對應的值,例如上例子的基礎上,調用 hmget key1 name指令的結果就是 從key1對應的散列中,獲取屬性 name對應的值 lonely就是結果了
​
5.hdel key field...刪除指定key對應的散列中指定field...的信息。 例若有key1:{name:lonely,age:25},那麼使用命令hdel key1 age;的結果是刪除了 age屬性信息,即 只剩下 key1:{name:lonely}
​
6.hlen key返回指定key對應的散列中鍵值對的數量
​
7.hexists key field 判斷指定key對應的散列中是否存在field屬性的鍵值對8.hkeys key  返回指定key對應的散列的key集合,例如存在 key1:{name:lonely,age:25},那麼使用hkeys key1命令的結果就是 {name,age}
​
9.hvals key 同hkeys命令相似,不過hvals命令返回的指定key對應散列的value集合
​
9.hgetall key 返回指定key對應的全部鍵值對信息
​
10.hincrby key field increment 將指定key對應的散列中指定屬性對應的value遞增increment個單位,注意只有值是數值類型才能夠生效,返回遞增後的結果複製代碼

4.List(列表)

4.1List介紹

Redis 列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素到列表的頭部(左邊)或者尾部(右邊)。它的底層實際是個鏈表

4.2List的特色

1. 列表類型是用來儲存多個有序的字符串,列表中的每一個字符串成爲元素(element)

2.在redis中,能夠列表兩端插入(pubsh)和彈出(pop),還能夠獲取指定範圍的元素列表、獲取指定索引下表的元素等。

3.列表是一種比較靈活的數據結構,它能夠充當棧和隊列的角色,列表最多可存儲 232 - 1 元素 (4294967295, 每一個列表可存儲40多億)。

4.列表的元素是有序的,這就意味着能夠經過索引下標獲取某個或某個範圍內的元素列表。列表內的元素是能夠重複的。

4.3List的應用場景

1.消息隊列: redis的lpush+brpop命令組合便可實現阻塞隊列,生產者客戶端是用lupsh從列表左側插入元素, 多個消費者客戶端使用brpop命令阻塞時的「搶」列表尾部的元素,多個客戶端保證了消費的負載均衡和高可用性

2.文章列表:每一個用戶都有屬於本身的文章列表,如今須要分頁展現文章列表,此時能夠考慮使用列表,列表不但有序同時支持按照索引範圍獲取元素。

3. 最新列表list類型的lpush命令和lrange命令能實現最新列表的功能,每次經過lpush命令往列表裏插入新的元素,而後經過lrange命令讀取最新的元素列表,如朋友圈的點贊列表、評論列表。

4.4Lsit的經常使用命令

複製代碼
01 lpush :將一個元素或者多個元素新增到列表的頭部,返回當前list中元素數量,採用的是 棧。
02 lrange:返回list集合中指定區間中的元素,0下標表明第一個元素,-1表明最後一個元素。
03 rpush:將一個元素或者多個元素新增到列表的尾部,返回當前list中元素數量,採用的是 隊列。
04 linsert:在指定列表的元素前或者後插入元素
05 lset:設置list列表中指定元素下標的值, 下標0表明第一個元素,替換成了bear。
06 lrem:從對應list列表中刪除n和value相同的元素,"lrem list 1 noe"表明在list列表中刪除1和noe相同的元素。
​
07 ltrim:保留指定key值範圍內的數據,已知list列表有三個元素,如今只想保留前兩個,最後顯示tow已經去掉了
​
08 lpop:從列表頭部刪除一個元素,返回刪除的元素值。 
09 rpop:從列表尾部刪除一個元素,返回刪除的元素值。
10 rpoplpush:從第一個列表尾部移除一個元素而且添加到第二個列表中頭部從第一個列表中尾部移除一個元素 ,mylist2尾部的元素elephant,rpop命令乾的事往第二個列表的頭部添加一個元素,list中的頭部添加元素elephant,lpush命令乾的事
​
11 lindex: 返回列表中指定下標的元素值,元素下標0開始
12 llen:返回列表中元素的個數複製代碼
複製代碼

5.Set(集合)

5.1Set介紹

Redis 的 Set 是 string 類型的無序集合。它是經過哈希表(HashTable)實現的.

5.2Set特色

1.set也是用來保存多個字符串的元素,但和列表不一樣的是集合中不容許有重複的元素。

2.set中的元素是 無序的,不能經過索引下標獲取元素

3. redis除了支持集合內的增刪改查,同時還支持多個集合取交集、並集、 差集,併合理的使用好集合類型,能在實際開發中解決不少實際問題

5.3set應用場景

1. 好友/關注/粉絲/感興趣的人集合:set類型惟一的特色使得其適合用於存儲好友/關注/粉絲/感興趣的人集合,集合中的元素數量可能不少,每次所有取出來成本不小,set類型提供了一些很實用的命令用於直接操做這些集合,如 a. sinter命令能夠得到A和B兩個用戶的共同好友 b. sismember命令能夠判斷A是不是B的好友c. scard命令能夠獲取好友數量 d. 關注時,smove命令能夠將B從A的粉絲集合轉移到A的好友集合

2.隨機展現:app首頁的展現區域有限,可是又不能老是展現固定的內容,一種作法是先肯定一批須要展現的內容,再從中隨機獲取,如:酷狗音樂K歌擂臺賽當日的打擂歌曲共29首,首頁隨機展現5首;昨日打擂金曲共200首,首頁隨機展現30首。

3.標籤(tag):set集合 類型比較典型的使用場景,如一個用戶對娛樂、體育比較感興趣,另外一個可能對新聞感興趣,這些興趣就是標籤,有了這些數據就能夠獲得同一標籤的人,以及用戶的共同愛好的標籤,咱們博客網站經常使用到的興趣標籤,把一個個有着相同愛好,關注相似內容的用戶利用一個標籤把他們進行歸併。

4.共同好友功能: 共同喜愛,或者能夠引伸到二度好友之類的擴展應用。

5.統計網站的獨立IP: 利用set集合當中元素不惟一性,能夠快速實時統計訪問網站的獨立IP。

  6.黑名單/白名單:常常有業務出於安全性方面的考慮,須要設置用戶黑名單、ip黑名單、設備黑名單等,set類型適合存儲這些黑名單數據,sismember命令可用於判斷用戶、ip、設備是否處於黑名單之中.

7.其餘應用 生成隨機數,好比抽獎

4.4Set的經常使用命令

複製代碼
1 SADD key member1 [member2] 向集合添加一個或多個成員
2  SCARD key 獲取集合的成員數
3  SDIFF key1 [key2] 返回給定全部集合的差集
4  SDIFFSTORE destination key1 [key2] 返回給定全部集合的差集並存儲在 destination 中
5  SINTER key1 [key2] 返回給定全部集合的交集
6  SINTERSTORE destination key1 [key2] 返回給定全部集合的交集並存儲在 destination 中
7  SISMEMBER key member 判斷 member 元素是不是集合 key 的成員
8  SMEMBERS key 返回集合中的全部成員
9  SMOVE source destination member 將 member 元素從 source 集合移動到 destination 集合
10  SPOP key 移除並返回集合中的一個隨機元素
11  SRANDMEMBER key [count] 返回集合中一個或多個隨機數
12  SREM key member1 [member2] 移除集合中一個或多個成員
13  SUNION key1 [key2] 返回全部給定集合的並集
14  SUNIONSTORE destination key1 [key2] 全部給定集合的並集存儲在 destination 集合中
15  SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素複製代碼
複製代碼

6.ZSet(sorted set:有序集合)

6.1ZSet介紹

Redis zset 和 set 同樣也是string類型元素的集合,且不容許重複的成員不一樣的是每一個元素都會關聯一個double類型的分數。

redis正是經過分數來爲集合中的成員進行從小到大的排序。zset的成員是惟一的,但分數(score)卻能夠重複。

6.2ZSet特色

ZSet保留了集合不能有重複成員的特性,但不一樣得是,有序集合中的元素是能夠 排序的,可是它和列表的使用索引下標做爲排序依據不一樣的是,它給每一個元素設置一個分數,做爲排序的依據;

6.3ZSet應用場景

1. 排行榜有序集合經典使用場景,例如京東每日的手機銷量排行、京東的月度銷量榜單、商品按時間的上新排行榜,視頻網站須要對用戶上傳的視頻作排行榜,榜單維護多是多方面: 按照時間、按照播放量、按照得到的贊數等。

6.4ZSet經常使用命令

複製代碼
1.ZADD key score1 member1 [score2 member2] 向有序集合添加一個或多個成員,或者更新已存在成員的分數
2  ZCARD key 獲取有序集合的成員數
3  ZCOUNT key min max 計算在有序集合中指定區間分數的成員數
4  ZINCRBY key increment member 有序集合中對指定成員的分數加上增量 increment
5  ZINTERSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的交集並將結果集存儲在新的有序集合 key 中
6  ZLEXCOUNT key min max 在有序集合中計算指定字典區間內成員數量
7  ZRANGE key start stop [WITHSCORES] 經過索引區間返回有序集合指定區間內的成員
8  ZRANGEBYLEX key min max [LIMIT offset count] 經過字典區間返回有序集合的成員
9  ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 經過分數返回有序集合指定區間內的成員
10  ZRANK key member 返回有序集合中指定成員的索引
11  ZREM key member [member ...] 移除有序集合中的一個或多個成員
12  ZREMRANGEBYLEX key min max 移除有序集合中給定的字典區間的全部成員
13  ZREMRANGEBYRANK key start stop 移除有序集合中給定的排名區間的全部成員
14  ZREMRANGEBYSCORE key min max 移除有序集合中給定的分數區間的全部成員
15  ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定區間內的成員,經過索引,分數從高到低
16  ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分數區間內的成員,分數從高到低排序
17  ZREVRANK key member 返回有序集合中指定成員的排名,有序集成員按分數值遞減(從大到小)排序
18  ZSCORE key member 返回有序集中,成員的分數值
19  ZUNIONSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的並集,並存儲在新的 key 中
20  ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成員和元素分值)複製代碼
相關文章
相關標籤/搜索