缓存
如何降低内存穿透风险?
布隆过滤器(英語:Bloom Filter)是1970年由布隆提出的。 它实际上是一个很长的二进制向量和一系列随机映射函数。 布隆过滤器可以用于检索一个元素是否在一个集合中。 它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
通过Redis实现一把安全可靠的分布式锁
SET 'resource_name' 'my_random_value' NX PX 30000
resource_name
:锁的key
my_random_value
:键值应该为随机数,便于唯一指定地释放,也可以防止超时后误释放别人的锁
NX
:表示只有当key不存在的时候才能设置成功
PX
:表示该键值信息会在指定时间之后自动删除
- 但是很明显,单个Redis实例存在单点故障问题,即一旦Redis发生故障,就会导致整个分布式服务不可用
- 这个时候你可能会想为该Redis添加Slave节点,以便实现故障转移,但是这里有一个陷阱,虽然添加从节点后,该实例会成为Master,其会进行主从复制,但是这个过程是异步的,也就是说主节点的锁信息还未能同步到从节点便发生故障后,重新选举出来的主节点不一定有锁信息,就会导致其他服务重新获得锁,出现多个服务获得同一把锁的情况
- 采用Redis的集群部署方案,即有多个Master节点,采用RedLock算法
RedLock算法:向N个Redis Master循环发送锁请求信息,使用单实例命令,并设置超时时间
SET 'LOCK' '1001' NX EX 3000
获取成功的条件:
- 半数以上节点返回Success
- N次加锁请求时间小于超时时间
若超时失败,则会向所有Master节点发送释放锁的命令,并随机延迟时间后再去请求获得锁
参考文档:https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html
缓存一致性协议
内存使用DRAM的动态随机存储器,缓存使用SRAM的静态随机存储器
MESI: Modified, Exclusive, Shared, Invalid