Redis
2023-03-18 22:05:57 34 举报
AI智能生成
Redis总结
作者其他创作
大纲/内容
惰性删除
定期删除
Redis 过期键的删除策略
当内存使用超过配置的时候会返回错误,不会驱逐任何键
noeviction (v4.0后默认的)
不淘汰
加入键的时候如果过限,从过期键的集合中随机驱逐
volatile-random
从配置了过期时间的键中驱逐马上就要过期的键
volatile-ttl
加入键的时候如果过限,首先从设置了过期时间的键集合中驱逐最久没有使用的键
volatile-lru
从所有配置了过期时间的键中驱逐使用频率最少的键
volatile-lfu
对设置了过期时间的数据中进行淘汰
加入键的时候如果过限,从所有key随机删除
allkeys-random
加入键的时候,如果过限,首先通过LRU算法驱逐最久没有使用的键
allkeys-lru
从所有键中驱逐使用频率最少的键
allkeys-lfu
全部数据进行淘汰
内存淘汰策略
缩减键值对象: 缩减键(key)和值(value)的长度
共享对象池
字符串优化
编码优化
控制key的数量
Redis如何做内存优化
MULTI :开启事务,redis会将后续的命令逐个放入队列中,然后使用EXEC命令来原子化执行这个命令系列
EXEC:执行事务中的所有操作命令。
DISCARD:取消事务,放弃执行事务块中的所有命令。
UNWATCH:取消WATCH对所有key的监视。
相关命令
回滚
语法错误(编译器错误)
不回滚
Redis类型错误(运行时错误)
事务中出现错误的处理
redis事务
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
主从复制的作用
第一阶段是主从库间建立连接、协商同步的过程
第二阶段,主库将所有数据同步给从库
第三个阶段,主库会把第二阶段执行过程中新收到的写命令,再发送给从库
Redis 全量复制的三个阶段
repl_backlog_buffer
replication buffer
Redis 增量复制的流程
RDB文件小,AOF文件大,传输RDB降低主库网络带宽的消耗
RDB文件存储的都是二进制数据,从库直接按照RDB协议解析还原数据即可,速度会非常快,而AOF需要依次重放每个写命令,这个过程会经历冗长的处理逻辑,恢复速度相比RDB会慢得多
使用AOF做全量复制,意味着必须打开AOF功能,打开AOF就要选择文件刷盘的策略,选择不当会严重影响Redis性能
Redis 为什么主从全量复制使用RDB而不使用AOF
主从同步/复制
监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。
自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
配置提供者(Configuration provider):客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址。
通知(Notification):哨兵可以将故障转移的结果发送给客户端。
哨兵实现了什么功能
哨兵实例之间可以相互发现,要归功于 Redis 提供的 pub/sub 机制,也就是发布 / 订阅机制。
Redis 哨兵集群是通过什么方式组建的
分布式算法 - Raft算法
Redis 哨兵的选举机制
哨兵模式
数据分区,突破了 Redis 单机内存大小的限制,存储容量大大增加,每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力
高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似) ;当任一节点发生故障时,集群仍然可以对外提供服务
集群的作用
Redis集群引入了哈希槽的概念
Redis集群有 16384 个哈希槽( 编号0-16383)
集群的每个节点负责一部分哈希槽
每个Key 通过 CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作
集群模式的数据分片
集群模式的主从复制模型
Cluster群集
缓存穿透
缓存穿击
缓存雪崩
Redis缓存有哪些问题,如何解决
可以充分利用服务器 CPU 资源,目前主线程只能利用一个核
多线程任务可以分摊 Redis 同步 IO 读写负荷
Redis6.0为什么要引入多线程
Redis集群
读写性能优异
数据类型丰富
Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
原子性
丰富的特性
持久化
Redis支持发布/订阅模式
发布订阅
分布式
为什么用Redis
为什么Redis 是单线程的以及为什么这么快
热点数据的缓存
限时业务的运用
计数器相关问题
分布式锁
Redis 一般有哪些使用场景
可以是字符串、整数或浮点数
结构存储的值
对整个字符串或字符串的一部分进行操作;对整数或浮点数进行自增或自减操作;
结构的读写能力
String
包含键值对的无序散列表
包含方法有添加、获取、删除单个元素
Hash
一个链表,链表上的每个节点都包含一个字符串
对链表的两端进行push和pop操作,读取单个或多个元素;根据值查找或删除元素;
List
包含字符串的无序集合
字符串的集合,包含基础的方法有看是否存在添加、获取、删除;还包含计算交集、并集、差集等
Set
和散列一样,用于存储键值对
字符串成员与浮点数分数之间的有序映射;元素的排列顺序由分数的大小决定;包含方法有添加、获取、删除单个元素以及根据分值范围或成员来获取元素
Zset
HyperLogLogs(基数统计)
Bitmaps (位图)
geospatial (地理位置)谈
三种特殊的数据类型
Redis 五大数据类型
Redis 的对象机制(redisObject)
save命令
bgsave命令
手动触发
自动触发
触发方式
RDB(默认)
Always:同步写回:每个写命令执行完,立马同步地将日志写回磁盘
Everysec,每秒写回:每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘
No,操作系统控制的写回:每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。
AOF
混合
Redis 的持久化机制
Redis
0 条评论
回复 删除
下一页