工作中,Redis的15种使用场景

简介: Redis 在现代应用中扮演着至关重要的角色,涵盖缓存加速、分布式锁、实时排行榜、计数器、消息队列等15种常见场景。它通过高效的数据结构和原子操作,大幅提升系统性能和响应速度,广泛应用于会话管理、签到系统、限流控制、购物车、抽奖活动、全页缓存、发布订阅、地理位置服务、分布式ID生成及数据过期处理等领域。灵活运用这些特性,可显著优化开发效率和用户体验。

工作中,Redis的15种使用场景

大家好,我是王哥呀。

从清晨的新闻推送,到深夜的直播互动;从地铁扫码的毫秒响应,到跨洋支付的交易锁扣——Redis早已渗透数字世界的每个毛细血管。它不仅是一把打开高并发之门的钥匙,更是开发者手中让数据起舞的指挥棒🎻。

今天,让我们揭开Redis的15种魔法场景,看它如何用代码谱写效率的诗篇!

1. 缓存加速

存储热点数据(如用户信息、商品详情),减少数据库压力。

SET user:1001 "{name: 'Alice', age: 30}" EX 3600  # 缓存1小时[1](@ref)

2. 分布式锁

协调多节点对共享资源的访问,确保原子性。

// Redisson实现分布式锁模板[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. 实时排行榜

基于Sorted Set实现游戏积分、直播送礼排名。

ZADD game_leaderboard 1000 "player_1"  # 插入分数  
ZREVRANGE game_leaderboard 0 9 WITHSCORES  # 获取Top10[1](@ref)

4. 计数器

统计文章阅读量、点赞数,支持原子操作。

SADD article:123:likes 1001  # 用户点赞  
SCARD article:123:likes      # 统计总数[1](@ref)

5. 消息队列

通过List的阻塞操作实现任务队列。

LPUSH task_queue "task1"     # 生产者推送任务  
BLPOP task_queue 5           # 消费者阻塞获取[1](@ref)

6. 会话管理

存储分布式Session,自动清理过期数据。

HSET session:abc123 user_id 1001 last_active 1690000000  
EXPIRE session:abc123 1800  # 30分钟过期[1](@ref)

7. 签到系统

用Bitmap高效记录用户签到。

SETBIT sign:202502:1001 20 1  # 用户1001在20日签到  
BITCOUNT sign:202502:1001     # 统计当月签到次数[1](@ref)[8](@ref)

8. 限流控制

通过INCR实现接口访问频率限制。

-- Lua脚本:限制每秒最多10次请求[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存储商品和数量。

HSET cart:1001 10088 1  # 用户1001添加商品10088  
HINCRBY cart:1001 10088 1  # 修改数量[7](@ref)

10. 抽奖活动

利用Set实现随机抽取用户。

SADD lottery:2025 "user1" "user2"  # 添加参与者  
SRANDMEMBER lottery:2025 1        # 随机抽取1人[7](@ref)

11. 全页缓存

缓存整页HTML内容,加速页面加载。

SET page:home "<html>...</html>" EX 300  # 缓存5分钟[5](@ref)

12. 发布订阅

实现实时消息推送(如新闻通知)。

PUBLISH news "Redis 7.0 released!"  # 发布消息  
SUBSCRIBE news                      # 订阅频道[7](@ref)

13. 地理位置服务

存储和查询地理坐标数据。

GEOADD cities 116.405285 39.904989 "北京"  
GEORADIUS cities 116.40 39.90 100 km  # 查询附近100km城市[8](@ref)

14. 分布式ID生成

通过INCRBY生成全局唯一ID。

INCRBY userid 1000  # 分库分表场景批量生成ID[2](@ref)

15. 数据过期处理

自动清理临时数据(如验证码)。

SET temp:code:1001 "123456" EX 60  # 60秒后自动删除[5](@ref)

通过灵活运用Redis的数据结构和特性,可显著提升系统性能和开发效率。实际应用中需结合业务场景选择合适方案。

最近在研发的 AI编程小白入门课正式发布,并附赠 AI编程社群,让我们一起迎接 AI 时代的到来,下单后小伙伴可以找我加入。

点击 https://s.yizhiknow.com/s/y/fceHsx

图片

目录
相关文章
|
NoSQL Redis 数据安全/隐私保护
redis的 rdb 和 aof 持久化方式的区别及使用场景
redis的 rdb 和 aof 持久化方式的区别及使用场景
717 0
|
存储 NoSQL Java
蚂蚁金服Java研发岗二面:redis 常见数据结构以及使用场景分析
redis简单来说 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。所以在面试中我们经常可以看到redis的身影,今天给大家带来一道redis的面试真题以及解析,后面会给大家分享今年来redis常考试的一些真题。
363 0
|
6月前
|
存储 消息中间件 NoSQL
【Redis】常用数据结构之List篇:从常用命令到典型使用场景
本文将系统探讨 Redis List 的核心特性、完整命令体系、底层存储实现以及典型实践场景,为读者构建从理论到应用的完整认知框架,助力开发者在实际业务中高效运用这一数据结构解决问题。
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
缓存 NoSQL Java
Java 最常见的面试题:redis 是什么?都有哪些使用场景?
Java 最常见的面试题:redis 是什么?都有哪些使用场景?
|
NoSQL Java Redis
第一季:17redis在项目中使用场景【Java面试题】
第一季:17redis在项目中使用场景【Java面试题】
249 0
|
缓存 NoSQL 小程序
|
消息中间件 存储 NoSQL
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
本文档介绍了如何使用 Go 语言中的 `go-redis` 库操作 Redis 数据库
697 0
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
|
存储 NoSQL Java
【超长文】Redis在项目中的17种使用场景
Redis 是一个开源的高性能键值对数据库,它以其内存中数据存储、键过期策略、持久化、事务、丰富的数据类型支持以及原子操作等特性,在许多项目中扮演着关键角色。以下是V哥整理的17个Redis在项目中常见的使用场景
1935 0
|
存储 SQL NoSQL
Redis入门到通关之五大基本数据类型及其使用场景
Redis入门到通关之五大基本数据类型及其使用场景
201 0