Redis:五大基本數據類型詳解

  • redis 自身是一個 Map,其中所有的數據都是採用 key : value 的形式存儲
  • 數據類型指的是存儲的數據的類型,也就是 value 部分的類型, key 部分永遠都是字符串

1. String及應用場景

spring結構:key+value
在這裏插入圖片描述
1.基本操作

//設置String
set key value
mset key1 value1 key2 value2...
//設置生命週期
setex key seconds value 

//得到String
get key 
mget key1 key2...

//刪除String
del key

//向字符串的後面追加字符,如果有就補在後面,如果沒有就新建
append key value

2.string 類型數據的擴展操作

增減數值操作

//增長指令,只有當value爲數字時才能增長
incr key  
incrby key increment  
incrbyfloat key increment 

//減少指令,有當value爲數字時才能減少
decr key  
decrby key increment
  • string在redis內部存儲默認就是一個字符串,當遇到增減類操作incr,decr時會轉成數值型進行計算。
  • redis所有的操作都是原子性的,採用單線程處理所有業務,命令是一個一個執行的,因此無需考慮併發帶來的數據影響。
  • 注意:按數值進行操作的數據,如果原始數據不能轉成數值,或超越了redis 數值上限範圍,將報錯。 9223372036854775807(java中long型數據最大值,Long.MAX_VALUE)

tips:

redis用於控制數據庫表主鍵id,爲數據庫表主鍵提供生成策略,保障數據庫表的主鍵唯一性
此方案適用於所有數據庫,且支持數據庫集羣


指定生命週期

//設置數據的生命週期,單位 秒
setex key seconds value
//設置數據的生命週期,單位 毫秒
psetex key milliseconds value

tips

redis 控制數據的生命週期,通過數據是否失效控制業務行爲,適用於所有具有時效性限定控制的操作
命名規範
在這裏插入圖片描述


3.應用場景
1)業務場景
主頁高頻訪問信息顯示控制,例如新浪微博大V主頁顯示粉絲數與微博數量
在這裏插入圖片描述
2)解決方案
在這裏插入圖片描述


2.Hash(Hashmap)和使用場景

hash結構:大key+ 小key +value

  • 新的存儲需求:對一系列存儲的數據進行編組,方便管理,典型應用存儲對象信息
  • 需要的存儲結構:一個存儲空間保存多個鍵值對數據
  • hash類型:底層使用哈希表結構實現數據存儲

hash存儲結構優化

  • 如果field數量較少,存儲結構優化爲類數組結構
  • 如果field數量較多,存儲結構使用HashMap結構
    在這裏插入圖片描述
    1.基本操作
//插入(如果已存在同名的field,會被覆蓋)
hset key field value
hmset key field1 value1 field2 value2...
//插入(如果已存在同名的field,不會被覆蓋)
hsetnx key field value

//取出
hget key field
hgetall key

//刪除
hdel key field1 field2...

//獲取field數量
hlen key

//查看是否存在
hexists key field

//獲取哈希表中所有的字段名或字段值 
hkeys key
hvals key

//設置指定字段的數值數據增加指定範圍的值 
hincrby key field increment 
hdecrby key field increment

2.hash 類型數據操作的注意事項

  • hash類型下的value只能存儲字符串,不允許存儲其他數據類型,不存在嵌套現象。如果數據未獲取到, 對應的值爲(nil)
  • 每個 hash 可以存儲 2^32 - 1 個鍵值
  • hash類型十分貼近對象的數據存儲形式,並且可以靈活添加刪除對象屬性。但hash設計初衷不是爲了存儲大量對象而設計的,切記不可濫用,更不可以將hash作爲對象列表使用
  • hgetall 操作可以獲取全部屬性,如果內部field過多,遍歷整體數據效率就很會低,有可能成爲數據訪問瓶頸

3.應用場景
1)業務場景
雙11活動日,銷售手機充值卡的商家對移動、聯通、電信的30元、 50元、 100元商品推出搶購活動,每種商品搶購上限1000張
在這裏插入圖片描述
2)解決方案

  • 商家id作爲key
  • 將參與搶購的商品id作爲field
  • 將參與搶購的商品數量作爲對應的value
  • 搶購時使用降值的方式控制產品數量
  • 這裏redis 應用於搶購,限購類、限量發放優惠卷、激活碼等業務的數據存儲設計

