系统不崩的秘籍:Redis的六大非缓存玩法,支撑高并发流量就靠它!
秒杀高并发排队神器,当年做电商秒杀,数据库行锁直接被打到 奄奄一息。Redis 一出马,线程乖乖排队,老板再也不用担心超卖。
一、分布式锁
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
秒杀高并发排队神器,
当年做电商秒杀,数据库行锁直接被打到奄奄一息。
Redis 一出马,线程乖乖排队,老板再也不用担心超卖。
// Maven 依赖
注解
1.tryLock带时间参数,防止死锁。
2.finally释放锁,避免“占着茅坑不拉屎”。
3. 集群场景用RedLock,主节点挂了也能继续嗨。
二、计数器:2 万 QPS 的救火队长
直播在线人数用数据库UPDATE?
直接 200 QPS 就跪。
Redis 的INCR让在线人数像坐火箭一样飙升。
Jedis jedis = new Jedis("redis://127.0.0.1:6379");String key = "rate_limit:user:" + userId + ":minute";long count = jedis.incr(key);if (count == 1) { jedis.expire(key, 60); // **首次创建,设 60 秒过期**}if (count > 100) { throw new RuntimeException("手速太快,歇会儿!");}
注解
1.incr原子自增,天然抗并发。
2.expire只在第一次设置,避免每次请求都刷新 TTL。
3. 100 次/分钟阈值可配置,灵活限流。
三、排行榜:ZSET 的凡尔赛舞台
年度博主排行?数据库跑 3 小时,ZSET 5 分钟搞定。
关键是还能实时更新!。
// 点赞一次,分数 +1redisTemplate.opsForZSet() .incrementScore("blog:like:rank", "user:1001", 1);// 取前 10Set
注解
1.incrementScore原子操作,并发点赞不丢分。
2.reverseRangeWithScores一次取出成员和分数,减少网络往返。
3.reverseRank查排行 O(log n),再多人也不怕。
四、轻量消息队列:异步快递员
订单高峰 10 倍流量?
把订单先丢 Redis List,后台慢慢消费,爆仓不存在的。
// 生产者jedis.lpush("order_queue", JSON.toJSONString(order));// 消费者while (true) { List
注解
1.brpop阻塞读取,CPU 不空转。
2. 失败消息进入retry 队列,可配合延时策略。
3.List 队列简单可靠,但没有 ACK,需自己实现重试。
五、会话共享:分布式登录管家
用户在 A 机器登录,跳到 B 机器就掉线?
用 Redis 做统一 Session 仓库,妈妈再也不用担心我踢用户下线。
# application.ymlspring: session: store-type: redis timeout: 30m redis: host: 127.0.0.1 port: 6379
注解
1.spring-session-data-redis一行配置搞定。
2.SessionID 随机的 UUID + 签名,防伪造。
3. 每次登录重新生成 SessionID,旧 Session 秒失效。
六、地理位置:附近门店秒查
“附近 5 公里有啥好吃的?”
Redis GEO 一出手,5 倍速出结果。
// 添加门店坐标redisTemplate.opsForGeo() .add("shop:locations", new Point(116.4074, 39.9042), "shop:1001");// 查 5 公里内,由近到远GeoResults
注解
1.GEOADD一次可插多条,批量效率高。
2.GEORADIUS默认 O(N),但 Redis 用geohash + 跳表,N<10W 稳稳的。
3. 距离单位支持m/km/ft/mi,国际化项目无压力。
七、野路子合集:老码农私货
7.1 滑动窗口限流
String key = "rate_limit:user:" + userId;long now = System.currentTimeMillis();// 清理 60 秒前记录redisTemplate.opsForZSet() .removeRangeByScore(key, 0, now - 60000);// 记录当前时间戳redisTemplate.opsForZSet().add(key, String.valueOf(now), now);// 统计窗口内请求数Long cnt = redisTemplate.opsForZSet().zCard(key);if (cnt > 50) throw new RuntimeException("刷太快,小黑屋见!");
注解
1.ZSET 按时间排序,天然滑动窗口。
2.removeRangeByScore批量清理,O(log n)。
3.zCard计数,内存占用极低。
7.2 乐观锁抢购
jedis.watch("stock:1001");int stock = Integer.parseInt(jedis.get("stock:1001"));if (stock > 0) { Transaction tx = jedis.multi(); tx.decr("stock:1001"); List
注解
1.watch + multi + exec保证原子减库存。
2.exec 返回 null即版本冲突,自旋重试即可。
3. 适合秒杀库存少、冲突高的场景。
至此分享完毕,希望以上内容对你有所帮助!
相关攻略
抓住“避免缓存缺失、控制并发查库、保护数据库”这三个关键点,就能应对绝大多数高并发挑战。 上一篇推文《缓存击穿:热点Key突然“失踪”?这两招教你稳住阵脚!》结尾,我们预告了Redis缓存三大难题中
今天我们吃透了缓存穿透的原理、危害和解决方案,其实它和缓存击穿、缓存雪崩并称为“Redis缓存三大难题”——三者看似相似,实则核心差异很大,解决方案也各有侧重。 在Redis缓存的实际应用中,咱们常
今天,我们不拉清单、不列一二三,直接复盘一下:一个 50MB 的大 Key,是如何在几秒钟内完成“完美谋杀”的。 在后端圈子里,有个冷知识:击垮一个千万级并发系统的,往往不是黑客的攻击,而是某个程序
Agent 能做的真正有价值的事情,比在灌水论坛里抖机灵多太多了。Redis 作者 Antirez 用 Agent 20 分钟搞完了自己以前需要写一个周的 Streams internals 功能,
新智元报道编辑:倾倾【新智元导读】昨夜,编程界「最后一位武士」Antirez放下手中刀:手工写码,已不再明智。当Redis之父都开始把代码外包给Claude,你还在固执「纯手写」?别做2026年的「
热门专题
热门推荐
IT之家 3 月 30 日消息,彭博社记者马克 · 古尔曼昨天在最新一期《Power On》通讯中表示,他对苹果首款折叠屏手机 iPhone Fold 寄予厚望。他表示,这款手机将成为“iPhone
3月29日消息,Intel全新的Arrow Lake Refresh系列处理器酷睿Ultra 200S Plus已经于3月26日正式上市,包括酷睿Ultra 5 250K Plus和酷睿Ultra
企查查正式推出智能体数据平台(agent qcc com),可通过标准MCP协议对接阿里云百炼、扣子Coze、飞书集成平台等主流Agent平台。该平台针对AI Agent企业级应用面临的模型幻觉、上
【张雪机车获世界顶级赛事冠军】在3月28日进行的世界超级摩托车锦标赛(WSBK)中量级赛事(葡萄牙站)中,法国车手Valentin Debise驾驶张雪机车(编号53)820RR-RS车型,以领先近
IT之家 3 月 30 日消息,GoPro 上周(3 月 25 日)宣布将在 4 月 19 日-22 日的 NAB Show 2026 展会上发布新一代相机产品,搭载下一代 GP3 影像处理器。据介





