【无标题】

【时间】2021.11.24

【题目】【《Redis深度历险》读书笔记(4)】应用(1-4)分布式锁、延时队列、位图、HyperLogLog

本栏目是《Redis深度历险:核心原理和应用实践》的读书笔记。

目录

一、简介

二、一些重点图

1、HyperLogLog原理图

三、思维导图


一、简介

        本章主要主要介绍了Redis 分布式锁、延时队列、位图、HyperLogLog的应用。

  1. 分布式锁:使用setnx+expire实现悲观锁,更进一步,使用set key true ex 100 nx实现两条指令的原子性。几个问题的解决:1)不加expire时可能会出现死锁问题(意外无法del时);2)使用expire时会出现超时问题,书籍中没有给出根本解决方法,只是建议加锁后的操作不要太复杂从而避免超时,以及set key 时value使用随机数而不是true,后续del时比较是否是该随机数再del以避免超时造成的连锁反应。
  2. 延时队列:1)通过rpush+lpop实现普通消息队列;2)通过blpop阻塞读实现阻塞队列;3)延时队列:使用有序集合实现,将到期时间作为score,相关指令 zadd 、zrangbyscore、zrem。
  3.   位图:主要是为了节约空间,相关指令:bitget/bitset,统计和查找bitcount/bitops
  4. HyperLogLog:可用于不精确地统计UV,原理是通过一系列随机数的中低位连续0个数的最大值来估计集合中随机数的数目,相关指令:pfadd,pfcount

二、一些重点图

1、HyperLogLog原理图

【无标题】

k和 N 的对数之间存在显著的线性相关性:

N=2^k  # 约等于

为了精确,使用多个桶,并对各个桶的k进行调和平均,再估计最后的N。

【无标题】三、思维导图

【无标题】

 

上一篇:[BZOJ4664]Count


下一篇:linux命名小技巧(持续更新)