缓存陷阱

场景


   促销满减活动需求,例如满200减100,满100减20 ,这样可以配置满减的阶段,以及计算非满减和满减后的价格进行结算。
接口设计
   在设计过程中需要这样的一个接口,获取该电子书参与的所有促销的活动(为了扩展限时抢活动),并且为了扩展满减需要设置满减池子,也就是把参与满减的书籍放到满减的池子中。
错误地方
   在与之相关的业务逻辑,需要判断该书是否在满减书籍的池子中,当时没有过多的思考,满减池子中的书籍已经做了缓存,我直接从缓存中取出来,通过productIds.contains(productId),也就是每个书籍的id都要去判断一次,当把满减池子中的书籍加到不到19w的时候,性能上就出现了问题,也即是池子中的Id数量为19w,判断某一个Id是否在其中。 


改版第一版本
   由于上次的问题,所以把判断放到了db,通过书籍池子中的唯一标识和该本书的productId 来查找该电子书的内容,同时对该书籍添加了缓存,以及对该数据是否参与满减活动添加了缓存。通过测试,当满减书籍的池子19w的时候,测试结果:ELK监控数据hpi访问量每30秒访问数最高8000,最后稳定在7000左右,访问量为高峰期的2倍左右。 服务器监控cpu稳定在15%,服务器正常 ,服务器端平均每秒处理事务515.90。


改版第二版本

   线上当满减的池子设置的非常小时,倒是出现了问题,报大量的数据库连接超时问题,问题所在一部分在于,添加缓存的时候,当获取满减池子书籍为空的时候没有添加缓存,也就是只有参与满减的活动才有缓存,而没有参与满减活动的电子书则没有缓存(CollectionUtils.isNotEmpty,添加了是否为空的判断,则丢了一部分缓存),在添加缓存之前判断了,造成大量的数据库访问。


   之前设置的缓存失效时间为15min,当缓存大量同时失效的时候,会造成缓存同时构建,同时访问数据,造成对db访问的压力。
   于是在缓存失效的时候添加一个随机数,这样就不会缓存同时失效,减少同时访问db的压力。
code如下
masterRedisTemplate.expire(columnMediaIdCacheKeyFlag,
      Constans.CACHE_EXPIRE_TIME_OF_MEDIA_PROMOTION_FLAG
        + RandomUtils.nextInt(100), TimeUnit.SECONDS);


参考文章:http://blog.youkuaiyun.com/black_ox/article/details/28424371


   总结:

   不晓得错过了什么,不晓得得到了什么,人生的每个阶段都有舍得。继续go on



一、基础信息 数据集名称:Bottle Fin实例分割数据集 图片数量: 训练集:4418张图片 验证集:1104张图片 总计:5522张图片 分类类别: - 类别0: 数字0 - 类别1: 数字1 - 类别2: 数字2 - 类别3: 数字3 - 类别4: 数字4 - 类别5: 数字5 - 类别6: Bottle Fin 标注格式:YOLO格式,包含多边形坐标,适用于实例分割任务。 数据格式:图片格式常见如JPEG或PNG,具体未指定。 二、适用场景 实例分割AI模型开发:数据集支持实例分割任务,帮助构建能够精确识别和分割图像中多个对象的AI模型,适用于对象检测和分割应用。 工业自动化与质量控制:可能应用于制造、物流或零售领域,用于自动化检测和分类物体,提升生产效率。 计算机视觉研究:支持实例分割算法的学术研究,促进目标检测和分割技术的创新。 教育与实践培训:可用于高校或培训机构的计算机视觉课程,作为实例分割任务的实践资源,帮助学生理解多类别分割。 三、数据集优势 多类别设计:包含7个不同类别,涵盖数字和Bottle Fin对象,增强模型对多样对象的识别和分割能力。 高质量标注:标注采用YOLO格式的多边形坐标,确保分割边界的精确性,提升模型训练效果。 数据规模适中:拥有超过5500张图片,提供充足的样本用于模型训练和验证,支持稳健的AI开发。 即插即用兼容性:标注格式直接兼容主流深度学习框架(如YOLO),便于快速集成到各种实例分割项目中。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值