分布式锁
分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁的实现
分布式锁需要解决的问题如下:
- 互斥性
任意时刻只有一个客户端获取锁
- 安全性
锁只有持有该锁的客户端删除,不能由其他客户端删除
- 死锁
获取锁的客户端因为某些原因而宕机,而未能释放锁,其他客户端再也不能或得到该锁,而导致死锁,此时需要机制来容错
- 容错
部分节点,如redis节点宕机的时候,客户端仍然可以获取到锁,和释放锁
时间复杂度O(1)
返回值:设置成功,返回1;失败,返回0
如何解决SETNX长期有效性的问题
大量的Key同时过期,需要注意什么
如何用redis做一步队列
使用list作为队列,RPUSH生产消息,LPOP消费消息
缺点:没有等待队列中有值才会去消费
弥补:可以在应用层引入Sleep机制去调用LPOP重试
缺点:只能提供一个消费者消费
发布者(pub)发送消息,订阅者(sub)接受消息
订阅者可以订阅任意数量的频道
消息发布是状态的,无法保证可达
Redis如何做持久化
自动触发RDB持久化方式
Copy-On-Write