生产环境ehcache迁移到集中式redis集群

  原先项目中使用的ehcache分布式缓存,缺点是浪费内存,并且ehcache使用的是jvm进程的内存,因此内存使用很受限制。

还有就是业务中有时希望更新一个业务实体来使对应的缓存失效的场景,这种情况下如果对应业务实体缓存有多台机子那更新实体后更新缓存只能是其中一台,无法全部更新。

  基于以上几点,项目希望切换成集中式缓存。

 集中式缓存服务端架构是:网易LBS+Twemproxy+redis集群。

 缓存客户端使用的是spring Data Redis。

 由于Twemproxy代理本身不支持multi操作,因此项目中覆写了RedisCache的put方法。

我们这边项目用dubbo切分治理服务后,希望每个服务之间定义的缓存也是独立的。因此我们这边通过覆写RedisCacheManager的getCache方法,引入group组的概念。

每个具体服务模块都有一个组名,如商品模块组名:ItemCenter。

这样保证了每个服务间缓存的独立性,不同模块可以使用相同的缓存名称。


监控部分,一个是监控redis这层和业务无关的,还有就是和具体业务方有关的数据监控。

我们这边开发了一个业务层的监控,用于列出所有的cache块,列出每个业务cache块名称及相应元素对象个数。

并提供了一个清除cache块的按钮,当程序有bug时能够及时清除恢复。


spring context 4.0.8.RELEASE版本的spring data redis有个bug,当redis缓存挂掉后,正常业务访问一个缓存方法,这时由于RedisCache在做访问操作时抛出了异常,但未捕获,因此会导致整个业务访问也跟着挂掉。

最新版4.1.3.RELEASE已修复。



 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。