我遇到的问题!不知道各位是如何解决的!
比如一张用户表
有 id,用户类型,帐号,密码
id: 主键
用户类型 聚集索引
帐号,密码 唯一索引
在代码中的缓存设计就会对应3个Map
id -> map1.put(id,obj)
用户类型 -> map2.put(用户类型1,set) *set中保存的是用户类型=1的所有id
帐号,密码 -> map3.put(帐号+密码,id)
这样可以很方便的把数据库关系映射在代码缓存中,可以很方便的操作!
但是有个问题就是,必须缓存整张表,并且不能做超时!
比如就上面这个例子 用3个用户 一个用户类型=1 两个用户类型=2
假如其中一个用户类型=2的超时了,他对应的缓存对象和缓存关系都应用删除!这时就存在一个问题了
就是再次查询用户类型=2的就只有一个用户了 因为用户类型关系的Map中 用户类型=2的Key存在。我就不再取查询数据库,而真实数据库存在用户类型为2的却有2个人
这种情况我想了2个方案感觉都不是很好
1.全缓存不做超时(很多不常用的数据也在缓存里 感觉有点不舒服)
2.超时不清除索引关系(这样在做查询列表的时候还要遍历检查这个对象在缓存中是否存在不存在查库再加入缓存感觉代价很高)
有么有好的方案
你这等于就是把缓存做数据库来用,所以那个超时移除可以去掉了.
至于那些不常用的数据,可以想办法做到要用到时加载,不用时剔除,这块才是你需要设计的地方,比如说针对这种数据启用超时.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。