SpringBoot整合Redis分片

article/2025/9/30 19:55:56

1 编辑分片配置文件

#redis.host=192.168.126.129
#redis.port=6379
redis.nodes=192.168.126.129:6379,192.168.126.129:6380,192.168.126.129:6381

2 编辑配置类实现redis整合

	@Configuration 	//我是一个配置类    一般都会与@Bean联用
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {@Value("${redis.nodes}")private String redisNodes;   //node,node,node/*整合分片实现Redis内存扩容*/@Beanpublic ShardedJedis shardedJedis() {String[] nodes = redisNodes.split(",");  //节点数组//动态获取Redis节点信息.List<JedisShardInfo> list = new ArrayList<JedisShardInfo>();for (String node : nodes) { //node= host:port ---->[host,port]String host = node.split(":")[0];int port = Integer.parseInt(node.split(":")[1]);list.add(new JedisShardInfo(host, port));}//返回分片对象return new ShardedJedis(list);}/*** 单台测试@Value("${redis.host}")private String host;@Value("${redis.port}")private Integer port;//将返回值的结果交给spring容器进行管理,如果以后想要使用该对象则可以直接注入.@Beanpublic Jedis jedis() {return new Jedis(host, port);}*/
}

3 修改RedisAOP中的注入

在这里插入图片描述

4 关于redis分片总结

1.当redis节点宕机之后,用户访问必然受到影响.
2.当redis服务宕机之后,该节点中的数据可能丢失
3.Redis分片可以实现内存数据的扩容.
4.Redis分片机制中hash运算发生在业务服务器中.redis只负责存取.不负责计算. 所以效率更高.

2 Redis属性说明

2.1 Redis持久化策略

2.1.1 Redis持久化策略说明

说明: Redis的数据都保存在内存中,如果断电或者宕机,则内存数据将擦除,导致数据的丢失.为了防止数据丢失,Redis内部有持久化机制.
当第一次Redis服务启动时,根据配置文件中的持久化要求.进行持久化操作.如果不是第一次启动,则在服务启动时会根据持久化文件的配置,读取指定的持久化文件.实现内存数据的恢复.

2.1.2 RDB模式

特点:
1.rdb模式是redis中默认的持久化策略.
2.rdb模式定期持久化.保存的是Redis中的内存数据快照.持久化文件占用空间较小.
3.rdb模式可能导致内存数据丢失

命令:
前提:需要在redis的客户端中执行.

  1. save 命令 立即持久化 会导致其他操作陷入阻塞.
  2. bgsave 命令 开启后台运行. 以异步的方式进行持久化. 不会造成其他操作的阻塞.

持久化周期:

	save 900 1        900秒内,如果用户执行的1次更新操作,则持久化一次save 300 10		  300秒内,如果用户执行的10次更新操作,则持久化一次save 60 10000	  60秒内,如果用户执行的10000次更新操作,则持久化一次save 1 1	 	  1秒内,如果用户执行的1次更新操作,则持久化一次    set 阻塞!!!!

持久化文件:
在这里插入图片描述
持久化文件路径:
在这里插入图片描述

2.1.3 AOF模式

特点:
1). AOF模式默认条件下是关闭状态. 如果需要开启则需要修改配置文件.
2). AOF模式可以实现数据的实时持久化操作,AOF模式记录的是用户的操作过程.
3). 只要开启了AOF模式,则持久化方式以AOF模式为主.

配置:
开启AOF持久化方式
在这里插入图片描述
持久化文件格式:
在这里插入图片描述
持久化文件名称配置:
在这里插入图片描述
持久化文件策略说明

	appendfsync always    只要用户执行一次操作,则持久化一次.**appendfsync everysec  每秒持久化一次   默认策略**      效率略低于RDBappendfsync no        不主动持久化.

2.1.4 面试题

公司新入职一个员工,对于业务不熟,出于好奇在生产环境下执行了flushAll命令,问:如果你是项目经理,如何解决 ??
A: 暴打一顿 驱逐出公司
B: 冷嘲热讽 让其主动离职 ,并且承担后果
C: 予以安慰,告诉他你是最棒的 之后去甲方负荆请罪
D: 相视一笑,告诉他 你别管了 交给我处理吧 .

处理方式:修改AOF文件中的flushAll命令,之后重启即可.

2.1.5 持久化总结

1.如果用户允许少量的数据丢失,则可以选用RDB模式. 效率更高
2.如果用户不允许数据丢失,则选用AOF模式.
3.可以2种方式都选, 需要搭建组从结构 , 主机选用RDB模式, 从机选用AOF模式,可以保证业务允许.

2.1.6 配置多种持久化方式

1).设计 : 6379 当主机 7380当从机.
2).修改主机的配置文件:
要求: 主机使用RDB模式
在这里插入图片描述

