1.1SpringBoot整合Redis哨兵
1.1.1入门案例

/***     哨兵测试*   1.配置redis的节点数据集合*  2.利用哨兵机制连接redis节点.*  3.用户通过哨兵 实现缓存操作.*  *  参数1: masterName*/
@Test
public void testSentinel() {//配置哨兵的信息Set<String> sentinels = new HashSet<>();sentinels.add("192.168.226.128:26379");JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);Jedis jedis = pool.getResource();jedis.set("1909","哨兵搭建成功!!!!");System.out.println(jedis.get("1909"));jedis.close();
}

1.1.2编辑properties文件

redis.sentinel=192.168.226.128:26379
//标识配置类信息
@Configuration

1.1.3编辑RedisConfig配置类

@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {@Value("${redis.sentinel}")
private String sentinel;/*** 使用redis哨兵机制.实现redis缓存操作* */
@Bean
public JedisSentinelPool sentinelPool() {Set<String> sentinels = new HashSet<>();sentinels.add(sentinel);return new JedisSentinelPool("mymaster", sentinels);
}}

1.1.4修改CacheAOP

2Redis集群实现

1.1Redis集群

1.1.1为什么要搭建集群
通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。
Redis是一个很好的Cache工具。大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿。
由于内存大小的限制,使用一台 Redis 实例显然无法满足需求,这时就需要使用多台 Redis作为缓存数据库。但是如何保证数据存储的一致性呢,这时就需要搭建redis集群.采用合理的机制,保证用户的正常的访问需求.
采用redis集群,可以保证数据分散存储,同时保证数据存储的一致性.并且在内部实现高可用的机制.实现了服务故障的自动迁移.

1.1.2集群搭建计划
主从划分:
3台主机 3台从机共6台 端口划分7000-7005

1.2集群搭建
1.2.1准备集群文件夹
1.准备集群文件夹

Mkdir cluster

2.在cluster文件夹中分别创建7000-7005文件夹

1.2.2复制配置文件
说明:
将redis根目录中的redis.conf文件复制到cluster/7000/ 并以原名保存

cp redis.conf cluster/7000/

1.2.3编辑配置文件
1.注释本地绑定IP地址

2.关闭保护模式

3.修改端口号

4.启动后台启动

5.修改pid文件

6.修改持久化文件路径

7.设定内存优化策略

8.关闭AOF模式

9.开启集群配置

10.开启集群配置文件

11.修改集群超时时间

1.2.4复制修改后的配置文件
说明:将7000文件夹下的redis.conf文件分别复制到7001-7005中
[root@localhost cluster]# cp 7000/redis.conf 7001/
[root@localhost cluster]# cp 7000/redis.conf 7002/
[root@localhost cluster]# cp 7000/redis.conf 7003/
[root@localhost cluster]# cp 7000/redis.conf 7004/
[root@localhost cluster]# cp 7000/redis.conf 7005/

1.2.5批量修改
说明:分别将7001-7005文件中的7000改为对应的端口号的名称,
修改时注意方向键的使用

1.2.6通过脚本编辑启动/关闭指令
1.创建启动脚本 vim start.sh

2.编辑关闭的脚本 vim shutdown.sh

3.启动redis节点

sh start.sh

4.检查redis节点启动是否正常

1.2.7创建redis集群

#5.0版本执行 使用C语言内部管理集群
redis-cli --cluster create --cluster-replicas 1 192.168.35.130:7000 192.168.35.130:7001 192.168.35.130:7002 192.168.35.130:7003 192.168.35.130:7004 192.168.35.130:7005



1.2.8Redis集群高可用测试

1.关闭redis主机.检查是否自动实现故障迁移.
2.再次启动关闭的主机.检查是否能够实现自动的挂载.
一般情况下 能够实现主从挂载
个别情况: 宕机后的节点重启,可能挂载到其他主节点中(7001-7002) 正确的

