我们的项目现在使用redis作为多种业务的数据存储
我们的做法是将不同的业务存储在不同的db中。比如Tonken存储在db0,点赞数据在db1,缓存在db2。这种做法的好处是不同的业务数据可已完全分开。
但是在高并发下这种方式出现了问题。在核心存取redis的类中要不停的切换db,但是在高并发不同db读取时会出现脏读的情况。
后来咨询了一下其他公司的人,他们表示要将所有的数据都存在db0中,使用给key加前缀的方式来区分业务。其他的db只用来做备份使用。
我就想问一下有经验的开发人员,在你们的项目中是全部使用db0还是有更好的方式去解决切换脏读的问题。
没有接触过真实的高并发项目的就先不要发言了,在这里先谢谢大家了。
一个,不然有坑爹的改了长连接上的db忘记改回来就惨了
######你的意思就是有人要犯错误,我们就要提前为他将来犯错误做好准备?######搞个redis集群,合理设计key,如果有必要可对key进行一致性hash计算,尽可能的分散读写,一致性hash一般可以解决脏读的问题
######回复 @啊哼哼 : 集群跟使用一个差不多,redis cluster好像本身实现了一致性hash######就算搞集群是不是也都要使用一个DB0######搞个redis集群,合理设计key,如果有必要可对key进行一致性hash计算,尽可能的分散读写,一致性hash一般可以解决脏读的问题
抱歉!误导你了,redis集群好像本身实现了一致性hash,应用应该不需要额外再去弄一个一致性hash了
######可以多个不过代码中不要通过切换连接操作的库,而是不同的库使用不同的连接池,操作哪个库,就从哪个连接池获取连接######放一个db里面,然后加个业务前缀标识,这样可以,不过这样如果出现宕机或者某个业务有问题可能影响多个其他业务,建议核心业务使用单独的redis实例。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。