Redis技术入门与实践指南
一、Redis基础知识
1、概念
Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-value database),是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能的 还有memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久性等功能。 Redis 在高并发、低延迟环境要求比较高的环境使用量非常广泛。
2、特点
速度快: 10W QPS,基于内存,C语言实现;单线程;持久化;支持多种数据结构;支持多种编程语言;功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能;简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单;主从复制;支持高可用和分布式。
二、Redis源码安装
解压源码包
tar zxf redis-7.4.0.tar.gz

执行编译命令
dnf install initscripts make gcc -y
cd redis-7.4.0/
make && make install

报错提示系统使用的是systemd的初始化方式,解决报错
vim install_server.sh

启动Redis
./install_server.sh

三、配置主从同步
1、主从同步过程
1.1、slave节点发送同步请求到master节点
1.2、slave节点通过master节点的认证开始进行同步
1.3、master节点会开启bgsave进程发送内存rbd到slave节点,在此过程中是异步操作,也就是说 master节点仍然可以进行写入动作
1.4、slave节点收到rdb后首先清空自己的所有数据
1.5、slave节点加载rdb并进行数据恢复
1.6、在master和slave同步过程中master还会开启新的bgsave进程把没有同步的数据进行缓存
1.7、通过自有的replactionfeedslave函数把未通过内存快照发动到slave的数据一条一条写入到 slave中
2、配置master节点
vim /etc/redis/6379.conf


/etc/init.d/redis_6379 restart

复制到其他两台主机
scp -r redis-7.4.0 root@172.25.254.20:/root
scp -r redis-7.4.0 root@172.25.254.30:/root

rsync -al * root@172.25.254.20:/usr/local/bin
rsync -al * root@172.25.254.30:/usr/local/bin

3、配置slave节点
yum install initscripts -y
vim /etc/redis/6379.conf
![]()
/etc/init.d/redis_6379 restart
测试:
在mastser节点新建

在slave节点查看


四、Redis的哨兵(高可用)
编辑配置文件
cd redis-7.4.0/
cp sentinel.conf /etc/redis/
vim /etc/redis/sentinel.conf


scp /etc/redis/sentinel.conf root@172.25.254.20:/etc/redis/
scp /etc/redis/sentinel.conf root@172.25.254.30:/etc/redis/

启动服务
redis-sentinel /etc/redis/sentinel.conf

再开一个master节点终端
[root@redis-node1 ~]# redis-cli
127.0.0.1:6379> shutdown
在salve查看
[root@redis-node2 ~]# redis-cli
127.0.0.1:6379> info replications
127.0.0.1:6379> info replication

五、Redis Cluster(无中心化设计)
1、Redis Cluster 工作原理
在哨兵sentinel机制中,可以解决redis高可用问题,即当master故障后可以自动将slave提升为master, 从而可以保证redis服务的正常使用,但是无法解决redis单机写入的瓶颈问题,即单机redis写入性能受 限于单机的内存大小、并发数量、网卡速率等因素。 redis 3.0版本之后推出了无中心架构的redis cluster机制,在无中心的redis集群当中,其每个节点保存 当前节点数据和整个集群状态,每个节点都和其他所有节点连接
2、部署redis cluster
删除源码编译的redis
cd redis-7.4.0/
make uninstall

创建3台cluster
6台redis同时安装
dnf install redis -y
vim /etc/redis/redis.conf

集群主从认证



复制配置文件给其他主机
for i in 20 30 110 120 130; do scp /etc/redis/redis.conf root@172.25.254.$i:/etc/redis/redis.conf; done
systemctl enable --now redis
3、创建redis-cluster
redis-cli --cluster create -a 123456 172.25.254.10:6379 172.25.254.20:6379 172.25.254.30:6379 172.25.254.110:6379 172.25.254.120:6379 172.25.254.130:6379 --cluster-replicas 1


查看集群状态
redis-cli -a 123456 --cluster info 172.25.254.10:6379

redis-cli -a 123456 cluster info

写入数据
redis-cli -a 123456
127.0.0.1:6379> set name hao

