目录

关于缓存

第一步不用cache

1,可以不用缓存,数据库优化,应该可以抗的住


目录树,cms属于必然加载的东西,而且更新不大,可以考略cache本地,然后一段时间cacheput

产品页面其实最想缓存,然而问题很大

打折信息,在优产品的地方就有她们(5join信息,最终也要9query)也不经常变化

可能会在第一步使用





第二步

2,管理后台更新后直接刷新远程各个网站的数据,并且要求一定刷新成功,数据同步有延迟,刷新时间也要求有延迟(3秒后应该在执行刷新缓存的问题,这样基本所有数据库都同步完成)

cache key采用统一标准,并且有专门的rest请求来刷新cache,手工/自动保存数据

如果刷新cache放在repo层次

如果cache放在service

如果cache放在aop层(拦截service savedeleteupdate

如果cache放在controller


还有统一管理cache的连接,直接手工刷新cahce



实际操作流程


所有前端都保留一个开放的rest接口,并且rebot.txt禁止收录

前段不该保存一个永久的cache,即使没人刷新,也要自动刷新,只不过时间久一点比如一天一次


如:https://sale.cool/cacheReset/categoryTree


cacheRest为固定前缀,categoryTree为方法名,方法内部调用cachePut标注的方法

@CachePutname=“category”,key=“tree”)

Public Tree(){return tree}


还有cache Delete rest服务


Interface method可以cache,不过key值是个问题,好像不能用enum



标准是这样的:

Cache层其实位于reposervice之间,放在data package中,单独分出一层叫cachelableRepo,这里建立cacheservice中建立一个cacheManagerService(用来刷新,清除cache)最终被controller调用



我的方法(粒度很大),简单粗暴,问题多

cache放到service,且schedulerestcontroller调用手工刷新



* cachable应该直接注解在mapperrepo上,少写一层

cacheserviceManager依然需要,统一刷新,删除cache

难点:无法判断刷新的方法并且调用



repo上的cache貌似只能清理,不能刷新,清理直接spring cache manager即可

刷新可以采用,先清理,再重新调用的办法,cachemanagerservice需要分开管理catproductdiscount

各种细节依然要把握好

还有30天重建所有缓存,防止脏数据不断在内存积累

用不用缓存,repo层悬殊很大

必须穷举所有用到的缓存

缓存不能存关联表,只能缓存自己



缓存问题已经可以通过远程解决!!,天真了

缓存需要很小的粒度,和mybatis的延迟加载还有冲突。。。

第一步就忘了它吧,只保留目录和cms的缓存吧



!!!mybatis延迟加载不能被cache,否则deserialize后无法执行,要么直接join,要么改为egar

,这种结果其实是合理的,既然缓存,却是lazy(调用的时候还有sql语句),证明缓存失败了