1.3Redis集群原理
1.3.1Redis集群高可用推选原理
如图-24所示

原理说明:
Redis的所有节点都会保存当前redis集群中的全部主从状态信息.并且每个节点都能够相互通信.当一个节点发生宕机现象.则集群中的其他节点通过PING-PONG检测机制检查Redis节点是否宕机.当有半数以上的节点认为宕机.则认为主节点宕机.同时由Redis剩余的主节点进入选举机制.投票选举链接宕机的主节点的从机.实现故障迁移.

1.3.2Redis集群宕机条件

特点:集群中如果主机宕机,那么从机可以继续提供服务,
当主机中没有从机时,则向其它主机借用多余的从机.继续提供服务.如果主机宕机时没有从机可用,则集群崩溃.
答案:9个redis节点,节点宕机5-7次时集群才崩溃.
如图-25所示:

1.3.3Redis hash槽存储数据原理

说明: RedisCluster采用此分区,所有的键根据哈希函数(CRC16[key]&16383)映射到0-16383槽内,共16384个槽位,每个节点维护部分槽及槽所映射的键值数据.根据主节点的个数,均衡划分区间.
算法:哈希函数: Hash()=CRC16[key]%16383按位与
如图-26所示

当向redis集群中插入数据时,首先将key进行计算.之后将计算结果匹配到具体的某一个槽的区间内,之后再将数据set到管理该槽的节点中.
如图-27所示

Redis7000~~~0-5460
crc16(aaa)%16383 = 2000   redis7000.set("aaa","valuexxx");
crc16(bbb)%16383 = 2000  redis7000.set("bbb","valuexxx");

2.1SpringBoot整合redis集群

2.1.1入门案例

/*** redis集群测试案例*/
@Test
public void testCluster() {Set<HostAndPort> nodes = new HashSet<>();nodes.add(new HostAndPort("192.168.226.128",7000));nodes.add(new HostAndPort("192.168.226.128",7001));nodes.add(new HostAndPort("192.168.226.128",7002));nodes.add(new HostAndPort("192.168.226.128",7003));nodes.add(new HostAndPort("192.168.226.128",7004));nodes.add(new HostAndPort("192.168.226.128",7005));JedisCluster cluster = new JedisCluster(nodes);cluster.set("key", "redis集群搭建成功!!!!");System.out.println(cluster.get("key"));}

2.1.2编辑Properties文件

#配置redis集群
redis.nodes=192.168.226.128:7000,192.168.226.128:7001,192.168.226.128:7002,192.168.226.128:7003,192.168.226.128:7004,192.168.226.128:7005

2.1.3编辑RedisConfig

