徒:这个问题是我提的,因为在使用中一方面是用Cacheable写入缓存,另一方面是通过redistemplate写入获取。部分请求,需要跨模块访问API对应的cache部分,确保缓存不失效。模块越多,缓存提高了不少效率,但是链路层太复杂。所以才提及解耦的说法。可以的话,想问问你们项目中是怎么用redis的
旺仔:缓存这块有好几种缓存,比如本地缓存,redis缓存,分布式缓存,但是使用的场景是场景是不一样的。上面这个同学说的跨模块访问,是指的跨模块访问redis?缓存肯定是会有实效时间的,也有相应的策略,要结合业务场景去看。
有一句很经典的话,缓存很好用,但缓存不是不要钱的,高频率的访问,比如循环访问,会带来很大的负载,系统会很卡,也有可能内存溢出,导致节点重启。
Mr:赞同,曾经有树型结构,我放redis,需要递归计算,结果内存。。。
徒:hutools里面有个treeutil类,执行效率很高,递归处理树形结构数据,源码可以参考一下,很简洁。
旺仔:递归,跟循环调用这种都是比较坑的用法
Mr:改成迭代太考验算法基础了,快速开发的时候没想,不过迭代也会出问题,后来换的解决方案
旺仔:都这样,所以需要代码评审和监控,评审是东西出去前,监控是及时发现之前没有发现的问题
徒:你那边有没有相关场景描述一下,分布式缓存这块,少量修改,读取频繁的部分数据。数据量一般不会太大,8到15K左右。一方生成,多方使用
旺仔:怎么说呢,场景有点多,不太好细说,缓存的话,前端有缓存,这部分我不是非常了解,因为前后端分离主要搞后端部分,后端的业务层的话(mvc)层用的比较多是redis,其实redis也是服务器和数据库之前的一个分布式缓存,除了redis还做了分片,让每一个缓存实例都不大,但是实例数目比较多,实现负载均衡,防止单个实例称为瓶颈或者热点,如果一个实例挂了,影响面会小很多,高可用性大大增强。分片的算法是基于一致性哈希写的,这块我也还在学习。部署层面的话,其实redis的集群Cluster也有相应的效果
不过现在给客户部署,reids一般都是按照哨兵模式去做的部署



