redis深度历险
一、基础和应用
HyperLogLog数据结构,可以用来估数,可以解决很多精度不高的统计问题。
布隆过滤器:专门用来解决去重问题,空间上还能节省90%以上,只是稍微有点不精确,存在一定的误判概率。
可以把布隆过滤器理解为一个不怎么精确的set结构,当你使用它的contains法判断某个对象是否存在时,它可能会误判。
但是布隆过滤器也不是特别不精确,只要参数设置得合理,它的精确度也可以控制得相对足够精确,只会有小小的误判概率。
布隆过滤器说某个值存在时,这个值可能不存在,说某个值不存在时,那就肯定不存在。
Redis官方提供的布隆过滤器到Redis 4.0提供了插件功能之后才正式登场。布隆过滤器作为一个插件加载到 Redis Server 中,给 Redis 提供了强大的布隆去重功能。
布隆过滤器的正确率可以使用如下参数配置:
error_rate:错误率。
initial_size:预计放入的元素个数,当实际数量超过这个数时,误判率会迅速上升。
1、迁移
redis迁移的单位是槽,redis一个槽一个槽的进行迁移,当一个槽进行迁移时,这个槽就处于中间过渡状态。这个槽在源节点的状态是migrating,在目标节点的状态是importing。
大致流程如下:从源节点获取数据---存到目标节点---删除源节点数据。
migrate迁移指定会stop the world,直到收到Migration Done,并且删除源节点迁移的key才会执行后续指令,Migrating Redis是原子性的。
而Importing Redis由于redis本身就是单线程的,同样是在处理迁移操作后再处理其他请求,因此处理数据迁移同样也是原子的。
cluster有两个特殊的error指令,一个是MOVED,一个是ASKING,
MOVED指令是用来纠正槽位的,ASKING指令是用来临时纠正槽位的。
2、过期策略
redis会将每个设置了过期时间的key放入一个独立的字典中,以后会定时遍历这个字典来删除到期的key。
除了定时遍历之外,它还会使用惰性策略来删除过期的key。
从节点不会进行过期扫描,从节点对过期的处理是被动的,主节点会在key过期时,在AOF文件增加一条del指令,同步到所有从节点,从节点通过执行这条del指令来删除过期的key。