3. List(有序可重複)和使用場景

list結構:key + value列表

  • 數據存儲需求:存儲多個數據,並對數據進入存儲空間的順序進行區分
  • 需要的存儲結構:一個存儲空間保存多個數據,且通過數據可以體現進入順序
  • list類型:保存多個數據,底層使用雙向鏈表存儲結構實現
  • 元素有序,且可重
    在這裏插入圖片描述

1.基本操作
左進左出是棧;左進右出是隊列。從哪邊進和出都可以

//添加修改數據,lpush爲從左邊添加,rpush爲從右邊添加
lpush key value1 value2 value3...
rpush key value1 value2 value3...

//查看數據, 從左邊開始向右查看. 如果不知道list有多少個元素,end的值可以爲-1,代表倒數第一個元素
//lpush先進的元素放在最後,rpush先進的元素放在最前面
lrange key start end
//得到長度
llen key
//取出對應索引的元素
lindex key index

//獲取並移除元素(從list左邊或者右邊移除)
lpop key
rpop key

拓展操作

//規定時間內獲取並移除數據,b=block,給定一個時間,如果在指定時間內放入了元素,就移除
blpop key1 key2... timeout
brpop key1 key2... timeout

//移除指定元素 count:移除的個數 value:移除的值。 移除多個相同元素時,從左邊開始移除
lrem key count value

2. 注意事項

  • list中保存的數據都是string類型的,數據總容量是有限的,最多2^32 - 1 個元素 (4294967295)。
  • list具有索引的概念,但是操作數據時通常以隊列的形式進行入隊出隊(lpush, rpop)操作,或以棧的形式進行入棧出棧(lpush, lpop)操作
  • 獲取全部數據操作結束索引設置爲-1 (倒數第一個元素)
  • list可以對數據進行分頁操作,通常第一頁的信息來自於list,第2頁及更多的信息通過數據庫的形式加載

3.應用場景(順序性)
1)業務場景
twitter、新浪微博、騰訊微博中個人用戶的關注列表需要按照用戶的關注順序進行展示,粉絲列表需要將最近關注的粉絲列在前面
在這裏插入圖片描述
2)解決方案

  • 依賴list的數據具有順序的特徵對信息進行管理
  • 使用隊列模型解決多路信息彙總合併的問題
  • 使用棧模型解決最新消息的問題
  • 這裏redis 應用於最新消息展示

4. set (無序不可重複)和場景

set結構:大key +小key(相當於存value)Hash中的value值爲nil

  • 新的存儲需求:存儲大量的數據,在查詢方面提供更高的效率
  • 需要的存儲結構:能夠保存大量的數據,高效的內部存儲機制,便於查詢
  • set類型:與hash存儲結構完全相同,僅存儲鍵,不存儲值( nil),並且值是不允許重複的
    在這裏插入圖片描述
    1.基本操作
//添加元素
sadd key member1 member2...

//查看元素
smembers key

//移除元素
srem key member

//查看元素個數
scard key

//查看某個元素是否存在
sismember key member

擴展操作

//從set中任意選出count個元素
srandmember key count

//從set中任意選出count個元素並移除
spop key count

//求兩個集合的交集、並集、差集
sinter key1 key2...
sunion key1 key2...
sdiff key1 key2...

//求兩個set的交集、並集、差集,並放入另一個set中
sinterstore destination key1 key2...
sunionstore destination key1 key2...
sdiffstore destination key1 key2...

//求指定元素從原集合放入目標集合中
smove source destination key

2.場景
應用場景很多,這裏不作細述


5. sorted_set(無序不重複但排列有序)

Zset結構:大key+ 小key(相當於value) +排序號

  • 不重但有序(score)
  • 新的存儲需求:數據排序有利於數據的有效展示,需要提供一種可以根據自身特徵進行排序的方式
  • 需要的存儲結構:新的存儲模型,可以保存可排序的數據
  • sorted_set類型:在set的存儲結構基礎上添加可排序字段
    在這裏插入圖片描述
    1.基本操作
