在服务端的缓存使用过程中,你是否也遇到过跟我们一样的问题:
缓存没命中时引起的缓存雪崩现象、热点数据在redis节点中存在的性能瓶颈、并发引起的缓存与DB的数据不一致问题、想方便的实现二级缓存策略、想使用Hash数据结构但多数开源框架(如springCache)难以支持、缓存空值一直穿透到DB问题、想方便的实现缓存数据的自动异步刷新、批量接口无法与多数开源框架(如springCache)适配……等等
于是产生了开发出一个通用的缓存框架的想法,作为业务代码与缓存中间件之间的中间层,统一解决平时遇到的共性问题。
开源的缓存框架也不算少,但是目前还没找到一个能完全满足我们需求的框架,于是就自己动手开发了,也就是本文将要介绍的EdsCache通用缓存框架。
本文不仅仅是介绍了EdsCache,更多的是介绍EdsCache是采用什么思路、方法,去解决以上问题的,即使不打算使用EdsCache,只要对缓存使用感兴趣,应该会有一点小小的帮助:)
1. EdsCache目前支持以下功能:
· 缓存操作解耦
通过注解,解耦缓存操作与业务代码;缓存框架逻辑与具体底层缓存解耦。
· 缓解缓存雪崩问题
提供“加载等待”、“分布式锁”等功能,解决缓存雪崩问题。
· 解决缓存一致性问题
提供“一致性”功能,解决并发时出现的缓存与db不一致问题。
· 解决热点单点问题
提供“负载均衡”功能,缓解热点数据对单缓存节点造成的性能瓶颈。
· 本地缓存
提供“本地缓存”功能,并能与分布式缓存结合进行二级缓存。
· 丰富的数据类型
通过区分主key、子key,提供除简单类型外,如Hash数据类型。
· 批量模式
提供批量模式,实现缓存没命中的key,能批量从db加载。
· 解决空值穿透问题
提供空值缓存功能,并能单独指定空值的缓存时间。
· 缓存自动刷新
提供自动、异步刷新缓存的功能,并能自动停止刷新长时间没有被查询的key。
· 支持多种操作类型
提供丰富的操作类型,满足业务“只读”、“只写”等需求。
2. 问题解决思路&场景应用举例
快速开始文档、详细的注解API文档、配置手册等,
目前还在gitlab的wiki中,如果想了解更多信息,或任何疑问、建议,欢迎联系hzchenting3@corp.netease.com
本文来自网易实践者社区,经作者陈婷授权发布。