从机使用AOF模式
在这里插入图片描述
3).检查默认模式的状态
命令: info replication
在这里插入图片描述
4).实现主从挂载
编辑从服务器向主机进行挂载
在这里插入图片描述
4).主从测试
1.主机中添加测试数据.
2.检查从机中是否有数据
3.检查持久化文件是否有数据.

总结: 一般条件下主机采用RDB模式,从机采用AOF模式,效率更高.

2.2.Redis内存策略

2.2.1 内存策略说明

redis服务器运行在内存中,数据也在内存中保存. 如果一直往里存,总有一天内存资源不够用,所以需要研究如何优化内存.

2.2.2 LRU算法

维度:T 时间
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面(数据)置换算法,选择最近最久未使用的页面(数据)予以淘汰。该算法赋予每个页面(数据)一个访问字段,用来记录一个页面(数据)自上次被访问以来所经历的时间 t,当须淘汰一个页面(数据)时,选择现有页面(数据)中其 t 值最大的,即最近最少使用的页面(数据)予以淘汰。

2.2.3 LFU算法

维度:引用次数
LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。

2.2.4 随机算法

随机算法: 灭霸的响指

2.2.5 TTL算法

说明: 将设定了超时时间的数据提前删除.

2.2.6 Redis中内存优化策略

  1. volatile-lru 设定超时时间的数据采用lru算法
  2. allkeys-lru .所有的数据采用lru算法
  3. volatile-lfu 设定超时时间的数据采用LFU算法
  4. allkeys-lfu 所有的数据才能lfu算法
  5. volatile-random 设定了超时时间的数据采用随机算法
  6. allkeys-random 所有数据采用随机算法
  7. volatile-ttl 设定超时时间的数据采用TTL算法
  8. noeviction 该配置为模式配置 表示内存满时 只报错,不删除数据.
    在这里插入图片描述
    修改配置文件之后,重启服务器即可.

2.3 Redis集群

2.3.1 redis集群搭建问题解决方案

1.检查防火墙
2.检查配置文件
3.关闭所有的redis服务器 sh stop.sh
4.删除多余的文件 nodes.conf dump.rdb

[root@localhost cluster]# rm -rf 700*/dump.rdb
[root@localhost cluster]# rm -rf 700*/nodes.conf

5.重新启动服务器,之后执行挂载命令