报错提示可知被分配到20的hash槽位上

4、集群扩容
scp /etc/redis/redis.conf root@172.25.254.50:/etc/redis/redis.conf
scp /etc/redis/redis.conf root@172.25.254.150:/etc/redis/redis.conf
redis-cli -a 123456 --cluster add-node 172.25.254.50:6379 172.25.254.10:6379

redis-cli -a 123456 --cluster check 172.25.254.10:6379

但这时的50没有槽位,不可以存数据

分配槽位
redis-cli -a 123456 --cluster reshard 172.25.254.10:6379

![]()
添加salve
redis-cli -a 123456 --cluster add-node 172.25.254.150:6379 172.25.254.10:6379 --cluster-slave --cluster-master-id d80777be39c2f55697310daf69bdc0b6f47eb2f9

5、clsuter集群维护
添加节点的时候是先添加node节点到集群,然后分配槽位,删除节点的操作与添加节点的操作正好相 反,是先将被删除的Redis node上的槽位迁移到集群中的其他Redis node节点上,然后再将其删除,如 果一个Redis node节点上的槽位没有被完全迁移,删除该node的时候会提示有数据且无法删除。
移除要下线主机50的哈希槽位
redis-cli -a 123456 --cluster reshard 172.25.254.10:6379

删除master
redis-cli -a 123456 --cluster del-node 172.25.254.150:6379 1c2bdbf84e07f3abf080e8106d6eb84ce3734bcd
redis-cli -a 123456 --cluster del-node 172.25.254.50:6379 d80777be39c2f55697310daf69bdc0b6f47eb2f9

redis-cli -a 123456 --cluster check 172.25.254.10:6379

