您好,登錄后才能下訂單哦!
本篇內容介紹了“Redis中有哪些應用場景”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Redis是一個Key-Value的存儲系統,使用ANSI C語言編寫。 key的類型是字符串。【相關推薦:Redis視頻教程】
value的數據類型8種數據類型:
常見數據類型
string字符串類型
list列表類型
set集合類型
sortedset(zset)有序集合類型
hash類型
不常見數據類型
bitmap位圖類型
geo地理位置類型
stream類型
注意
Redis中命令是忽略大小寫,(set SET),key是不忽略大小寫的 (NAME name)
Redis的String能表達3種值的類型:字符串、整數、浮點數 100.01 是個六位的串
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
set | set key value | 賦值 |
get | get key | 取值 |
getset | getset key value | 取值并賦值 |
mset | MSET key1 value1 key2 value2 .. keyN valueN | 設置多個 key 的值為各自對應的 value。 |
mget | MGET KEY1 KEY2 .. KEYN | 返回所有(一個或多個)給定 key 的值 |
EXPIRE | EXPIRE key seconds | 設置一個鍵的過期時間(秒) |
append | append key value | 向尾部追加值 |
strlen | strlen key | 獲取字符串長度 |
setnx | setnx key value | 當value不存在時采用賦值 set key value NX PX 3000 原子操作,px 設置毫秒數 |
incr | incr key | 遞增數字 |
incrby | incrby key increment | 增加指定的整數 |
decr | decr key | 遞減數字 |
decrby | decrby key decrement | 減少指定的整數 |
1、對象緩存
2、單值緩存
3、incr用于樂觀鎖 incr:遞增數字,可用于實現樂觀鎖 watch(事務)
4、setnx用于分布式鎖 當value不存在時采用賦值,可用于實現分布式鎖
5、計數器
6、Web集群session共享
dockerRedis:0>keys * dockerRedis:0>append testName 2 "1" dockerRedis:0>exists testName "1" dockerRedis:0>append testName " 1234" "6" dockerRedis:0>get testName "2 1234" dockerRedis:0>set testName1 "testName1" "OK" dockerRedis:0>get testName1 "testName1" dockerRedis:0>getset testName2 "testName2" null dockerRedis:0>get testName2 "testName2" dockerRedis:0>strlen testName "6" dockerRedis:0>set incrTest "10" "OK" dockerRedis:0>incr incrTest "11" dockerRedis:0>get incrTest "11" dockerRedis:0>decr incrTest "10" dockerRedis:0>decrby incrTest 5 "5" dockerRedis:0>mset set01 1 set02 2 set03 3 "OK" dockerRedis:0>mget set01 set02 set03 1) "1" 2) "2" 3) "3"
list列表類型可以存儲有序、可重復的元素獲取頭部或尾部附近的記錄是極快的 list的元素個數最多為2^32-1個(40億)
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
lpush | lpush key v1 v2 v3 ... | 從左側插入列表 |
lpop | lpop key | 從列表左側取出 |
rpush | rpush key v1 v2 v3 ... | 從右側插入列表 |
rpop | rpop key | 從列表右側取出 |
lpushx | lpushx key value | 將值插入到列表頭部 |
blpop | blpop key timeout | 從列表左側取出,當列表為空時阻塞,可以設置最大阻塞時間,單位為秒 |
llen | llen key | 獲得列表中元素個數 |
lrange | lrange key start end | 返回列表中指定區間的元素,區間通過start和end指定 |
lset | lset key index value | 將列表index位置的元素設置成value的值 |
rpoplpush | rpoplpush key1 key2 | 從key1列表右側彈出并插入到key2列表左側 |
rpushx | rpushx key | 將值插入到列表尾部 value |
brpop | blpop key | 從列表右側取出,當列表為空時阻塞,可以設置最大阻塞時 timeout 間,單位為秒 |
lindex | lindex key value | 獲得列表中下標為index的元素 index從0開始 index |
ltrim | ltrim key start end | 對列表進行修剪,只保留start到end區間 end |
brpoplpush | brpoplpush | 從key1列表右側彈出并插入到key2列表左側,會阻塞 key1 key2 |
linsert | linsert key BEFORE/AFTER pivot value | 將value插入到列表,且位于值pivot之前或之后 |
1、Stack(棧)=LPUSH + LPOP
2、Queue(隊列)=LPUSH + RPOP
3、Blocking MQ(阻塞隊列)=LPUSH + BRPOP
4、用戶列表、商品列表、評論列表
Set:無序、唯一元素 集合中最大的成員數為 2^32 - 1
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
sadd | sadd key value1 value2 .... | 往集合key中存入元素,元素存在則忽略,若key不存在則新建 |
srem | srem key value1 value2 .... | 從集合key中刪除元素 |
smembers | smembers key | 獲得集合中所有元素 |
spop | spop key count | 從集合key中選出count個元素,元素從key中刪除 |
srandmember | srandmember key count | 從集合key中選出count個元素,元素不從key中刪除 |
scard | scard key | 獲取集合key的元素個數 |
sismember | sismember key member | 判斷member元素是否存在于集合key中 |
sinter | sinter key1 key2 key3 | 求多集合的交集 |
sdiff | sdiff key1 key2 key3 | 求多集合的差集 |
sunion | sunion key1 key2 key3 | 求多集合的并集 |
微信抽獎小程序
微博點贊、收藏、標簽
微博微信關注模型
電商商品篩選
SortedSet(ZSet) 有序集合: 元素本身是無序不重復的 每個元素關聯一個分數(score) 可按分數排序,分數可重復
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
zadd | zadd key score1 member1 score2 member2 ... | 往有序集合key中加入帶分值元素 |
zrem | zrem key mem1 mem2 .... | 從有序集合key中刪除元素 |
zcard | zcard key | 獲得有序集合中的元素數量 |
zcount | zcount key min max | 返回集合中score值在[min,max]區間 的元素數量 |
zincrby | zincrby key increment member | 為有序集合key中元素member的分值加上increment |
zscore | zscore key member | 返回有序集合key中元素member的分值 |
zrank | zrank key member | 獲得集合中member的排名(按分值從 小到大) |
zrange | zrange key start end | 正 序獲取有序集合key從start下標到stop下標的元素 |
zrevrank | zrevrank key member | 獲得集合中member的排名(按分值從 大到小) |
zrevrange | zrevrange key start end | 倒序獲取有序集合key從start下標到stop下標的元素 |
點擊排行榜、銷量排行榜、關注排行榜
Redis hash是一個string類型的field和value的映射表,它提供了字段和字段值的映射。每個 hash 可以存儲 2^32-1鍵值對(40多億)。
優點
1、同類數據歸類整合儲存,方便數據管理
2、相比string操作消耗內存與cpu更小
3、相比string儲存更節省空間
缺點
1、過期功能不能使用在field上,只能用在key上
2、Redis集群架構下不適合大規模使用
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
hset | hset key field value | 存儲一個哈希表key的鍵值 |
hmset | hmset key field1 value1 field2 value2 | 在一個哈希表key中存儲多個鍵值對 |
hget | hget key field | 查看某個field是否存在 |
hmget | hmget key field1 field2 ... | 獲取一個字段值 |
hsetnx | hsetnx key field value | 存儲一個不存在的哈希表key的鍵值 |
hexists | hexists key filed | 判斷filed是否存在 |
hgetall | hgetall key | 獲取多個字段值 |
hdel | hdel key field1 field2... | 刪除指定字段 |
hincrby | hincrby key field increment | 指定字段自增increment |
hlen | hlen key | 獲得字段數量 |
對象緩存
購物車操作
bitmap是進行位操作的 通過一個bit位來表示某個元素對應的值或者狀態,其中的key就是對應元素本身。 bitmap本身會極大的節省儲存空間。
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
setbit | setbit key offset value | 設置key在offset處的bit值(只能是0或者 1)。 |
getbit | getbit key offset | 獲得key在offset處的bit值 |
bitcount | bitcount key | 獲得key的bit位為1的個數 |
bitpos | bitpos key value | 返回第一個被設置為bit值的索引值 |
bitop | bitop and[or/xor/not] destkey key [key ...] | 對多個key 進行邏輯運算后存入destkey 中 |
1、用戶每月簽到,用戶id為key , 日期作為偏移量 1表示簽到
2、統計活躍用戶, 日期為key,用戶id為偏移量 1表示活躍
3、查詢用戶在線狀態, 日期為key,用戶id為偏移量 1表示在線
geo是Redis用來處理位置信息的。在Redis3.2中正式使用。主要是利用了Z階曲線、Base32編碼和geohash算法
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
geoadd | geoadd key 經度 緯度 成員名稱1 經度1 緯度1 成 員名稱2 經度2 緯度 2 ... | 添加地理坐標 |
geopos | geopos key 成員名稱1 成員名稱2... | 返回成員經緯度 |
geodist | geodist key 成員1 成員2 單位 | 計算成員間距離 |
georadiusbymember | georadiusbymember key 成員 值單位 count 數 asc[desc] | 根據成員查找附近的成員 |
geohash | geohash key 成員名稱1 成員名稱2... | 返回標準的 geohash串 |
1、記錄地理位置
2、計算距離
3、查找"附近的人"
stream是Redis5.0后新增的數據結構,用于可持久化的消息隊列。
幾乎滿足了消息隊列具備的全部內容,包括:
消息ID的序列化生成
消息遍歷
消息的阻塞和非阻塞讀取
消息的分組消費
未完成消息的處理
消息隊列監控
每個Stream都有唯一的名稱,它就是Redis的key,首次使用 xadd 指令追加消息時自動創建
消息隊列的使用
“Redis中有哪些應用場景”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。