使用redis存储数据的一些经验

用hash类型存储

如何存取数据?

由于redis一般是用来存放表数据的,而redis的一个hash表可以映射为一个数据库中的表。一般是直接把表名作为redis的hash的key,而每一个redis的hash表里面,通常是用主键去存每一条数据。对应联合主键的情况,一般是把每个主键拼起来拼成一个字符串作为hash表的key,然后用list去存每个数据的字段值,当然也可以不用主键。其中当然有一些类型转换的步骤。

显然以上这些操作不是单独写的业务代码,不然重复劳动太多了。我们是先把要存到redis的表放到这里一个单独的数据库缓存表中保存,然后另外编写一套代码去读这个表的信息,然后,通过得到的sql语句进行数据库查询,然后调用redis的相关api把数据存到redis,用的是hash形式,每个hash表对应的key也在那个缓存表中,以后业务代码通过调用缓存表里面的hash表的key和要查的hash表的key就能得到数据。
redis本来是用于加速查询的,当然是用在那种where条件查询而不是范围查询,所以说有一定局限性,一定要注意使用时机。

如何更新数据?

基于mysql的binlog。目前我们是用这种方式,如果说业务代码中每次增删改操作都要通知缓存表该表也更新然后重新触发一次那个存缓存操作,耦合性太强不便于修改。然后就改成解析binlog的形式。对于每次更新数据的操作,异步的调用刷新redis的方法。虽然有短时间的延迟不过还是能接受,毕竟缓存都是用在那是不要求数据强一致的业务场景。
当然,到底哪些表更新要更新缓存,这都要通过那张缓存表确定,然后确定要更新哪些hash表的数据,这里也有个定时读取缓存表数据的操作,用于保证缓存表里面的数据变动能及时的进行新增缓存和删除缓存操作。

总结

把数据库表存储为redis的hash表形式,通过一个缓存表管理和配置redis缓存信息,通过解析binlog去完成缓存和数据库信息的同步。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值