Redis精讲
redis持久化
RDB方式
Redis Database Backup file (redis数据备份文件), 也被叫做redis数据快照. 简单来说就是把内存中的所有数据记录到磁盘中.
快照文件称为RDB文件, 默认是保存在当前运行目录.
[root@centos-zyw ~]# docker exec -it redis redis-cli
127.0.0.1:6379> save # 由redis主进程来执行RDB, 会阻塞所有命令
OK
127.0.0.1:6379> bgsave # 开启子进程执行RDB, 避免主进程受到影响
Background saving started
127.0.0.1:6379>
bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据. 完成fork后读取内存数据并写入RDB文件.
fork采用的copy-onwrite技术:
- 当主进程执行读操作时, 访问共享内存
- 当主进程执行写操作时, 则会拷贝一份数据, 执行写操作.
- redis.conf文件配置
# 900秒内,如果至少一个key被修改,则执行bgsave, 如果是save "" 则表示禁用RDB
save 900 1
save 300 10
save 60 10000
# 是否压缩
rdbcompression yes
# RDB文件名称
dbfilename dump.rdb
# 文件保存的路径目录
dir ./
AOF方式
AOF全称Append Only File. redis处理的每一个写命令都会记录在AOF文件, 可以看做是命令日志记录文件.
- redis.conf配置
# 开启AOF功能, 默认no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"
# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always
# 写命令执行完先放入AOF缓冲区, 然后表示每嗝1秒将缓冲区写到AOF文件,是默认方案
appendfsync everysec
# 写命令执行完先放入AOF缓冲区, 有操作系统决定何时将缓冲区内容写回磁盘
appendfsync no

bgrewriteaof 可以让AOF文件执行重写功能, 用最少的命令达到相同效果
- redis.conf配置
# AOF文件比上次文件,增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上触发重写
auto-aof-rewrite-min-size 64mb
RDB和AOF对比

redis集群
主从集群

启动三个redis服务
- 在从节点执行slaveof命令 --5.0后新增replicaof 两命令效果一致
- 执行命令为临时生效,重启后失效, 永久方式是将命令配置在
redis.conf文件
# 连接 7002
redis-cli -p 7002
# 执行slaveof
slaveof 192.168.150.101 7001
备注: 取消主从关系 slaveof no one
- 在主节点查看集群信息
# 连接 7001
redis-cli -p 7001
# 查看状态
info replication
优化
- 在master的redis.conf文件中配置
repl-diskless-sync启用无磁盘复制,避免全量同步时的磁盘IO - redis单节点上的内存占用不要太大, 减少RDB导致的过多磁盘IO
- 适当提高repl_baklog的大小,发现slave宕机尽快实现故障恢复,尽可能避免全量同步
- 限制一个master上的slave节点数量,如果实在是太多slave,则可以采用主-从-从链式结构,减少master压力
repl-diskless-sync yes
哨兵集群

创建sentinel.conf文件
port 27001
sentinel announce-ip 192.168.150.101
sentinel monitor mymaster 192.168.150.101 7001 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
dir "/tmp/s1"
sentinel monitor mymaster 192.168.150.101 7001 2中mymaster为主节点名字, 2为选举master时的quorum值,当主节点挂了,2个sentinel认为你挂了,就选新的主节点,一般为sentinel的一半
dir为sentinel.conf所在的目录
运行sentinel
复制三份sentinel.conf,修改相应配置,启动三个sentinel服务
redis-sentinel s1/sentinel.conf
RestTemplate的哨兵模式
Spring的RedisTemplate底层利用lettuce实现了节点的感知和自动切换
- 引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
- 配置application.yml
spring:data:redis:sentinel:master: mymaster # 指定master名称nodes: # 指定redis-sentinel集群信息- 127.0.0.1:27001- 127.0.0.1:27002- 127.0.0.1:27003
- 配置读写分离
@Beanpublic LettuceClientConfigurationBuilderCustomizer customizer(){return clientConfigurationBuilder -> clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);}