//插入元素, 需要指定score(用於排序)
zadd key score1 member1 score2 member2

//查看元素(score升序), 當末尾添加withscore時,會將元素的score一起打印出來
zrange key start end (withscore)
//查看元素(score降序), 當末尾添加withscore時,會將元素的score一起打印出來
zrevrange key start end (withscore)

//移除元素
zrem key member1 member2...

//按條件獲取數據, 其中offset爲索引開始位置,count爲獲取的數目
zrangebyscore key min max [withscore] [limit offset count]
zrevrangebyscore key max min [withscore] [limit offset count]

//按條件移除元素
zremrangebyrank key start end
zremrangebysocre key min max
//按照從大到小的順序移除count個值
zpopmax key [count]
//按照從小到大的順序移除count個值
zpopmin key [count]

//獲得元素個數
zcard key

//獲得元素在範圍內的個數
zcount min max

//求交集、並集並放入destination中, 其中numkey1爲要去交集或並集集合的數目
zinterstore destination numkeys key1 key2...
zunionstore destination numkeys key1 key2...

注意

  • min與max用於限定搜索查詢的條件
  • start與stop用於限定查詢範圍,作用於索引,表示開始和結束索引
  • offset與count用於限定查詢範圍,作用於查詢結果,表示開始位置和數據總量

2. 拓展操作

//查看某個元素的索引(排名)
zrank key member
zrevrank key member

//查看某個元素索引的值
zscore key member
//增加某個元素索引的值
zincrby key increment member

注意事項

  • score保存的數據存儲空間是64位,如果是整數範圍是-9007199254740992~9007199254740992
  • score保存的數據也可以是一個雙精度的double值,基於雙精度浮點數的特徵,可能會丟失精度,使用時候要慎重
  • sorted_set 底層存儲還是基於set結構的,因此數據不能重複,如果重複添加相同的數據,score值將被反覆覆蓋,保留最後一次修改的結果

3.場景

  • redis 應用於計數器組合排序功能對應的排名。與list類似,只是sortSet不能重複而且排列還得有序。
  • redis 應用於定時任務執行順序管理或任務過期管理。

6. 應用場景總結

String場景

  • Tips 1: redis用於控制數據庫表主鍵id,爲數據庫表主鍵提供生成策略,保障數據庫表的主鍵唯一性
  • Tips 2: redis 控制數據的生命週期,通過數據是否失效控制業務行爲,適用於所有具有時效性限定控制的操作
  • Tips 3: redis應用於各種結構型和非結構型高熱度數據訪問加速

Hash場景

  • Tips 4: redis 應用於購物車數據存儲設計
  • Tips 5: redis 應用於搶購,限購類、限量發放優惠卷、激活碼等業務的數據存儲設計

list場景

  • Tips 6: redis 應用於具有操作先後順序的數據控制
  • Tips 7: redis 應用於最新消息展示

set場景

  • Tips 8: redis 應用於隨機推薦類信息檢索,例如熱點歌單推薦,熱點新聞推薦,熱賣旅遊線路,應用APP推薦,大V推薦等
  • Tips 9: redis 應用於同類信息的關聯搜索,二度關聯搜索,深度關聯搜索
  • Tips 10: redis 應用於同類型不重複數據的合併、取交集操作
  • Tips 11: redis 應用於同類型數據的快速去重
  • Tips 12: redis 應用於基於黑名單與白名單設定的服務控制

sorted_set 場景

  • Tips 13: redis 應用於計數器組合排序功能對應的排名
  • Tips 14: redis 應用於定時任務執行順序管理或任務過期管理
  • Tips 15: redis 應用於及時任務/消息隊列執行管理

7. 通用指令

基本操作

//切換數據庫 0~15
select index

//其他操作
quit
ping
echo massage

拓展操作

//移動數據, 必須保證目的數據庫中沒有該數據
mov key db

//查看該庫中數據總量
dbsize
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章