如果写一个多级的获取数据的问题?

osc_47904062 发布于 05/24 13:49
阅读 675
收藏 0

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

系统中,如果有一个字典服务。有三个部分

1. 全部存在redis中

2.代码中caffeine中存一份

3.代码中的map存一份

4.从数据库获取

想问的是,提供给别人调用的时候,最先从redis拿,如果redis挂了,从caffeine中取,如果caffeine也挂了,从map中取,一直到最后才从数据库中取。

这个怎么优雅点实现,,,不能只是使用if else,能否好扩展点。对于调用者 他关注就是调用的结果。提供者 怎么优雅实现。大佬们能否给个示范。

加载中
0
1
1767028198

redis和caffeine 可以考虑aop,map和db放到业务代码中,

0
osc_87499782
osc_87499782

多级缓存的优雅实现? 看看这个是不是你想要的

http://stepdebug.com/question/21.htm

osc_47904062
osc_47904062
是啊。。。好牛。是个不错的回答。
0
d
dever2011

后续的缓存同步问题讷,怎么解决?肯定是数据库有更新了,要把数据同步给redis、caffeine 、map

osc_47904062
osc_47904062
其实只要get就好了。
osc_47904062
osc_47904062
这个关系不大。你在做实体增删改查的时候,往redis和caffeine里放就可以了。
0
kakai
kakai

多级缓存涉及的最大问题就是集群负载均衡时访问不一定在同一台机器上,所以caffeine、map这类本地缓存在负载均衡模式下要保证与redis的数据一致是非常麻烦的。

osc_47904062
osc_47904062
您说的很对。一致性问题确实好麻烦。
0
湖水没了
湖水没了

可以参考下j2cache的实现 你的map这一层和caffeine这一层 留一层就可以的 难点不是取 而是更新

osc_47904062
osc_47904062
我就是想知道怎么写。代码水平比较弱。。。
0
maradona
maradona

设计一个接口,继承spring的order接口,三个获取数据方式的实现类,注入到集合中,按顺序遍历集合就好了

0
sprouting
sprouting

设计的这么复杂,做同步的时候太麻烦了,也容易引发其他的问题

0
魔力猫
魔力猫

代理模式,或者包装模式,把读取和写入一层层包起来。通过spring配置进行增减。

0
果树
果树

spring cloud cache就可以了,如果在此基础上海要实现内存缓存,就在实现一下接口。 
使用的时候,注意事务,不要影响到事务,原则上使用缓存的业务是不关心原子性的。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部