2023.12.26 臭宝今天早上起床没拉粑粑,so sad o(╥﹏╥)o
1.Redis为什么快?
Redis是存在内存中的,Redis是单线程的,避免上下文切换。
渐进式Rehash
Redis的所有数据都是存在一个hash数组上的,hash数组每个元素都是一个链表(所有类型都是,如String,hash,list,set,zset,bitmap),类似于hashmap的结构。
数组的长度一开始很小,随着数据不断插入,数组需要扩容,扩容后需要对所有元素进行Rehash,把1万个数据的Rehash分成1万条请求来执行,旧的hash数组和新的hash数组都可以用来查询,
因为redis是单线程的,所以在Rehash的过程中也可以对数据进行操作,避免了rehash导致卡顿的问题。
缓存时间戳
使用Redis很多情况下都需要设置过期时间,而Redis在设置过期时间的过程中,需要调用系统的时间函数,这个过程很耗费时间,所以Redis后台有个定时任务来每毫秒读取时间存到缓存,从而提高插入速度
2. Redis过期策略和内存淘汰机制
Redis过期策略:
定期删除:Redis会将所有设置了过期时间的key放到一个过期字典中,默认每秒进行10次扫描过期的key,每次扫描删除20个已过期的key,如果删除的key数量超过总数量的1/4,那么再次进行扫描。所以Redis设置过期时间时,要给过期时间加上一个随机数范围,防止定时任务持续扫描卡顿。
上面说的是主库的删除策略,从库的过期策略是,在主库的key过期删除后,会在AOF文件中新增一条del删除指令,然后把这条指令同步到所有备库,因为是异步的,所以可能会存在主从数据不一致问题。
惰性删除:过期的key在被访问的时候才删除
因为定期删除可能会存在部分过期key没有被删除的情况,所以reds的过期策略是这两种删除策略的结合。
未完待续!
标签:hash,数组,删除,过期,Redis,key,相关 From: https://www.cnblogs.com/javarook/p/17927599.html