建立缓存,防高并发代码demo

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

我在之前的博客中提到过——缓存并发,当一个key过期时,访问这个key的请求量过大,穿透到数据库.解决办法:1,分布式锁,保证每个key同时只有一个线程去查询数据库,其他线程没有获得分布式锁的权限,只需要等待.具体实现如下
@Override
public AppUser findById(Long id) {

if (redisService.exists("user:" + id)) {
    String appUserStr = redisService.get("user:" + id);
    return JSONObject.parseObject(appUserStr,AppUser.class);
} else {
    //获取分布式锁
    if (RedisTool.tryGetDistributedLock(redisService,"useridlock:" + id,Long.toString(id),180)) {
        AppUser appUser = appUserDao.findById(id);
        redisService.set("user:" + id, JSONObject.toJSONString(appUser));
        redisService.expire("user:" + id, 864000);
        //释放分布式锁
        RedisTool.releaseDistributedLock(redisService,"useridlock:" + id,Long.toString(id));
        return appUser;
    } else {   //无获得分布式锁权限时
        try {  //当前线程休眠1秒,可根据适当情况调整这个休眠时间
            Thread.currentThread().sleep(1000);
            if (redisService.exists("user:" + id)) {
                String appUserStr = redisService.get("user:" + id);
                return JSONObject.parseObject(appUserStr,AppUser.class);
            }else {
                return null;
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
            return null;
        }
    }
}

}
Redis分布式锁的写法可参考本人上一篇博客,谢谢!

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
14天前
|
缓存 NoSQL 数据库
关于高并发下缓存失效的问题(本地锁 && 分布式锁 && Redission 详解)
关于高并发下缓存失效的问题(本地锁 && 分布式锁 && Redission 详解)
29 0
|
3月前
|
存储 缓存 算法
高并发架构设计三大利器:缓存、限流和降级
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。
673 3
|
3月前
|
存储 缓存 算法
珍爱生活远离“缓存之战”——大话高并发之缓存应用技巧
珍爱生活远离“缓存之战”——大话高并发之缓存应用技巧
|
8月前
|
存储 数据采集 缓存
【运维知识进阶篇】Zabbix5.0稳定版详解9(Zabbix优化:高并发对MySQL进行拆分、Zabbix-agent主动上报模式、使用proxy代理模式、系统自带监控项优化、进程优化、缓存优化)
【运维知识进阶篇】Zabbix5.0稳定版详解9(Zabbix优化:高并发对MySQL进行拆分、Zabbix-agent主动上报模式、使用proxy代理模式、系统自带监控项优化、进程优化、缓存优化)
227 0
|
9月前
|
缓存 监控 NoSQL
Redis高并发场景(七)—缓存击穿
Redis高并发场景(七)—缓存击穿
|
4月前
|
存储 缓存 NoSQL
Redis高并发缓存介绍
Redis高并发缓存介绍
43 1
|
5月前
|
数据库
易搭工作流引擎用是什么开源 还是阿里自研产品,零代码平台场景页面映射数据库表是动态创建,采用什么框架处理,怎么让系统产生高并发能力。易搭权限有没有了解,求解。
易搭工作流引擎用是什么开源 还是阿里自研产品,零代码平台场景页面映射数据库表是动态创建,采用什么框架处理,怎么让系统产生高并发能力。易搭权限有没有了解,求解。
|
7月前
|
消息中间件 缓存 NoSQL
高并发缓存队列防止溢出解决方案
高并发缓存队列防止溢出解决方案
132 0
|
7月前
|
缓存 NoSQL 应用服务中间件
基于Redis和Nginx实现高并发缓存架构
基于Redis和Nginx实现高并发缓存架构
401 0
|
7月前
|
存储 缓存 应用服务中间件

热门文章

最新文章