前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分桶策略清理SpringCache中的缓存

分桶策略清理SpringCache中的缓存

作者头像
并发笔记
发布2022-08-30 11:28:41
5770
发布2022-08-30 11:28:41
举报
文章被收录于专栏:并发笔记并发笔记

背景介绍

我们使用SpringCache框架 + Redis来实现项目中的缓存实现,它能实现自动对数据缓存,也可以自动清理过期的缓存。大多数情况下,它都运行非常好。

这是因为我们需要缓存的数据,通常都是可序列化的,但是我们迟早会遇到不可序列化的对象。那么我们只能选择SpringCache中的ConcurrentMapCache才能缓存这些不可序列化的对象,但是ConcurrentMapCache呢又不提供自动清理缓存的功能。

于是我开始自己设计一个本地的、高效的、能自动清理缓存扩展,同样它能支持SpringCache。

为了高效的清理缓存,我采用分桶策略,这一设计思想来源于ZooKeeper的Session管理。分桶策略也是本文的精彩内容。

SpringCache的使用

SpringCache + Redis自动清理缓存

那么使用的时候,就只需要增加注解就行了

SpringCache + Map本地缓存

那么使用的时候,就只需要增加注解就行了

SpringCache + Map自动清理本地缓存

为了实现自动清理缓存,我继承了ConcurrentMapCache,采用分桶策略,定时清理。

  • • expirationInterval,桶的估计范围,如果为1分钟,那么1分钟内创建的缓存都存在一个桶,例如16:11:20和16:11:01,都会存放在16:12:00这个桶中。
  • • roundToNextInterval,用于根据当前时间计算,下一个桶的时间。
  • • executorService,用于清理缓存,仅仅在创建桶时,调用其该线程,并不会实时运行,占用CPU资源。

使用时,用LocalExpiryCache替换掉ConcurrentMapCache即可

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 并发笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
  • SpringCache的使用
    • SpringCache + Redis自动清理缓存
      • SpringCache + Map本地缓存
        • SpringCache + Map自动清理本地缓存
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档