Redis分布式|分布式锁、缓存一致性与微服务集成

厨子大约 2 分钟数据库原创技术面试题解析Redis分布式微服务架构程序厨面试题

相关答案,可以联系 iamchuzi 获取

6.Redis分布式

6.0 Redis可以做消息队列吗?

6.1 并发访问(原子)

6.2 Redis 实现分布式锁

单个节点上的锁

分布式锁的实现需要两个条件

  • 保证加锁和解锁的原子性

  • 在共享存储上设置锁变量,必须保证锁变量的可靠性

实现分布式锁的方法

使用setnx 函数,完成分布式锁

但是这个函数有两个问题

  1. 没有id,有可能 A 加的锁,被B 给解了

  2. 加锁之后,A线程崩溃,导致锁一直未被释放

解决方法,给每个线程设置一个id,解析还需系铃人

给锁的设定设置一个有效时间,到期未解锁,则进行,主动释放。注意上诉操作要保证原子性

多个节点的锁

Redlock 算法的基本思路,是让客户端和多个独立的 Redis 实例依次请求加锁,如果客户端能够和半数以上的实例成功地完成加锁操作,那么我们就认为,客户端成功地获得分布式锁了,否则加锁失败。

缺点是锁比较重,降低业务效率。

http://zhangtielei.com/posts/blog-redlock-reasoning.htmlopen in new window