Redis
2022/1/8 19:03:45
本文主要是介绍Redis,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Redis
redis过期键删除策略
1、惰性删除:只有在访问获取key的时候才会去检查key是否过期
优势:对cpu性能消耗较低
缺点:存在大量key已过期但是没有被清除
2、定期删除:按照固定时间间隔进行扫描key进行检查是否过期进行删除key操作,并且redis底层会通过限制删除操作执行时长和频率来减少删除操作对cpu的时间影响
优势:对内存比较友好,大部分已过期的key都会删除
缺点:对cpu消耗较高
淘汰机制
1、volatile-lru:从设置过期时间的数据集中删除最近最少使用的数据淘汰
2、volatile-ttl:从设置过期时间的数据集中删除即将过期的数据进行淘汰
3、volatile-random:从设置过期时间的数据集中随机删除数据进行淘汰
4、allkeys-lru:当内存不足以容纳新写入的数据时,移除最近最少使用的key
5、allkeys-random:从数据中任意选择数据进行删除
6、no-eviction:当内存不足以容纳数据时,新写入数据会报错
4.0版本新增
7、voiatile-lfu:从设置过期时间的数据集中删除不经常使用的数据进行淘汰
8、allkeys-lfu:当内存不足以容纳新写入的数据时,移除不经常使用的key
redis线程模型?
Redis基于Reactor模式开发了自己的网络事件处理器。被称为文件事件处理器,由于这个处理器是单线程的所以决定了redis是单线程的。
组成:
-
- 多个socket
- IO多路复用程序
- scocket队列
- 文件事件分配器
- 事件处理器(连接应答处理器,命令请求处理器,命令回复处理器)
**注:**多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将 socket 产生的事件放入队列中排队,事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理。
缓存雪崩、缓存穿透、缓存击穿?
缓存雪崩:同一时间大量缓存失效,导致后面的请求到落在了数据库,造成数据库短时间内承受大量请求从而可能发生服务器宕机
解决:
1、将缓存过期失效时间分散,防止统一时间大量缓存失效
2、缓存预热,防止一上来就直接宕机
3、互斥锁,如果数据已经不存在,就拦截后面的请求,不在请求数据库
4、给每一个缓存增加一个缓存标识,记录是否失效,如果失效,就重新更新缓存(性能消耗较大)
缓存击穿:请求缓存中肯定不存在的数据,从而将请求落在数据库中
解决:
1、拦截不合理的请求数据
2、数据库中不存在的数据,也要设置缓存
3、布隆过滤器
缓存击穿:针对缓冲中的一个热点数据,在失效的瞬间将大量请求落在服务器上,导致服务器宕机
解决:
1、永不过期
2、互斥锁
redis事务实现
- MULTI :开启事务,redis会将后续的命令逐个放入队列中,然后使用EXEC命令来原子化执行这个命令系列。
- EXEC:执行事务中的所有操作命令。
- DISCARD:取消事务,放弃执行事务块中的所有命令。
- WATCH:监视一个或多个key,如果事务在执行前,这个key(或多个key)被其他命令修改,则事务被中断,不会执行事务中的任何命令。
- UNWATCH:取消WATCH对所有key的监视。
1、事务开始(MULTI)
2、命令入队
3、执行命令
redis不支持事务回滚,但会检查每个事务中的命令是否正确
WATCH命令乐观锁提供CAS机制
监听key是否改变,如果被其他客户端改变(REDIS-DIRTY_CAS),那么该机制监听到后会认为该事务的安全性已经发生改变,之后的事务不会执行,监控一直到执行exec命令
这篇关于Redis的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24Redis资料:新手入门快速指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