分片集群
分片集群结构
可以解决的问题
- 海量数据存储问题
- 高并发写的问题
特点:
- 集群中有多个master,每个master保存不同数据
- 每个master都可以有多个slave节点
- master之间通过ping检测彼此健康状态
- 客户端请求可以访问集群任意节点,最终都会被转发到正确节点
搭建
- 创建redis.conf
port 6379
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file /tmp/6379/nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
# 持久化文件存放目录
dir /tmp/6379
# 绑定地址 0.0.0.0 -> 任何人可访问
bind 0.0.0.0
# 让redis后台运行
daemonize yes
# 注册的实例ip
replica-announce-ip 192.168.150.101
# 保护模式
protected-mode no
# 数据库数量
databases 1
# 日志
logfile /tmp/6379/run.log
- 启动
redis-server redis.conf
- 建立节点关系
redis-cli --cluster create --cluster-replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:8003
说明:
--cluster-replicas 1:指定集群中每个master的副本个数为1,此时节点总数 ÷ (replicas + 1) 得到的就是master的数量。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master
- 查看集群状态
redis-cli -p 7001 cluster nodes
- 操作集群需要加
-c参数
redis-cli -c -p 7001
散列插槽
redis会把每一个master节点映射到0~16383共16384个插槽上
数据key不是与节点绑定,而是与插槽绑定. redis会根据key的有效部分计算插槽值
- key中包含
{}且{}中至少包含1个字符,{}中的部分是有效部分 - key中不包含
{},整个key都是有效部分
例如{apper}num,则根据apper计算. 计算方式是利用CRC16算法得到一个hash值, 对16384取余,得到的结果就是slot值.
相关文章:
Redis精讲
redis持久化 RDB方式 Redis Database Backup file (redis数据备份文件), 也被叫做redis数据快照. 简单来说就是把内存中的所有数据记录到磁盘中. 快照文件称为RDB文件, 默认是保存在当前运行目录. [rootcentos-zyw ~]# docker exec -it redis redis-cli 127.0.0.1:6379> sav…...
ELFK 分布式日志收集系统
ELFK的组成: Elasticsearch: 它是一个分布式的搜索和分析引擎,它可以用来存储和索引大量的日志数据,并提供强大的搜索和分析功能。 (java语言开发,)logstash: 是一个用于日志收集,处理和传输的…...
excel批量数据导入时用poi将数据转化成指定实体工具类
1.实现目标 excel进行批量数据导入时,将批量数据转化成指定的实体集合用于数据操作,实现思路:使用注解将属性与表格中的标题进行同名绑定来赋值。 2.代码实现 2.1 目录截图如下 2.2 代码实现 package poi.constants;/*** description: 用…...
【软件工程导论】——软工学绪论及传统软件工程(学习笔记)
📖 前言:随着软件产业的发展,计算机应用逐步渗透到社会生活的各个角落,使各行各业都发生了很大的变化。这同时也促使人们对软件的品种、数量、功能和质量等提出了越来越高的要求。然而,软件的规模越大、越复杂…...
C语言编译成库文件的要求
keil编译成库文件 在Keil中,将C语言源文件编译成库文件通常需要进行以下步骤: 创建一个新的Keil项目,并将所需的C语言源文件添加到该项目中。 在项目设置中配置编译选项,确保生成的目标文件符合库文件的标准格式。 编译项目&…...
Python的模块应用和文件I/O
Python 解释 Python是一种高级编程语言,以其简洁、易读和易用而闻名。它是一种通用的、解释型的编程语言,适用于广泛的应用领域,包括软件开发、数据分析、人工智能等。python是一种解释型,面向对象、动态数据类型的高级程序设计…...
设计模式之依赖倒转原则
目录 1、 基本介绍 2、 应用实例 3、 依赖关系传递的三种方式 (1) 接口传递 (2) 构造方法传递 (3) setter方式传递 4、 注意事项和细节 1、 基本介绍 依赖倒转原则(Dependence Inversion Principle)是指: 高层模块不应该依赖低层模块,二者都应该依…...
Springboot启动后想要做某些事可以通过什么方法实现?
在Spring Boot应用中,如果你想在应用启动完成后执行一些特定的操作(例如缓存预热),可以实现CommandLineRunner或ApplicationRunner接口。这两个接口都提供了一个run方法,在Spring Boot应用上下文初始化完成后会被自动调…...
网络原理初识(2)
目录 一、协议分层 1、分层的作用 2、OSI七层模型 3、TCP / IP五层(或四层)模型 4、网络设备所在分层 5、网络分层对应 二、封装和分用 发送过程(封装) 1、应用层(应用程序) QQ 2、传输层 3、网络层 4、数据链路层 5、物理…...
【C++】每日一题 92 反转链表
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left < right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 class ListNode { public:int val;ListNode* next;ListNode(int _val) {val _val;next nullptr;} };…...
算法D39 | 动态规划2 | 62.不同路径 63. 不同路径 II
今天开始逐渐有 dp的感觉了,题目不多,就两个 不同路径,可以好好研究一下 62.不同路径 本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。 代码随想录 视频讲解:动态规划中如何初始化很重要&#x…...
面试官:如何在 Spring Boot 启动的时候提前运行一些特定的代码
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:如何在 Spring Boot 启动的时候提前运行一些特定的代码 在Spring Boot启动的时候提前运行一些特定的代码可以通过实现ApplicationRunner接口、Com…...
力扣最热100题——56.合并区间
吾日三省吾身 还记得梦想吗 正在努力实现它吗 可以坚持下去吗 目录 吾日三省吾身 力扣题号:56. 合并区间 - 力扣(LeetCode) 题目描述 Java解法一:排序然后原地操作 具体代码如下 Java解法二:new一个list…...
docker学习(十四)docker搭建私服
docker私服搭建,配置域名访问,设置访问密码 启动registry docker run -d \-p 5000:5000 \-v /opt/data/registry:/var/lib/registry \registrydocker pull hello-world docker tag hello-world 127.0.0.1:5000/hello-world docker push 127.0.0.1:5000…...
基于BERTopic模型的英文20新闻数据集主题聚类及可视化
文章目录 bertopic介绍20 newsgroups dataset20 newsgroups数据集下载数据导入nltk数据处理bertopic模型构建模型训练运行模型可视化目前主题的一致性得分语料库建模bertopic介绍 BERTopic 是基于深度学习的一种主题建模方法。BERT 是一种用于 NLP 的预训练策略,它成功地利用…...
【Oracle之DataGuard的初步学习】
** 以下所有均是基于11G版本的 ** 一、DataGuard的部署方式 DG的部署最常用的方式就是直接在备库端部署一个空库然后再设置参数,但是这样做在初始同步时如果数据量过大会耗费较长的时间;相对来说这中方式比较简单不易出错。 还有一种方式就是通过rman的备…...
PyCharm无代码提示解决
PyCharm无代码提示解决方法 在使用PyCharm工具时,调用方法却无法进行提示,针对PyCharm无代码提示整理下解决方案 1、Python内置语法无智能提示 复现:我这里以urllib库读取网页内容为例,在通过urlopen()之后调用getur…...
记一次 .NET某设备监控自动化系统 CPU爆高分析
一:背景 1. 讲故事 先说一下题外话,一个监控别人系统运行状态的程序,结果自己出问题了,有时候想一想还是挺讽刺的,哈哈,开个玩笑,我们回到正题,前些天有位朋友找到我,说…...
大数据与云计算
目录 一、大数据时代二、云计算——大数据的计算三、云计算发展现状四、云计算实现机制五、云计算压倒性的成本优势 一、大数据时代 我们先来看看百度关于 “大数据”(Big Data)的搜索指数。 可以看出,“大数据” 这个词是从2012年才引起关注…...
一. 并行处理与GPU体系架构-并行处理简介
目录 前言0. 简述1. 串行处理与并行处理的区别2. 并行执行3. 容易混淆的几个概念4. 常见的并行处理总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习下课程第一章——并行处…...
SteamAutoCrack:一键解锁Steam游戏离线运行的终极方案
SteamAutoCrack:一键解锁Steam游戏离线运行的终极方案 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack 在数字游戏时代,许多玩家面临着一个共同的困境࿱…...
【2026奇点大会语音合成终极指南】:大模型TTS技术跃迁的5大拐点与企业落地避坑清单
第一章:2026奇点智能技术大会:大模型语音合成 2026奇点智能技术大会(https://ml-summit.org) 语音合成技术的范式跃迁 在2026奇点智能技术大会上,大模型驱动的语音合成(TTS)已突破传统拼接与参数建模的边界ÿ…...
【限时解禁】某自动驾驶大模型在线学习模块源码片段(含动态LoRA路由+时间敏感缓存淘汰算法)
第一章:大模型工程化中的在线学习机制 2026奇点智能技术大会(https://ml-summit.org) 在线学习机制是大模型从静态部署走向动态演化的关键桥梁,它使模型能在生产环境中持续吸收新数据、响应分布偏移,并在不中断服务的前提下完成参数更新。与…...
如何快速掌握微生物组数据分析:面向科研人员的完整指南
如何快速掌握微生物组数据分析:面向科研人员的完整指南 【免费下载链接】curatedMetagenomicData Curated Metagenomic Data of the Human Microbiome 项目地址: https://gitcode.com/gh_mirrors/cu/curatedMetagenomicData 在当今生物信息学研究领域&#x…...
导师说我的问卷像“废纸”:毕业季的问卷设计困境,AI能拯救你吗?
每年毕业季,数以百万计的学生在图书馆、实验室和电脑前煎熬。其中最令人头疼的环节之一,就是设计研究问卷。社会学专业的小李花了三周时间设计出一份关于“00后消费观”的问卷,信心满满地交给导师审阅。 导师只扫了一眼,就指出关…...
Maxwell磁场仿真实战:无线传能线圈建模与优化
1. 无线传能线圈建模基础 第一次用Maxwell做无线传能线圈仿真时,我对着空白的建模界面发呆了半小时——到底该从哪下手?后来发现,把复杂问题拆解成小步骤才是关键。我们先从最简单的单匝圆环线圈开始,就像学画画先从画圆圈开始一…...
用TensorFlow和BERT实战:从海量安全报告中自动提取攻击技战术(TTPs)
基于TensorFlow与BERT的自动化TTPs提取系统实战指南 当安全团队每天需要处理数百份威胁报告时,人工提取攻击技战术(TTPs)的效率瓶颈就会暴露无遗。本文将展示如何构建一个能自动解析安全报告、识别关键攻击模式的智能系统,这套方案…...
告别Arduino!用VSCode+ESP-IDF给零知ESP32开发AI语音项目,效率翻倍指南
从Arduino到专业级开发:VSCodeESP-IDF构建ESP32 AI语音系统实战指南 当你的ESP32项目从简单的传感器读取升级到需要整合语音识别、网络通信和图形界面的复杂系统时,Arduino IDE的局限性就会逐渐显现。编译速度慢、依赖管理混乱、调试工具简陋等问题会严…...
Warehouse vs. Depot:从存储到转运的物流核心设施对比解析
1. 仓库与仓储站:物流世界的"冰箱"与"微波炉" 想象一下,你家的冰箱和微波炉有什么区别?冰箱适合长期保存食物,而微波炉则是快速加热的中转站。物流行业中的仓库(Warehouse)和仓储站&am…...
Youtu-Parsing快速开始:单图片模式、批量处理模式、输出格式详解
Youtu-Parsing快速开始:单图片模式、批量处理模式、输出格式详解 1. 项目概述 Youtu-Parsing是腾讯优图实验室推出的专业文档解析模型,基于Youtu-LLM-2B构建,能够智能识别文档中的多种元素: 文本内容:精准OCR文字识…...
