介绍

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的更多相关文章

  1. 使用Spring Data Redis操作Redis(集群版)

    说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...

  2. spring data jpa 操作pipelinedb 的continuous view 与stream

    一. 由于pipelinedb是postgreSQL的扩展,因此相关依赖于配置都合集成postgreSQL是一样的. springboot + spring data jpa + postgreSQL ...

  3. Spring Boot使用Spring Data Redis操作Redis(单机/集群)

    说明:Spring Boot简化了Spring Data Redis的引入,只要引入spring-boot-starter-data-redis之后会自动下载相应的Spring Data Redis和 ...

  4. 使用Spring Data Redis操作Redis(单机版)

    说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...

  5. Spring 使用RedisTemplate操作Redis

    首先添加依赖: <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> < ...

  6. Spring Data Solr操作solr的简单案例

    Spring Data Solr简介 虽然支持任何编程语言的能力具有很大的市场价值,你可能感兴趣的问题是:我如何将Solr的应用集成到Spring中?可以,Spring Data Solr就是为了方便 ...

  7. 通过Spring Data Neo4J操作您的图形数据库

    在前面的一篇文章<图形数据库Neo4J简介>中,我们已经对其内部所使用的各种机制进行了简单地介绍.而在我们尝试对Neo4J进行大版本升级时,我发现网络上并没有任何成型的样例代码以及简介,而 ...

  8. Spring Boot (五)Spring Data JPA 操作 MySQL 8

    一.Spring Data JPA 介绍 JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Sprin ...

  9. [Reprinted] 使用Spring Data Redis操作Redis(一) 很全面

    Original Address: http://blog.csdn.net/albertfly/article/details/51494080

  10. 使用WeihanLi.Redis操作Redis

    WeihanLi.Redis Intro StackExchange.Redis 扩展,更简单的泛型操作,并提供一些的适用于业务场景中的扩展 基于 Redis 的五种数据类型扩展出了一些应用: Str ...

随机推荐

  1. Javascript面试题浅析

    分享几道JavaScript相关的面试题. 字符串反转 这这里提供了两种解题思路.如果各位读者还有其他的思路,可以分享交流! 第一方法: function reverse(str){ var sp = ...

  2. 在js脚本里计算多个小数的加法问题

    当在js脚本里计算多个小数的加法时,算得的结果往往会自动取整,这时候我们就应该加入以下代码: function toDecimal(x) { var val = Number(x); if (!isN ...

  3. Dreamweaver安装jQuery插件jQuery_API.mxp

    要让Dreamweaver支持jQuery自动提示代码功能,方法很简单,下载一个插件—jQuery_API.mxp[点击下载]. 在Dreamweaver里依次选择“命令” -> “扩展管理” ...

  4. 一. 什么是ANR?为什么会有ANR发生?

    对于Android平台的工程师来说,ANR应该是每个人都会遇到的问题,因为导致它的原因有很多,例如在主线程进行耗时操作,调用大量cpu资源进行复杂的预算等,并且可能在大多数情况下,这类问题不会发生,只 ...

  5. 禁用微信 webview 调整字体大小

    原文:http://www.grycheng.com/?p=2411 微信 webview 内置了调整字体大小的功能,对于网页的可用性来说是一个很实用的功能.一些网页的字体设置过小导致用户看不清文字, ...

  6. linux 备份日志文件

    seo说要备份文件,然后自己搞不定,每天一份文件.写了个shell,加了个crontab -e任务.每天执行一次. crontab: 59 23 * * * /root/sh/dumpApacheLo ...

  7. #Leet Code# Divide Two Integers

    描述:不使用 * / % 完成除法操作.O(n)复杂度会超时,需要O(lg(n))复杂度. 代码: class Solution: # @return an integer def dividePos ...

  8. 利用R进行多元线性回归分析

    对于一个因变量y,n个自变量x1,...,xn,要如何判断y与这n个自变量之间是否存在线性关系呢? 肯定是要利用他们的数据集,假设数据集中有m个样本,那么,每个样本都分别对应着一个因变量和一个n维的自 ...

  9. 欧拉计划 NO05 ps:4题想过,好做,但麻烦,有时间补充,这题也不难!

    问题重述: 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without an ...

  10. 解决File.delete()删除不掉文件

    首先注意两点: 此文件被使用的时候无法删除(比如网络输出没关闭流) 判断此文件是否存在再做删除(exists) 删除文件夹之前先删除文件夹下的所有文件(递归解决) 判断是否删除成功会有返回值,文件名错 ...