//标识配置类信息
@Configuration
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {@Value("${redis.nodes}")
private String nodes; //node,node,node/*** 实现集群整合*/
@Bean
@Scope("prototype")
public JedisCluster jedisCluster() {Set<HostAndPort> setNodes = new HashSet<>();String[] arrayNodes = nodes.split(","); for (String node : arrayNodes) { //host:portString host = node.split(":")[0];int port = Integer.parseInt(node.split(":")[1]);HostAndPort hostAndPort = new HostAndPort(host, port);setNodes.add(hostAndPort);}return new JedisCluster(setNodes);
}
}

2.1.4编辑CacheAOP

springboot整合Redis哨兵相关推荐

  1. SpringBoot 整合 Redis 哨兵机制_02

    文章目录 1. maven依赖 2. RedisConfig 3. RedisUtils 4. application.yml 5. 单元测试 6. redis客户端查看 1. maven依赖 < ...

  2. SpringBoot 整合 Redis 哨兵机制_01

    文章目录 一.哨兵简述 1. 哨兵能解决和未能解决的问题 2. 哨兵的作用 3. 哨兵的主要配置 4. 哨兵综述 二.搭建哨兵 2.1. 思路分析 2.2. 节点分布总览 2.3. 哨兵配置 2.4. ...

  3. springBoot整合redis单节点、redis哨兵、redis集群配置及redisClient区别

    springBoot整合redis单节点.redis哨兵.redis集群配置,redisClient jedis lettuce 区别? 1.springboot 整合redis单机模式: sprin ...

  4. SpringBoot(六):SpringBoot整合Redis

    From: https://blog.csdn.net/plei_yue/article/details/79362372 前言 在本篇文章中将SpringBoot整合Redis,使用的是RedisT ...

  5. SpringBoot整合Redis缓存

    SpringBoot整合Redis缓存 一.缓存概念知识 1.是什么缓存 2.缓存的优缺点 3.为什么使用缓存 二.Redis概念知识 1.Redis简介 2.为什么用Redis作为缓存 3.Redi ...

  6. Redis学习(含 Springboot 整合 Redis)

    Redis NoSQL (not only sql) 在现代的计算系统上每天网络上都会产生庞大的数据量. 这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理. 1970年 E.F.Codd ...

  7. SpringBoot整合Redis+Redis缓存应用+Redis实现Session共享+...

    一.SpringBoot整合Redis 1.导入依赖 <!--存在Redis依赖--> <dependency><groupId>org.springframewo ...

  8. SpringBoot第九篇: springboot整合Redis

    这篇文章主要介绍springboot整合redis,至于没有接触过redis的同学可以看下这篇文章:5分钟带你入门Redis. 引入依赖: 在pom文件中添加redis依赖: <dependen ...

  9. Springboot整合redis(lettuce)

    springboot 整合redis(lettuce) 首先确保电脑上装了redis.最好能用redisDesktop查看一下数据情况 redis是一款非常流行的Nosql数据库.redis的功能非常 ...

最新文章

  1. java好用的hbase库_Hbase入库基于java
  2. bottleneck resnet网络_关于ResNet及其变体的总结(上)
  3. 想知道人工智能的发展史?看完这篇文章你会赞叹科技的力量!
  4. JavaScript判断浏览器类型及版本
  5. 封装的可运行于winform与web的Log4Net的类库
  6. 过游戏保护NP或TP的几种方法和思路
  7. mongoose --- 建立一个集合规则,并导出.
  8. Python 爬虫进阶二之 PySpider 框架安装配置
  9. 设置linearlayout最大高度_ICEM CFD网格设置参数意义
  10. [Python] Ubuntu 安装/卸载 python
  11. Arcgis javascript那些事儿(十五)——影像服务的发布与使用
  12. Navicat 常用快捷键
  13. ARP欺骗原理 [转]
  14. js 调用 php,利用js调用后台php进行数据处理原码
  15. 【虹膜识别】基于matlab GUI滤波器虹膜识别【含Matlab源码 917期】
  16. 在不受支持的 Mac 上安装 macOS Ventura、Monterey、Big Sur (OpenCore Legacy Patcher)
  17. 静态分析软件(QAC、Klocwork,Coverity等),单元测试软件集成测试软件 (VectorCAST、testbed、tessy、c++test等)下载安装使用试用
  18. RISC-V嵌入式开发入门篇1:RISC-V GCC工具链的介绍
  19. STM32FXXX J-link下载程序说明
  20. 服装进销存管理软件哪个好用?看测评就知道了

热门文章

  1. csdn上传资源中断
  2. 【BZOJ3157/3516】国王奇遇记(数论)
  3. Linux 命令篇 之 uname
  4. 华钜同创:亚马逊开店提高产品复购率的七大方法
  5. Neural Networks(神经网络)
  6. linux下使用mysqldump备份数据库:报mysqldump:Got error 1405的错误
  7. GitKraken下载、使用问题
  8. 关于TCP三次握手和两次握手的思考
  9. 计算机知识点记不住怎么办,学完一科忘一科,记不住知识点怎么办?
  10. 聊天系统mysql_聊天室phpamp;mysql(一)