Bota5ky

缓存

如何降低内存穿透风险?

布隆过滤器(英語:Bloom Filter)是1970年由布隆提出的。 它实际上是一个很长的二进制向量和一系列随机映射函数。 布隆过滤器可以用于检索一个元素是否在一个集合中。 它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

通过Redis实现一把安全可靠的分布式锁

SET 'resource_name' 'my_random_value' NX PX 30000

resource_name:锁的key

my_random_value:键值应该为随机数,便于唯一指定地释放,也可以防止超时后误释放别人的锁

NX:表示只有当key不存在的时候才能设置成功

PX:表示该键值信息会在指定时间之后自动删除

  1. 但是很明显,单个Redis实例存在单点故障问题,即一旦Redis发生故障,就会导致整个分布式服务不可用
  2. 这个时候你可能会想为该Redis添加Slave节点,以便实现故障转移,但是这里有一个陷阱,虽然添加从节点后,该实例会成为Master,其会进行主从复制,但是这个过程是异步的,也就是说主节点的锁信息还未能同步到从节点便发生故障后,重新选举出来的主节点不一定有锁信息,就会导致其他服务重新获得锁,出现多个服务获得同一把锁的情况
  3. 采用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

posted @ 2023-03-20 23:01  Bota5ky  阅读(13)  评论(0编辑  收藏  举报