【每天都在BATJ面试】缓存与数据库不一致怎么办?

327 阅读2分钟

昨天的问题有答对的吗?今天的面试题又来了哦!

缓存与数据库不一致怎么办?

把你的理解和答案发在评论区吧,关注我一下,答案下期揭晓。


上期问题

使用redis如何设计分布式锁?说一下实现思路?使用zk可以吗?如何实现?这两种有什么区别?

答案

redis: 1.线程A setnx(上锁的对象,超时时的时间戳t1),如果返回true,获得锁。

2.线程B 用get获取t1,与当前时间戳比较,判断是是否超时,没超时false,若超时执行第3步;

3.计算新的超时时间t2,使用getset命令返回t3(该值可能其他线程已经修改过),如果t1==t3,获得锁,如果t1!=t3说明锁被其他线程获取了。

4.获取锁后,处理完业务逻辑,再去判断锁是否超时,如果没超时删除锁,如果已超时,不用处理(防止删除其他线程的锁)。

zk: 1.客户端对某个方法加锁时,在zk上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点node1;

2.客户端获取该路径下所有已经创建的子节点,如果发现自己创建的node1的序号是最小的,就认为这个客户端获得了锁。

3.如果发现node1不是最小的,则监听比自己创建节点序号小的最大的节点,进入等待。

4.获取锁后,处理完逻辑,删除自己创建的node1即可。

区别:zk性能差一些,开销大,实现简单。

你答对了吗?每答对还不快点点赞收藏,下次去大厂面试,考到的就是这道题!!!