如何设计redis缓存的key,便于多个业务方法进行查询

    目前在做一个订单系统,因为用户经常根据id查询订单信息所以我们在对应的方法加上了缓存的注解,对应的缓存key为:orderinfo:{orderId},随着系统的复制程度上升,我们发现商机端也会经常查询订单信息,不过商家是根据订单状态查询的比较多,于是我们又在商家查询的方法上添加了缓存注解生成的key为:orderinfo:status:{status},随着系统不断复杂,我们不断的添加缓存key。

    这样系统的反应是变快了,但是我们发现,这严重的加重了我们的开发工作,因为有很多方法涉及到订单状态的变更,比如用户确认收货,商家发货,快递派送等都会去更新订单状态,于是每个方法我们都不得不主动的去删除对应的缓存key。就会有很多重复代码,比如更新完成后删除key:orderinfo:{orderId} ,orderinfo:status:{status},后面在其他地方添加了缓存注解的画,也要返回这里加上清除缓存的代码,这样稍有不慎,忘记加清理缓存的代码的话,redis上的数据因为没有及时清除都会发生和mysql数据不一致的情况。即使是使用了5分钟自动失效的方式,也会存在redis的数据和mysql数据不一致的情况。

回到起点,我觉得我们的key设计的不合理,但是我们却没有太好的方法,大家是如何处理类似的场景?

 

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^