使用Spring-data-redis操作Redis的Sentinel
介绍
Spring-Data-Redis项目(简称SDR) 是对Redis的Key-Value数据存储操作提供了更高层次的抽象,提供了一个对几种主要的redis的Java客户端(例 如:jedis,jredis,jdbc-redis等)的抽象,使开发中可以几乎完全屏蔽具体使用客户端的影响,使业务代码保持较强的稳定性。
Spring-Data-Redis提供了一个基础的泛型RedisTemplate供开发者快速的利用代码完成基础的crud工作。而StringRedisTemplate则提供了最常用的String类型的实现。在实践中可以考虑完全省去dao层的设计,直接在service层注入相应的template实例。
Redis Sentinel是Redis官 方提供的集群管理工具,使用一个或多个sentinel和Redis的master/slave可以组成一个群集,可以检测master实例是否存活,并 在master实例发生故障时,将slave提升为master,并在老的master重新加入到sentinel的群集之后,会被重新配置,作为新 master的slave。这意味着基于Redis sentinel的HA群集是能够自我管理的。
环境
本文基于redis-2.8.19和jedis2.4.2版本。
在一台机器上启动3个redis,一个做master,两个做slave。
Master 端口:6380
Slave1 端口:6381
Slave2端口:6382
Sentinel配置
Master
redis.conf
port 6380
sentinel.conf
port 26380
sentinel monitor mymaster 192.168.0.100 6380 2
Slave1
redis.conf
port 6381
slaveof 192.168.0.100 6380
sentinel.conf
port 26381
sentinel monitor mymaster 192.168.0.100 6380 2
Slave2
redis.conf
port 6382
slaveof 192.168.0.100 6380
sentinel.conf
port 26382
sentinel monitor mymaster 192.168.0.100 6380 2
Spring配置
<beanid="redisSentinelConfiguration"
class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
<propertyname="master">
<beanclass="org.springframework.data.redis.connection.RedisNode">
<propertyname="name"value="mymaster"></property>
</bean>
</property>
<propertyname="sentinels">
<set>
<beanclass="org.springframework.data.redis.connection.RedisNode">
<constructor-argname="host"value="192.168.0.100"></constructor-arg>
<constructor-argname="port"value="26380"></constructor-arg>
</bean>
<beanclass="org.springframework.data.redis.connection.RedisNode">
<constructor-argname="host"value="192.168.0.100"/>
<constructor-argname="port"value="26381"/>
</bean>
<beanclass="org.springframework.data.redis.connection.RedisNode">
<constructor-argname="host"value="192.168.0.100"/>
<constructor-argname="port"value="26382"/>
</bean>
</set>
</property>
</bean>
<beanid="jeidsConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<constructor-argref="redisSentinelConfiguration"/>
</bean>
<beanid="redisTemplate"class="org.springframework.data.redis.core.RedisTemplate"
p:connection-factory-ref="jeidsConnectionFactory"/>
程序
写数据
public void set(final byte[] key, finalbyte[] value,final longliveTime) {
redisTemplate.execute(new RedisCallback() {
public LongdoInRedis(RedisConnectionconnection)
throws DataAccessException {
connection.set(key,value);
if (liveTime > 0) {
connection.expire(key,liveTime);
}
return 1L;
}
});
}
读数据
public byte[] get(final byte[] key) {
return redisTemplate.execute(new RedisCallback() {
public byte[]doInRedis(RedisConnection connection)
throws DataAccessException {
returnconnection.get(key);
}
});
}
删数据
public long del(final String...keys) {
return redisTemplate.execute(new RedisCallback() {
public LongdoInRedis(RedisConnectionconnection)
throws DataAccessException {
longresult = 0;
for (inti = 0; i < keys.length; i++) {
result = connection.del(keys[i].getBytes());
}
returnresult;
}
});
}
注意
1) 在配置Redis的sentinel.conf文件时注意使用外部可以访问的ip地址,因为当redis-sentinel服务和redis-server在同一台机器的时候,主服务发生变化时配置文件中将主服务ip变为127.0.0.1,这样外部就无法访问了。
2) 发生master迁移后,如果遇到运维需要,想重启所有redis,必须最先重启“新的”master节点,否则sentinel会一直找不到master。
使用Spring-data-redis操作Redis的Sentinel的更多相关文章
- 使用Spring Data Redis操作Redis(集群版)
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...
- spring data jpa 操作pipelinedb 的continuous view 与stream
一. 由于pipelinedb是postgreSQL的扩展,因此相关依赖于配置都合集成postgreSQL是一样的. springboot + spring data jpa + postgreSQL ...
- Spring Boot使用Spring Data Redis操作Redis(单机/集群)
说明:Spring Boot简化了Spring Data Redis的引入,只要引入spring-boot-starter-data-redis之后会自动下载相应的Spring Data Redis和 ...
- 使用Spring Data Redis操作Redis(单机版)
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...
- Spring 使用RedisTemplate操作Redis
首先添加依赖: <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> < ...
- Spring Data Solr操作solr的简单案例
Spring Data Solr简介 虽然支持任何编程语言的能力具有很大的市场价值,你可能感兴趣的问题是:我如何将Solr的应用集成到Spring中?可以,Spring Data Solr就是为了方便 ...
- 通过Spring Data Neo4J操作您的图形数据库
在前面的一篇文章<图形数据库Neo4J简介>中,我们已经对其内部所使用的各种机制进行了简单地介绍.而在我们尝试对Neo4J进行大版本升级时,我发现网络上并没有任何成型的样例代码以及简介,而 ...
- Spring Boot (五)Spring Data JPA 操作 MySQL 8
一.Spring Data JPA 介绍 JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Sprin ...
- [Reprinted] 使用Spring Data Redis操作Redis(一) 很全面
Original Address: http://blog.csdn.net/albertfly/article/details/51494080
- 使用WeihanLi.Redis操作Redis
WeihanLi.Redis Intro StackExchange.Redis 扩展,更简单的泛型操作,并提供一些的适用于业务场景中的扩展 基于 Redis 的五种数据类型扩展出了一些应用: Str ...
随机推荐
- HUST 4681 String (DP LCS变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 题目大意:给定三个字符串A,B,C 求最长的串D,要求(1)D是A的字序列 (2)D是B的子序列 ...
- WPF自定义窗口(Windows Server 2012 Style)
先上图 新建CustomControl,名:HeaderedWindow Themes\Generic.aml文件夹下加入 笔刷,转换器 <SolidColorBrush x:Key=" ...
- js学习--DOM操作详解大全 前奏(认识DOM)
一 . 节点属性 DOM 是树型结构,相应的,可以通过一些节点属性来遍历节点树: 方法 说明 nodeName 节点名称,相当于tagName.属性节点返回属性名,文本节点返回#text.nodeNa ...
- window.frameElement属性
比如有一个iframe的src是xxx.htm frameElement的作用就是在xxx.htm中获得这个引用它的iframe objet 这样你就可以在xxx.htm改变iframe的大小,或是边 ...
- android sdk api的层次结构
一.系统级:android.accounts android.app 1.OS 相关 android.os android.os.storage ...
- centos7 systemctl grub2
centos最小好化安装没有ifconfig命令 刚安装了centos7.0,最小化安装,发现没有ifconfig命令,虚拟机里面的网卡显示ens32,这是centos7.0的特点,要使用 ifcon ...
- Scut 上线后遇到的问题
1. 上线后的大并发问题: var sem = new Semaphore(_accepts, _accepts); while (true) { sem.WaitOne(); #pragma war ...
- 手动实现 NSTabViewController 的 Rect Transition 及 Propagate Title-b
不知为何 我在 OS X 10.11.5 及 Xcode 7.3 的 Storyboard 中设置 Tab View Controller 的 Transition 属性时,Tab View Cont ...
- 用VS2010编写的C++程序,在其他电脑上无法运行,提示缺少mfc100.dll的解决办法
问题: 在自己电脑上用VS2010编写的VC++程序(使用MFC库),不能在其他电脑上运行.双击提示: "无法启动此程序,因为计算机中丢失mfc100.dll 尝试重新安装该程序以解决此问题 ...
- Java 8:如何使用流方式查询数据库?
Speedment 是使用 ORM 方式操作数据库的一种选择,以前我们需要100行操作数据库的 Java 代码,在 Java 8中,可能只需要一行代码. 在90年代末,我使用 Java 开发数据库应用 ...