主从服务,在主服务挂掉之后需要我们手动操作,重新设置其他服务来充当主服务。

而 sentinel 可以自动完成这一动作。

一、启动 redis 服务

启动 redis 服务可以查看前面章节,我们需要 1 主 2 从。

主 127.0.0.1:6379

从 127.0.0.1:6380、127.0.0.1:6381

二、启动 sentinel 服务

1. 配置文件 sentinel.conf

daemonize yes # 是否守护进程启动
pidfile "/var/run/redis-sentinel-26379.pid" # pid文件
logfile "26379.log" # 日志文件
dir "/usr/local/src/redis/redis-5.0.7/data" # 工作空间
sentinel monitor mymaster 127.0.0.1 6379 2 # redis 主节点的 ip 和端口,即使单机多实例也不能使用127.0.0.1

2. 启动服务

redis-sentinel sentinel.conf

3. 查看服务信息

redis-cli -p 26379 # 访问服务
info # 查看服务信息

4. 最少启动 3 个 sentinel 服务

将配置文件分别复制出来端口号为 26380、26381的两个服务。

3 个 sentinel 服务分别为:

127.0.0.1:26379、127.0.0.1:26380、127.0.0.1:26381

三、Java 集成 sentinel

1. 引入 jar 包

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

2. 客户端

String masterName = "mymaster";
Set<String> set = new HashSet<>();
set.add("192.168.116.128:26379");
set.add("192.168.116.128:26380");
set.add("192.168.116.128:26381"); JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, set); while (true) {
Jedis jedis = null;
try {
jedis = jedisSentinelPool.getResource();
int index = new Random().nextInt(100000);
String key = "key-" + index;
String value = "value-" + index;
jedis.set(key, value);
System.out.println(key + " value is " + jedis.get(key));
TimeUnit.MILLISECONDS.sleep(10);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null) {
jedis.close();
}
}
}

执行上面程序时,可以将主节点进程杀死观察一下。

在控制台输出异常大约一两分钟后,senticenl 服务会恢复正常。

四、SpringBoot 集成 sentintl

1. SpringBoot 集成 redis 参考博客:

https://www.cnblogs.com/zeng1994/p/03303c805731afc9aa9c60dbbd32a323.html

2. 在此基础上仅仅修改配置文件:

spring.redis.sentinel.master=mymaster # sentinel config 中配置的
spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381 # 3个sentinel服务 # 下面配置注释掉
#spring.redis.database=0
#spring.redis.host=192.168.116.128
#spring.redis.port=6379

3. 注意点:

即使单机多实例情况下,配置文件中也不要使用 127.0.0.1,而应该使用真实 IP,否则故障转移可能会出现异常。

Redis 学习-Redis Sentinel的更多相关文章

  1. Redis学习——Redis持久化之AOF备份方式保存数据

    新技术的出现一定是在老技术的基础之上,并且完善了老技术的某一些不足的地方,新技术和老技术就如同JAVA中的继承关系.子类(新技术)比父类(老技术)更加的强大! 在前面介绍了Redis学习--Redis ...

  2. Redis学习---Redis操作之Python连接

    PyCharm下的Redis连接 连接方式: 1. 操作模式 redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使 ...

  3. Redis学习——Redis事务

    Redis和传统的关系型数据库一样,因为具有持久化的功能,所以也有事务的功能! 有关事务相关的概念和介绍,这里就不做介绍. 在学习Redis的事务之前,首先抛出一个面试的问题. 面试官:请问Redis ...

  4. [转]Redis学习---Redis高可用技术解决方案总结

    [原文]https://www.toutiao.com/i6591646189714670093/ 本文主要针对Redis常见的几种使用方式及其优缺点展开分析. 一.常见使用方式 Redis的几种常见 ...

  5. Redis学习——Redis持久化之RDB备份方式保存数据

    从这一个介绍里面知道,redis比memcache作为缓存数据库强大的地方,一个是支持的数据类型比较多,另一个就是redis持久化功能. 下面就介绍Redis的持久化之RDB! 一:什么是redis的 ...

  6. Redis学习——redis.conf 配置文件介绍

    学以致用 学在用前 参看文章: redis.conf 配置详解 Redis配置文件详解(redis.conf)-云栖社区 在Redis的使用过程,除了知道对Redis五种数据类型的操作方法之外,最主要 ...

  7. redis学习——redis应用场景

    毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象 ...

  8. Redis学习--Redis数据类型

    Redis的5种基本类型 1.String 2.Hash 3.List 4.Set 5.Sorted Set String常见用法 1.get key 返回value 2.set key value ...

  9. Redis学习--Redis的安装与Jedis的简单使用

    Redis安装 关于软件安装,之前是通过记录视频,前段时间发现可以直接阅读官网进行安装,这步省略 启动:前端启动直接启动src目录下redis-server,后端启动修改redis.conf中daem ...

随机推荐

  1. java如何压缩多个文件到压缩包,并下载到浏览器?

    java压缩多个文件到压缩包,并下载到浏览器   解决方法: 完整的方法如下,很简单,亲试有效,极力推荐. 我是以流作为文件,而不是file,循环把所有pdf文件压缩到pdf.zip压缩包中. 1.前 ...

  2. Qt编写自定义控件42-开关按钮

    一.前言 从2010年进入互联网+智能手机时代以来,各种各样的APP大行其道,手机上面的APP有很多流行的元素,开关按钮个人非常喜欢,手机QQ.360卫士.金山毒霸等,都有很多开关控制一些操作,在Qt ...

  3. 123457123457#0#-----com.yuming.TruckCarRun01--前拼后广--大卡车游戏cym

    com.yuming.TruckCarRun01--前拼后广--大卡车游戏cym

  4. C#将HTML代码转换为图片

    前端通过富文本控件接收到了一段html代码,后端想通过图片的形式展示到另外的地方,这种情况怎么处理呢.直接上代码: using System; using System.Collections.Gen ...

  5. LeetCode_27. Remove Element

    27. Remove Element Easy Given an array nums and a value val, remove all instances of that value in-p ...

  6. Swift学习 (二)

    2.控制流: 主要有三种类型的语句 if,switch和新增的guard for,while break,continue 关于if 语句里的条件不再需要使用()包裹了. 1 2 3 4 let nu ...

  7. 【c# 学习笔记】类与结构体的区别

    由于类与结构体在语法和使用上都非常类似,导致我们这些初学者容易混淆.为更好理解,特做以下区分记录: ① 语法上的区别在于,定义类要使用关键词class,而定义结构体则使用关键词struct. ② 结构 ...

  8. npm的问题【解决】

    1.解决npm下载慢的问题,使用该命令 npm install --registry=https://registry.npm.taobao.org 好处:比起cnpm官网解释的,这个更好,使用cnp ...

  9. 解决X-Scan安装后“无法启动此程序,因为计算机丢失NPPTools.dll”

    最近在一本书中看到X-Scan这个扫描器,虽说X-Scan相比现在的扫描器已经有点过时了,但也想下载来试一试,谁知道在VM中Win7安装时出现这种问题 可以在脚本之家找到缺失的这个文件:https:/ ...

  10. Andrew Ng机器学习课程14(补)

    Andrew Ng机器学习课程14(补) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 利用EM对factor analysis进行的推导还是要参看我的上一 ...