开发者社区> 问答> 正文

Java缓存设计求助

我遇到的问题!不知道各位是如何解决的!
比如一张用户表
有 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.超时不清除索引关系(这样在做查询列表的时候还要遍历检查这个对象在缓存中是否存在不存在查库再加入缓存感觉代价很高)
有么有好的方案

展开
收起
落地花开啦 2016-02-19 17:34:36 2794 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    你这等于就是把缓存做数据库来用,所以那个超时移除可以去掉了.
    至于那些不常用的数据,可以想办法做到要用到时加载,不用时剔除,这块才是你需要设计的地方,比如说针对这种数据启用超时.

    2019-07-17 18:44:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载