首页新闻招聘找找看知识库

redis缓存如何做到与数据库数据一致阿?

0
悬赏园豆:10 [待解决问题]

假设数据库有一个user表,存入redis的键为users,值为Map<id,user>。

如果不设置键的过期时间还可以做到。但是设置了键的过期时间后,当这个键过期了,
从新把数据读到Map<id,user>中,如果这时候只读了一个user,比如{id=1,name=张三,mark=90},
因为数据还没读取完,我们还没把这个map放入redis。
恰好这时有人修改了张三的数据,把mark修改成90,修改的代码逻辑是先把数据库的张三mark修改为90,然后去
redis修改users对应的map的张三的数据,但是redis中现在还没有users这个键。
所以最后造成的结果是--->数据库中:张三的mark为90 。 redis中:张三的mark为100。
这种不一致的情况该怎么解决呢?

結城リト的主页 結城リト | 初学一级 | 园豆:176
提问于:2018-02-14 11:47
< >
分享
所有回答(3)
1

你想说啥呢?只要是缓存,就没有办法保证和数据库是始终一致的,要不然你就别缓存了。

爱编程的大叔 | 园豆:27291 (高人七级) | 2018-02-14 11:58

也就是程序正常运行的情况下,也会造成数据库与缓存中数据不一致吧。

支持(0) 反对(0) 結城リト | 园豆:176 (初学一级) | 2018-02-14 12:29

@結城リト: 你往极限处想,只要是在两个地方的数据,就没有办法保证时时相同,光也是有速度的。

不要想着用缓存的优点(优点是啥?)

又没有缓存的缺点?(缺点是在系统中可以忽略或者无所谓或者可以忍受的)。

缓存是用来保存不常变动的数据,用以减轻数据库负担,如果你一直检查,一直更新的话,数据库负担一点都没有减轻,甚至更高了,你还要缓存作甚?

支持(0) 反对(0) 爱编程的大叔 | 园豆:27291 (高人七级) | 2018-02-14 14:24
0

在必要的时候进行刷缓存操作,比如修改用户数据完成时刷一下缓存

杨柳清风 | 园豆:204 (菜鸟二级) | 2018-02-24 14:00

嗯,定时刷新缓存数据,允许一段时间内数据与数据库数据有误差。

支持(0) 反对(0) 結城リト | 园豆:176 (初学一级) | 2018-03-13 14:08
0

修改数据时,就删除指定key的缓存。

再次访问时再添加缓存。并且缓存不是用来存放修改少访问多的数据么

123爱莫能 | 园豆:206 (菜鸟二级) | 2018-02-24 16:32

只是考虑下发生这种修改的情况怎么处理

支持(0) 反对(0) 結城リト | 园豆:176 (初学一级) | 2018-03-13 14:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册