redis存储关系性数据库数据

 最近公司数据库内存占用比较高,一直在着手寻找解决方案。虽然大家都知道系统架构有很多不合理的地方,但是我们是金融公司,系统庞大,业务牵扯繁多,大家都不敢轻易对系统动大手术。
    最后决定先给数据库中常用的一些静态表先加一层缓存。抛开数据库优化配置不说,数据库访问量下来了,内存肯定也不会高到哪里去。
    因为这里缓存以后会存储更多需要精细化控制的表信息,而且结合分布式场景的需要,所以选择redis来存储,而不是简单的选择mybatis的二级缓存。
    那么问题来了,怎么将数据库的信息,存到redis且又方便查询呢?
id name age date
1  zzy  18  2017
    因为场景的需求至少是根据表任意字段组合查询的,所以在选redis数据结构的时候就需要支持模糊查询。那么就只有选String数据结构了,用keys()这个函数就可以模糊查询了,这里模糊查询其实只是正则表达式匹配。
    user:id:1:name:zzy:age:18:date:2017作为key,value就是你整个数据内容了。        keys(user:*age:18*),这样就可以查询user表中age=18的数据了,拿到value就随便你怎么搞了。
    redsi的持久化,这里不需要,每次启动程序都重新加在最新的数据到cache。
    查询数据时,查询方直接连接redis查,查不到数据时再去查数据库。但是如果你查数据库没有的数据,访问会一直穿透到数据库,redis不起作用。但是别怕,你可以把没查到的数据也记录到redis,给个过期时间,至少可以过滤大量这种操作对数据库的访问。
    为了统一管理,数据的增删改都调用服务。前面先加数据库,后面再加cache,至少在调用添加服务失败时,数据库的也会因为异常而回滚。这个操作redis的服务是需要部署多机的,为了避免程序启动时重复的去加载数据库,重复的去和redis数据做对比。这里考虑了用zookeeper选举的这一特性,在zookeeper同一目录上去注册监听,谁先注册上,谁就拥有权利去加在数据库。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值