2.3.2 redis入门案例

	public class TestCluster {/*** 通过程序操作redis   3主机   读写    3从机 数据备份 */@Testpublic void test01() {Set<HostAndPort> nodes = new HashSet<HostAndPort>();nodes.add(new HostAndPort("192.168.126.129", 7000));nodes.add(new HostAndPort("192.168.126.129", 7001));nodes.add(new HostAndPort("192.168.126.129", 7002));nodes.add(new HostAndPort("192.168.126.129", 7003));nodes.add(new HostAndPort("192.168.126.129", 7004));nodes.add(new HostAndPort("192.168.126.129", 7005));//利用程序操作redis集群JedisCluster jedisCluster = new JedisCluster(nodes);jedisCluster.set("AAAAA", "redis集群测试");System.out.println(jedisCluster.get("AAAAA"));}
}

http://chatgpt.dhexx.cn/article/mDQxGmeq.shtml

相关文章

Redis搭建分片集群

一、什么是Redis分片集群 1、概念 Redis分片集群是用于将Redis的数据分布在多个Redis节点上的分布式系统。通过分片集群&#xff0c;可以将数据分成多个部分&#xff0c;并将每个部分存储在不同的节点上&#xff0c;以便实现Redis的高可用性和高性能。 2、Redis分片集群原理…

Docker下搭建Redis分片集群

分片集群结构 同一台虚拟机中开启6个redis实例&#xff0c;模拟分片集群 IP PORT角色192.168.19.1287001master192.168.19.1287002master192.168.19.1287003master192.168.19.1288001slave192.168.19.1288002slave192.168.19.1288003slave 搭建Redis分片集群 创建实例目录 …

redis分片集群

目录 分片集群结构搭建分片集群散列插槽集群伸缩故障转移 分片集群结构 主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决&#xff1a; 1.海量数据存储问题 2.高并发写的问题使用分片集群可以解决上述问题&#xff0c;分片集群特征&#xff1a; 1.集群…

Redis分区/分片详解

分区/分片详解 分区是分割数据到多个Redis实例的处理过程&#xff0c;因此每个实例只保存key的一个子集。 如果只使用一个redis实例时&#xff0c;其中保存了服务器中全部的缓存数据&#xff0c;这样会有很大风险&#xff0c;如果单台redis服务宕机了将会影响到整个服务。解决的…

Redis(七)--分片技术详解

文章目录 介绍Redis集群的数据分布算法&#xff1a;哈希槽算法集群的请求重定向Redis集群中节点的通信机制&#xff1a;goosip协议介绍原理通信过程优缺点goosip协议的常见类型 集群的扩容与收缩扩容收缩 集群的故障检测与故障恢复机制故障检测故障恢复 介绍 Redis分片&#x…

Redis集群系列五 —— 分区/片概念

什么是分区 分区就是将所存储的数据按照一定的规则存储在不同的存储服务或介质上&#xff0c;通过降低单服务或介质的数据量级来提升数据处理能力&#xff0c;从而达到拥有数据处理横向扩容的能力的目的。 还可简单的理解为分区就是将数据拆分到多个 Redis 实例的过程&#xf…

redis分区(分片)原理

redis相关文章 ----redis原理概述 -----redis集群方案 ----redis分区&#xff08;分片&#xff09;原理 ----Redis实现分布式锁 ----redis缓存穿透、雪崩和解决方案 分区的概念 分区是分割数据到多个Redis实例的处理过程&#xff0c;因此每个实例只保存key的一个子集如果只使…

调和级数近似求和公式推导(转载)

原文链接: https://blog.csdn.net/ezoiHQM/article/details/82961266?utm_mediumdistribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_sourcedistribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonec…

级数求和.

题目描述 输入格式 一个正整数 k。 输出格式 一个正整数 n。 输入样例 1输出样例 2#include<iostream> using namespace std; int main() {int k;cin>>k;double S0,tmp;for(int i1;i<99999;i){tmp1.0/i;SStmp;if(S>k){cout<<i<<endl;break…

高等数学——级数

目录 一&#xff0c;级数 二&#xff0c;函数项级数的一致收敛性 一&#xff0c;级数 二&#xff0c;函数项级数的一致收敛性

高数---级数

常数项级数 定义 先搞清什么是级数&#xff0c;级数是一个求和&#xff0c;可以先理解为是数列的求和。 这样一个级数&#xff1a; ∑ n 1 ∞ f ( n ) f ( 1 ) f ( 2 ) f ( 3 ) . . . f ( n ) . . . \sum_{n1}^\infty f(n) f(1) f(2) f(3) ... f(n) ... ∑n1∞​…

代码【级数求和】

题目 已知&#xff1a;S_n 11/21/3 \cdots 1 /nSn​11/21/3⋯1/n。显然对于任意一个整数 KK&#xff0c;当 nn 足够大的时候&#xff0c;S_nSn​ 大于 KK。 现给出一个整数 K(1 \le k \le 15)K(1≤k≤15)&#xff0c;要求计算出一个最小的 nn&#xff1b;使得 S_n > KSn​…

【高数】收敛关系:级数与部分和、级数与数列、数列与子数列、级数与子级数

目录 一、概念理解 1. 级数是什么&#xff1f; 二、区别与联系 1. 级数、部分和 2. 级数收敛、数列收敛 3. 数列收敛、子数列收敛 4. 级数收敛、子级数收敛 三、小结 一、概念理解 1. 级数是什么&#xff1f; 疑问&#xff1a;级数是无穷数列的和&#xff0c;那为什么…

级数求和和

#include<bits/stdc.h> using namespace std;int main(){double k,i1,sn0;//如果是float就错了&#xff0c;因为double比float更加精确//float占4个字节&#xff0c;double占8个字节&#xff0c;它可以存储的有效数字更多//所以题目要求精确的时候&#xff0c;用double&a…

高数_第6章无穷级数__调和级数

所谓调和级数&#xff0c;是指 看一个例题 证明&#xff1a; 级数 发散。 证&#xff1a; 调和级数的部分和 此题可以继续扩展 结论&#xff1a; 可以看到此题的级数&#xff0c;比调和级数仅仅多了 , 却是收敛。 我们不能用思维定势&#xff0c; 思维定势害人呐&…

函数列与函数项级数——(一)一致收敛性

一.函数列及其一致收敛性 设是一列定义在同一数集E上的函数&#xff0c;称为定义在E上的函数列&#xff0c;&#xff08;1&#xff09;也可简单地写作或 函数列的极限函数记作f&#xff0c;则有或 函数列极限的定义&#xff1a;当n>N时&#xff0c;有 使函数列收敛的全体…

微积分:常用公式、微分方程、级数

http://blog.csdn.net/pipisorry/article/details/52200140 微积分 直观地说&#xff0c;对于一个给定的正实值函数&#xff0c;在一个实数区间上的定积分可以理解为在坐标平面上&#xff0c;由曲线、直线以及轴围成的曲边梯形的面积值&#xff08;一种确定的实数值&#xff…

数学小课堂:几何数列的求和(几何级数的发散性和收敛性)

文章目录 引言I 入会骗局的数学原理1.1 提成方式1.2 情况分析1.3 级数的发散性和收敛性II 案例2.1 社交网络上的信息传播问题2.2 核裂变的链式反应引言 I 入会骗局的数学原理 1.1 提成方式 每一个人入会需要缴纳1万元发展一个直接下线,可以从后者的身上提成20%;直接下线每发…