530 Star 4.1K Fork 1.7K

shishan100/Java-Interview-Advanced

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
docs
distributed-system
high-availability
high-concurrency
images
README.md
database-shard-dynamic-expand.md
database-shard-global-id-generate.md
database-shard-method.md
database-shard.md
es-architecture.md
es-introduction.md
es-optimizing-query-performance.md
es-production-cluster.md
es-write-query-search.md
high-concurrency-design.md
how-to-ensure-high-availability-of-message-queues.md
how-to-ensure-high-concurrency-and-high-availability-of-redis.md
how-to-ensure-that-messages-are-not-repeatedly-consumed.md
how-to-ensure-the-order-of-messages.md
how-to-ensure-the-reliable-transmission-of-messages.md
mq-design.md
mq-interview.md
mq-time-delay-and-expired-failure.md
mysql-read-write-separation.md
redis-caching-avalanche-and-caching-penetration.md
redis-cas.md
redis-cluster.md
redis-consistence.md
redis-data-types.md
redis-expiration-policies-and-lru.md
redis-master-slave.md
redis-persistence.md
redis-production-environment.md
redis-sentinel.md
redis-single-thread-model.md
why-cache.md
why-mq.md
images
LICENSE
README.md
克隆/下载
redis-cas.md 1.24 KB
一键复制 编辑 原始数据 按行查看 历史
jorden.li 提交于 5年前 . first commit

面试题

redis 的并发竞争问题是什么?如何解决这个问题?了解 redis 事务的 CAS 方案吗?

面试官心理分析

这个也是线上非常常见的一个问题,就是多客户端同时并发写一个 key,可能本来应该先到的数据后到了,导致数据版本错了;或者是多客户端同时获取一个 key,修改值之后再写回去,只要顺序错了,数据就错了。

而且 redis 自己就有天然解决这个问题的 CAS 类的乐观锁方案。

面试题剖析

某个时刻,多个系统实例都去更新某个 key。可以基于 zookeeper 实现分布式锁。每个系统通过 zookeeper 获取分布式锁,确保同一时间,只能有一个系统实例在操作某个 key,别人都不允许读和写。

zookeeper-distributed-lock

你要写入缓存的数据,都是从 mysql 里查出来的,都得写入 mysql 中,写入 mysql 中的时候必须保存一个时间戳,从 mysql 查出来的时候,时间戳也查出来。

每次要写之前,先判断一下当前这个 value 的时间戳是否比缓存里的 value 的时间戳要新。如果是的话,那么可以写,否则,就不能用旧的数据覆盖新的数据。

Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/shishan100/Java-Interview-Advanced.git
git@gitee.com:shishan100/Java-Interview-Advanced.git
shishan100
Java-Interview-Advanced
Java-Interview-Advanced
master

搜索帮助