工作中,Redis的15種使用場(chǎng)景
工作中,Redis的15種使用場(chǎng)景
大家好,我是王哥呀。
從清晨的新聞推送,到深夜的直播互動(dòng);從地鐵掃碼的毫秒響應(yīng),到跨洋支付的交易鎖扣——Redis早已滲透數(shù)字世界的每個(gè)毛細(xì)血管。它不僅是一把打開高并發(fā)之門的鑰匙,更是開發(fā)者手中讓數(shù)據(jù)起舞的指揮棒??。
今天,讓我們揭開Redis的15種魔法場(chǎng)景,看它如何用代碼譜寫效率的詩篇!
1. 緩存加速
存儲(chǔ)熱點(diǎn)數(shù)據(jù)(如用戶信息、商品詳情),減少數(shù)據(jù)庫壓力。
SET user:1001 "{name: 'Alice', age: 30}" EX 3600 # 緩存1小時(shí)[1](@ref)
2. 分布式鎖
協(xié)調(diào)多節(jié)點(diǎn)對(duì)共享資源的訪問,確保原子性。
// Redisson實(shí)現(xiàn)分布式鎖模板[1](@ref)
public <T> T executeWithLock(String lockKey, long timeout, Callable<T> action) {
RLock lock = redissonClient.getLock(lockKey);
boolean isLock = lock.tryLock(1, timeout, TimeUnit.SECONDS);
// ...釋放鎖邏輯
}
3. 實(shí)時(shí)排行榜
基于Sorted Set實(shí)現(xiàn)游戲積分、直播送禮排名。
ZADD game_leaderboard 1000 "player_1" # 插入分?jǐn)?shù)
ZREVRANGE game_leaderboard 0 9 WITHSCORES # 獲取Top10[1](@ref)
4. 計(jì)數(shù)器
統(tǒng)計(jì)文章閱讀量、點(diǎn)贊數(shù),支持原子操作。
SADD article:123:likes 1001 # 用戶點(diǎn)贊
SCARD article:123:likes # 統(tǒng)計(jì)總數(shù)[1](@ref)
5. 消息隊(duì)列
通過List的阻塞操作實(shí)現(xiàn)任務(wù)隊(duì)列。
LPUSH task_queue "task1" # 生產(chǎn)者推送任務(wù)
BLPOP task_queue 5 # 消費(fèi)者阻塞獲取[1](@ref)
6. 會(huì)話管理
存儲(chǔ)分布式Session,自動(dòng)清理過期數(shù)據(jù)。
HSET session:abc123 user_id 1001 last_active 1690000000
EXPIRE session:abc123 1800 # 30分鐘過期[1](@ref)
7. 簽到系統(tǒng)
用Bitmap高效記錄用戶簽到。
SETBIT sign:202502:1001 20 1 # 用戶1001在20日簽到
BITCOUNT sign:202502:1001 # 統(tǒng)計(jì)當(dāng)月簽到次數(shù)[1](@ref)[8](@ref)
8. 限流控制
通過INCR實(shí)現(xiàn)接口訪問頻率限制。
-- Lua腳本:限制每秒最多10次請(qǐng)求[7](@ref)
local key = KEYS[1]
local limit = tonumber(ARGV[1](@ref)
local current = redis.call('GET', key) or 0
if current + 1 > limit then return 0 else redis.call('INCR', key) end
9. 購物車
使用Hash存儲(chǔ)商品和數(shù)量。
HSET cart:1001 10088 1 # 用戶1001添加商品10088
HINCRBY cart:1001 10088 1 # 修改數(shù)量[7](@ref)
10. 抽獎(jiǎng)活動(dòng)
利用Set實(shí)現(xiàn)隨機(jī)抽取用戶。
SADD lottery:2025 "user1" "user2" # 添加參與者
SRANDMEMBER lottery:2025 1 # 隨機(jī)抽取1人[7](@ref)
11. 全頁緩存
緩存整頁HTML內(nèi)容,加速頁面加載。
SET page:home "<html>...</html>" EX 300 # 緩存5分鐘[5](@ref)
12. 發(fā)布訂閱
實(shí)現(xiàn)實(shí)時(shí)消息推送(如新聞通知)。
PUBLISH news "Redis 7.0 released!" # 發(fā)布消息
SUBSCRIBE news # 訂閱頻道[7](@ref)
13. 地理位置服務(wù)
存儲(chǔ)和查詢地理坐標(biāo)數(shù)據(jù)。
GEOADD cities 116.405285 39.904989 "北京"
GEORADIUS cities 116.40 39.90 100 km # 查詢附近100km城市[8](@ref)
14. 分布式ID生成
通過INCRBY生成全局唯一ID。
INCRBY userid 1000 # 分庫分表場(chǎng)景批量生成ID[2](@ref)
15. 數(shù)據(jù)過期處理
自動(dòng)清理臨時(shí)數(shù)據(jù)(如驗(yàn)證碼)。
SET temp:code:1001 "123456" EX 60 # 60秒后自動(dòng)刪除[5](@ref)
通過靈活運(yùn)用Redis的數(shù)據(jù)結(jié)構(gòu)和特性,可顯著提升系統(tǒng)性能和開發(fā)效率。實(shí)際應(yīng)用中需結(jié)合業(yè)務(wù)場(chǎng)景選擇合適方案。
最近在研發(fā)的 AI編程小白入門課正式發(fā)布,并附贈(zèng) AI編程社群,讓我們一起迎接 AI 時(shí)代的到來,下單后小伙伴可以找我加入。
點(diǎn)擊 https://s.yizhiknow.com/s/y/fceHsx

原文:https://javapub.net.cn/posts/database/redis/redis_apply_15_topic.html

浙公網(wǎng)安備 33010602011771號(hào)