本篇內(nèi)容介紹了“redis中有哪些應(yīng)用場景”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)公司是專業(yè)的潞州網(wǎng)站建設(shè)公司,潞州接單;提供成都做網(wǎng)站、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行潞州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
Redis是一個Key-Value的存儲系統(tǒng),使用ANSI C語言編寫。 key的類型是字符串?!鞠嚓P(guān)推薦:Redis視頻教程】
value的數(shù)據(jù)類型8種數(shù)據(jù)類型:
常見數(shù)據(jù)類型
string字符串類型
list列表類型
set集合類型
sortedset(zset)有序集合類型
hash類型
不常見數(shù)據(jù)類型
bitmap位圖類型
geo地理位置類型
stream類型
注意
Redis中命令是忽略大小寫,(set SET),key是不忽略大小寫的 (NAME name)
Redis的String能表達3種值的類型:字符串、整數(shù)、浮點數(shù) 100.01 是個六位的串
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
set | set key value | 賦值 |
get | get key | 取值 |
getset | getset key value | 取值并賦值 |
mset | MSET key1 value1 key2 value2 .. keyN valueN | 設(shè)置多個 key 的值為各自對應(yīng)的 value。 |
mget | MGET KEY1 KEY2 .. KEYN | 返回所有(一個或多個)給定 key 的值 |
EXPIRE | EXPIRE key seconds | 設(shè)置一個鍵的過期時間(秒) |
append | append key value | 向尾部追加值 |
strlen | strlen key | 獲取字符串長度 |
setnx | setnx key value | 當(dāng)value不存在時采用賦值 set key value NX PX 3000 原子操作,px 設(shè)置毫秒數(shù) |
incr | incr key | 遞增數(shù)字 |
incrby | incrby key increment | 增加指定的整數(shù) |
decr | decr key | 遞減數(shù)字 |
decrby | decrby key decrement | 減少指定的整數(shù) |
1、對象緩存
2、單值緩存
3、incr用于樂觀鎖 incr:遞增數(shù)字,可用于實現(xiàn)樂觀鎖 watch(事務(wù))
4、setnx用于分布式鎖 當(dāng)value不存在時采用賦值,可用于實現(xiàn)分布式鎖
5、計數(shù)器
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列表類型可以存儲有序、可重復(fù)的元素獲取頭部或尾部附近的記錄是極快的 list的元素個數(shù)最多為2^32-1個(40億)
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
lpush | lpush key v1 v2 v3 ... | 從左側(cè)插入列表 |
lpop | lpop key | 從列表左側(cè)取出 |
rpush | rpush key v1 v2 v3 ... | 從右側(cè)插入列表 |
rpop | rpop key | 從列表右側(cè)取出 |
lpushx | lpushx key value | 將值插入到列表頭部 |
blpop | blpop key timeout | 從列表左側(cè)取出,當(dāng)列表為空時阻塞,可以設(shè)置最大阻塞時間,單位為秒 |
llen | llen key | 獲得列表中元素個數(shù) |
lrange | lrange key start end | 返回列表中指定區(qū)間的元素,區(qū)間通過start和end指定 |
lset | lset key index value | 將列表index位置的元素設(shè)置成value的值 |
rpoplpush | rpoplpush key1 key2 | 從key1列表右側(cè)彈出并插入到key2列表左側(cè) |
rpushx | rpushx key | 將值插入到列表尾部 value |
brpop | blpop key | 從列表右側(cè)取出,當(dāng)列表為空時阻塞,可以設(shè)置最大阻塞時 timeout 間,單位為秒 |
lindex | lindex key value | 獲得列表中下標(biāo)為index的元素 index從0開始 index |
ltrim | ltrim key start end | 對列表進行修剪,只保留start到end區(qū)間 end |
brpoplpush | brpoplpush | 從key1列表右側(cè)彈出并插入到key2列表左側(cè),會阻塞 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:無序、唯一元素 集合中最大的成員數(shù)為 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的元素個數(shù) |
sismember | sismember key member | 判斷member元素是否存在于集合key中 |
sinter | sinter key1 key2 key3 | 求多集合的交集 |
sdiff | sdiff key1 key2 key3 | 求多集合的差集 |
sunion | sunion key1 key2 key3 | 求多集合的并集 |
微信抽獎小程序
微博點贊、收藏、標(biāo)簽
微博微信關(guān)注模型
電商商品篩選
SortedSet(ZSet) 有序集合: 元素本身是無序不重復(fù)的 每個元素關(guān)聯(lián)一個分?jǐn)?shù)(score) 可按分?jǐn)?shù)排序,分?jǐn)?shù)可重復(fù)
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
zadd | zadd key score1 member1 score2 member2 ... | 往有序集合key中加入帶分值元素 |
zrem | zrem key mem1 mem2 .... | 從有序集合key中刪除元素 |
zcard | zcard key | 獲得有序集合中的元素數(shù)量 |
zcount | zcount key min max | 返回集合中score值在[min,max]區(qū)間 的元素數(shù)量 |
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下標(biāo)到stop下標(biāo)的元素 |
zrevrank | zrevrank key member | 獲得集合中member的排名(按分值從 大到小) |
zrevrange | zrevrange key start end | 倒序獲取有序集合key從start下標(biāo)到stop下標(biāo)的元素 |
點擊排行榜、銷量排行榜、關(guān)注排行榜
Redis hash是一個string類型的field和value的映射表,它提供了字段和字段值的映射。每個 hash 可以存儲 2^32-1鍵值對(40多億)。
優(yōu)點
1、同類數(shù)據(jù)歸類整合儲存,方便數(shù)據(jù)管理
2、相比string操作消耗內(nèi)存與cpu更小
3、相比string儲存更節(jié)省空間
缺點
1、過期功能不能使用在field上,只能用在key上
2、Redis集群架構(gòu)下不適合大規(guī)模使用
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
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 | 獲得字段數(shù)量 |
對象緩存
購物車操作
bitmap是進行位操作的 通過一個bit位來表示某個元素對應(yīng)的值或者狀態(tài),其中的key就是對應(yīng)元素本身。 bitmap本身會極大的節(jié)省儲存空間。
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
setbit | setbit key offset value | 設(shè)置key在offset處的bit值(只能是0或者 1)。 |
getbit | getbit key offset | 獲得key在offset處的bit值 |
bitcount | bitcount key | 獲得key的bit位為1的個數(shù) |
bitpos | bitpos key value | 返回第一個被設(shè)置為bit值的索引值 |
bitop | bitop and[or/xor/not] destkey key [key ...] | 對多個key 進行邏輯運算后存入destkey 中 |
1、用戶每月簽到,用戶id為key , 日期作為偏移量 1表示簽到
2、統(tǒng)計活躍用戶, 日期為key,用戶id為偏移量 1表示活躍
3、查詢用戶在線狀態(tài), 日期為key,用戶id為偏移量 1表示在線
geo是Redis用來處理位置信息的。在Redis3.2中正式使用。主要是利用了Z階曲線、Base32編碼和geohash算法
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
geoadd | geoadd key 經(jīng)度 緯度 成員名稱1 經(jīng)度1 緯度1 成 員名稱2 經(jīng)度2 緯度 2 ... | 添加地理坐標(biāo) |
geopos | geopos key 成員名稱1 成員名稱2... | 返回成員經(jīng)緯度 |
geodist | geodist key 成員1 成員2 單位 | 計算成員間距離 |
georadiusbymember | georadiusbymember key 成員 值單位 count 數(shù) asc[desc] | 根據(jù)成員查找附近的成員 |
geohash | geohash key 成員名稱1 成員名稱2... | 返回標(biāo)準(zhǔn)的 geohash串 |
1、記錄地理位置
2、計算距離
3、查找"附近的人"
stream是Redis5.0后新增的數(shù)據(jù)結(jié)構(gòu),用于可持久化的消息隊列。
幾乎滿足了消息隊列具備的全部內(nèi)容,包括:
消息ID的序列化生成
消息遍歷
消息的阻塞和非阻塞讀取
消息的分組消費
未完成消息的處理
消息隊列監(jiān)控
每個Stream都有唯一的名稱,它就是Redis的key,首次使用 xadd 指令追加消息時自動創(chuàng)建
消息隊列的使用
“Redis中有哪些應(yīng)用場景”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!