相关文章:
Redis技术入门与实践指南
一、Redis基础知识 1、概念 Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-value database),是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能的 还有memcached࿰…...
如何一键完成20个Oracle实例运维脚本部署
在日常的运维工作中,常常是一个人需要管理维护数个数十个数据库实例,如果是开源类集群如mysql,PG等可能更多;在没有商业的集中管理平台的情况下,如何快速的部署监控或者运维脚本,是一个值得探讨的问题&…...
【C++刷题】力扣-#598-区间加法 II
题目描述 给你一个 m x n 的矩阵 M和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] [ai, bi] 意味着当所有的 0 < x < ai 和 0 < y < bi 时, M[x][y] 应该加 1。 在 执行完所有操作后 ,计算并返回 矩阵中最大整数的个数 。 示…...
优雅的LUA数据记录方法-serpent序列化+LUA Table
目录 简述如何集成?如何使用序列化 反序列化 参考 简述 项目里需要使用LUA脚本将数据记录到文件,要方便的增加、查找、删除,要方便的加载与存回。 使用序列化/反序列化 lua table可以很容易实现这些功能。 序列化将table转换为字符串 反序列…...
初始JavaEE篇——多线程(4):wait、notify,饿汉模式,懒汉模式,指令重排序
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 wait、notify 方法 多线程练习 单例模式 饿汉模式 懒汉模式 指令重排序 wait、notify 方法 wait 和 我们前面学习的sleep…...
Apache Solr 身份认证绕过导致任意文件读取漏洞复现(CVE-2024-45216)
0x01 产品简介 Apache Solr是一个开源的搜索平台,基于流行的Apache Lucene库构建。它提供了一个强大的全文搜索功能,能够快速处理大量数据,并支持复杂的搜索操作。并且是一个独立的企业级搜索应用服务器,它采用Java开发,并基于Apache Lucene实现。Solr提供了类似于Web-Se…...
C#整合Ollama实现本地LLMs调用
前言 近两年AIGC发展的非常迅速,从刚开始的只有ChatGPT到现在的很百家争鸣。从开始的大参数模型,再到后来的小参数模型,从一开始单一的文本模型到现在的多模态模型等等。随着一起进步的不仅仅是模型的多样化,还有模型的使用方式。…...
C++基于opencv的视频质量检测--图像抖动检测
文章目录 0.引言1. 原始代码分析2. 优化方案3. 优化后的代码4. 代码详细解读 0.引言 视频质量图像抖动检测已在C基于opencv4的视频质量检测中有所介绍,本文将详细介绍其优化版本。 1. 原始代码分析 首先,我们来看图像抖动检测的原始代码: …...
Cuda By Example - 11 (Texture Memory 2-D)
跟1D一样,2D的代码也没有运行过。旧的方法看看就好。 声明二维Texture texture<float, 2> texConstSrc; texture<float, 2> texIn; texture<float, 2> texOut; 访问二维Texture 使用2D的Texture的便利性体现在blend_kernel函数里。不再需要通…...
Go匿名结构体使用场景
1. 定义 在 Go 语言中,匿名结构体(Anonymous Struct)是一种没有显式命名的结构体类型。你可以直接在代码中定义并使用匿名结构体,而不需要为其定义一个单独的类型名称。匿名结构体通常用于临时数据结构或一次性使用的场景。 匿名…...
Vue 发布十年了!你知道我这十年是怎么过的吗?
2014 年 2 月 3 日,Vue 在 Hacker News 上首次亮相。十年后的今天,Vue 已经成为使用最广泛的前端框架之一,拥有了一个非常丰富的生态系统。本文来梳理一下 Vue.js 十年以来的重要里程碑! 尤雨溪,无疑是 Vue.js 背后的灵…...
Unity 6 来袭
这里写自定义目录标题 1.提升渲染性能1.1 降低CPU开销 Lower CPU overhead1.2.减少内存带宽1.3.高档低分辨率帧2.多人游戏创作3.扩大多平台覆盖范围3.1.增进Android平台开发4.使用Runtime AI解锁各种可能性4.1.Unity Muse4.2.Unity Sentis5.实现更具吸引力的视觉效果5.1.自适应…...
SpringMVC课时1
一:SpringMVC Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet,负责表述层(控制层)实现简化。 由于 Spring MVC 本身就是 Spring 框架的一部分,和 Spring 框架是无缝集成。 二:SSM的主要作用 三:SpringMVC的原理架构图 …...
【小白学机器学习30】样本统计的核心参数:均值/期望,方差,标准差,标准值。
目录 1 为什么我们要搞出来这么多指标/参数? 1.1 描述统计学为啥要搞出来这么多复杂的参数?什么平均值等 1.2 所以,需要用少数几个关键数据代表1群数据 1.2.1 平均值 1.2.2 平均值的问题:方差 2 代表性的数据1:…...
flink1.17.2安装和使用
版本:flink1.17.2 单机模式 配置 # 为了在别处连接flink-web rest.bind-address: 0.0.0.0命令 # 启动集群 bin/start-cluster.sh # 关闭集群 bin/stop-cluster.sh使用 使用浏览器连接 ip:8081 使用flink-web...
C向C++入门-- C语言填坑
1.c参考文档 我们在学习c中需要查找参照信息到是从这些文档中得到。 https://legacy.cplusplus.com/reference/ 标准只更新到C11,但是以头⽂件形式呈现,内容⽐较易看好懂。 https://zh.cppreference.com/w/cpp https://en.cppreference.com/w/ 后两…...
扫雷游戏(C语言详解)
扫雷游戏(C语言详解) 放在最前面的1、前言(扫雷游戏的简介)2、扫雷游戏的规则(简易版)3、代码实现(3.1)提醒一下:( i ) 提醒1:( ii ) 提醒2: &…...
信刻全自动光盘摆渡系统
随着各种数据传输、储存技术、信息技术的快速发展,保护信息安全是重中之重。各安全领域行业对跨网数据交互需求日益迫切。针对于业务需要与保密规范相关要求,涉及重要秘密信息,需做到安全的物理隔离,并且保证跨网数据高效安全传输…...
计算机网络的数据链路层
计算机网络的数据链路层 数据链路层是OSI参考模型中的第二层,它位于物理层之上,网络层之下。数据链路层的主要功能是在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。…...
从0开始搭建一个生产级SpringBoot2.0.X项目(三)SpringBoot接口统一返回和全局异常处理
前言 最近有个想法想整理一个内容比较完整springboot项目初始化Demo。 SpringBoot接口统一返回和全局异常处理,使用ControllerAdvice ExceptionHandler 的组合来实现。 一、pom文件新增依赖 <dependency><groupId>com.alibaba</groupId><ar…...
从‘打包’到‘压缩’:一文理清Linux tar命令的-z、-j、-J参数该怎么选(附性能对比)
从‘打包’到‘压缩’:一文理清Linux tar命令的-z、-j、-J参数该怎么选(附性能对比) 在Linux系统管理中,文件归档与压缩是每位开发者绕不开的基础操作。当你面对几十GB的日志文件需要备份,或是需要将数百张高分辨率图片…...
母线槽核心部件解析 —— 高纯铜导体与绝缘层的技术价值
在低压配电系统中,母线槽凭借大电流传输能力、高安全性及长寿命特性,成为大型基建、工业厂房、商业建筑等场景的核心配电设备。 扬中金展电气深耕母线槽研发生产 16 年,以严苛的材质标准与精密工艺,打造高可靠母线槽产品ÿ…...
如何通过智能包装系统提升全链条的数字化与协同效率?
本段聚焦全链条数字化升级的核心路径,通过 智能包装系统实现 原材料到成品的数据共享与流程对齐。以原材料入库、生产、成品出库为主线,建立统一的数据模型、模块化接口与可追溯闭环,推动 协同优化与成本控制。结合 中科天工智能包装设备与 中…...
交流充电桩通信系统设计:从PWM安全握手到CAN总线协议解析
1. 项目概述:从“插上电”到“充上电”的幕后功臣当你把电动汽车的充电枪插入交流充电桩的充电口,听到“咔哒”一声锁止,看到桩体屏幕亮起、开始计费充电时,这背后发生的一系列“对话”远比我们想象的要复杂。这不仅仅是物理连接&…...
Mac/Win双平台保姆级教程:从零配置ADB环境到连接真机/模拟器
Mac/Win双平台保姆级教程:从零配置ADB环境到连接真机/模拟器 第一次接触Android开发或测试时,配置ADB环境往往是让人头疼的第一步。不同操作系统、不同设备品牌、不同模拟器之间的差异,让很多新手在"adb devices"命令前败下阵来。…...
P15906 [TOPC 2024] Business Magic 题解
P15906 [TOPC 2024] Business Magic Link: https://www.luogu.com.cn/problem/P15906 题目描述 沿街有 nnn 家商店,按从近到远的顺序编号为 111 到 nnn。上个月,商店 kkk 的净利润为 rkr_krk。如果 rkr_krk 为正,表示盈利 rkr_krk 美…...
LDAP查询服务延时查询及问题排查处理
文章目录一、使用服务器管理器管理本地和远程服务器二、LDAP查询用时三、LDAP查询高延迟排查步骤推荐阅读一、使用服务器管理器管理本地和远程服务器 默认情况下,服务器管理器包含在 Windows Server 中,无需单独安装。 在以下步骤中,将使用服…...
STM32驱动PS2手柄控制智能小车实战(避坑指南+遥控代码解析)
STM32驱动PS2手柄控制智能小车实战(避坑指南遥控代码解析) 在创客社区和嵌入式开发领域,智能小车一直是验证硬件控制逻辑的理想平台。而将游戏手柄作为控制终端,不仅能让项目更具趣味性,还能深入理解工业级输入设备与嵌…...
【Java入门|集合全解析:List、Set与Map详解】
Java集合Java集合分为单列集合和双列集合,也就是 Collection 和 Map 。顾名思义, Collection 一个位置上仅存放一个元素; Map 一个位置上有两个元素(分为键和值)。 Map 和 Collection 下又分别衍生出多种集合种类&…...
合同系统业务功能
合同管理系统的核心是实现合同全生命周期管控,其生命周期主要分为五大环节:签订前管理、审批流程管理审批管理、合同签订、合同信息与文本管理、合同履约执行。 不同环节对应不同的功能需求,需结合企业业务特点灵活适配,以下是各环…...
