当前位置: 首页 > news >正文

redis主从模型与对象模型

redis淘汰策略

首先我们要明确这里说的淘汰策略是淘汰散列表中的key-value,而不是value中的各个数据结构

过期key中

volatile-lru
从设置了过期时间的键中,移除最近最少使用的键(LRU算法)。适合需要优先保留高频访问数据的场景。

volatile-lfu
从设置了过期时间的键中,移除使用频率最低的键(LFU算法)。适合需要根据访问频率淘汰的场景。

volatile-ttl
从设置了过期时间的键中,优先移除剩余存活时间(TTL)最短的键。适合需要优先淘汰即将过期数据的场景。

volatile-random
从设置了过期时间的键中随机移除键。适合对淘汰顺序无特殊要求的场景。

所有key

allkeys-lru
从所有键中移除最近最少使用的键,无论是否设置过期时间。适用于缓存系统,优先保留热点数据。

allkeys-lfu
从所有键中移除使用频率最低的键。适用于需要严格按访问频率管理的缓存。

allkeys-random
从所有键中随机移除键。适用于数据重要性均匀分布的场景。

禁止淘汰

allkeys-random
从所有键中随机移除键。适用于数据重要性均匀分布的场景。

持久化

因为redis数据库是内存数据库,所以在 关闭系统时如果没有把数据存在磁盘中就会失去数据。

Redis提供两种主要的持久化方式:RDB(Redis Database)和AOF(Append Only File)。两种方式各有优缺点,可根据实际需求选择或结合使用。

AOF持久化

aof 日志存储的是 Redis 服务器的顺序指令序列,aof 日志只记录对内存修改的指令记录;通过重放(replay)aof 日志中指令序列来恢复 Redis 当前实例的内存数据结构的状态;

AOF分类

always:每次操作都进行同步

every_sec:每秒都进行同步

no:没有特定同步策略,根据cache line刷到主存的策略进行持久化

AOF-rewrite

aof 持久化策略会持久化所有修改命令;里面的很多命令其实可以合并或者删除; aof rewrite 在 aof 的基础上,满足一定策略则 fork 进程,根据当前内存状态,转换成一系列的 redis 命令,序列化成一个新的 aof 日志文件中,序列化完毕后再将操作期间发生的增量 aof 日志 追加到新的 aof 日志文件中,追加完毕后替换旧的 aof 日志文件;以此达到对 aof 日志瘦身的目 的;

优缺点

优点:数据可靠,丢失较少,持久化过程代价低

缺点:aof文件过大,数据恢复慢

RDB持久化

基于 aof 或 aof 复写文件大的缺点,rdb 是一种快照持久化;它通过 fork 主进程,在子进程中将内 存当中的数据键值对按照存储方式持久化到 rdb 文件中;rdb 存储的是经过压缩的二进制数据;

先fork进程防止redis进行增删查改影响,进行写时复制,此时fork后的子进程的虚拟地址指向的物理存储空间和父进程一样,这时父进程触发写保护中断,如果有服务器连接redis进行操作就会使父进程指向新的物理内存地址。

优缺点

优点:rdb文件小,数据恢复快

缺点:数据丢失多,持久化过程代价高

redis主从复制

主要用来实现 redis 数据的可靠性;防止主 redis 所在磁盘损坏,造成数据永久丢失;

master是主redis,两个从redis,从redis会连接主redis,获取最新的数据,如果

全量数据同步

增量数据同步

redis哨兵模式

哨兵会检测主redis和从redis是否正常,如果主redis出现差错,哨兵会从从redis中选一个数据最新的做主redis并把信息传递给client

redis cluster集群

Redis cluster 将所有数据划分为 16384(2的14次方)个槽位,每个 redis 节点负责其中一部分槽位。 cluster 集群是一种去中心化的集群方式; 如图,该集群由三个 redis 节点组成,每个节点负责整个集群的一部分数据,每个节点负责的数据 多少可能不一样。这三个节点相互连接组成一个对等的集群,它们之间通过一种特殊的二进制协议 交互集群信息; 当 redis cluster 的客户端来连接集群时,会得到一份集群的槽位配置信息。这样当客户端要查找某 个 key 时,可以直接定位到目标节点。 客户端为了可以直接定位(对 key 通过 crc16 进行 hash 再对 取余)某个具体的 key 所在节 点,需要缓存槽位相关信息,这样才可以准确快速地定位到相应的节点。同时因为可能会存在客户 端与服务器存储槽位的信息不一致的情况,还需要纠正机制(通过返回 -MOVED 3999 127.0.0.1:6479 ,客户端收到后需要立即纠正本地的槽位映射表)来实现槽位信息的校验调整。 另外,redis cluster 的每个节点会将集群的配置信息持久化到配置文件中,这就要求确保配置文件 是可写的,而且尽量不要依靠人工修改配置文件;

更多资料在:https://github.com/0voice查询

http://www.lryc.cn/news/615887.html

相关文章:

  • Jmeter性能测试之检测服务器CPU/Memory/磁盘IO/网络IO
  • Flask多进程数据库访问问题详解
  • 深度学习周报(8.4~8.10)
  • ​LabVIEW键盘鼠标监控
  • Python爬虫实战:研究BlackWidow,构建最新科技资讯采集系统
  • Windows执行kubectl提示拒绝访问【Windows安装k8s】
  • 【Linux指南】Vim的全面解析与深度应用
  • nginx下lua的实现机制、Lua错误处理、面向对象
  • 系统集成项目管理工程师【第十一章 规划过程组】规划资源管理、估算活动资源、规划沟通管理和规划风险管理篇
  • 大模型时代的机器人研究趋势:从多模态融合到高效迁移
  • 在Mac上搭建本地AI工作流:Dify与DeepSeek的完美结合
  • Python爬虫实战:研究Ruia框架,构建博客园文章采集系统
  • reuse: for booting my spring project with mvn in Windows command line
  • String AOP、事务、缓存
  • Fish shell的abbr命令行参数介绍和Bat文件查看工具
  • Android 四大布局:使用方式与性能优化原理
  • Qt中的设计模式:经典的MVC,MVP和MVVM
  • 北京JAVA基础面试30天打卡06
  • 【webPack|Vite】了解常用配置,主要差异
  • 腾讯云EdgeOne Pages深度使用指南
  • 【后端】Java 8 特性 Optional 可选类 介绍
  • 7.企业级AD活动目录的备份与恢复策略
  • Celery分布式任务队列
  • opencv:图像轮廓检测与轮廓近似(附代码)
  • GoBy 工具联动 | GoBy AWVS 自动化漏扫工作流
  • 【15】OpenCV C++实战篇——fitEllipse椭圆拟合、 Ellipse()画椭圆
  • ubuntu超简单自动化Vim配置
  • (一)Tailwindcss
  • 从色彩心理学看嵌入式设备UI设计:原则、挑战与实践
  • Kafka 生产者与消费者分区策略全解析:从原理到实践