最近在公司做了 jedisCluster整合spring 的配置, 分享如下
客户端采用最新的jedis 2.7
1.
maven依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
</dependency>
2.
增加spring 配置
<bean name="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig" > <property name="maxWaitMillis" value="-1" /> <property name="maxTotal" value="1000" /> <property name="minIdle" value="8" /> <property name="maxIdle" value="100" /> </bean> <bean id="jedisCluster" class="xxx.JedisClusterFactory"> <property name="addressConfig"> <value>classpath:connect-redis.properties</value> </property> <property name="addressKeyPrefix" value="address" /> <!-- 属性文件里 key的前缀 --> <property name="timeout" value="300000" /> <property name="maxRedirections" value="6" /> <property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" /> </bean>
3.
增加connect-redis.properties 配置文件
这里配置了6个节点
address1=172.16.23.27:6379 address2=172.16.23.27:6380 address3=172.16.23.27:6381 address4=172.16.23.27:6382 address5=172.16.23.27:6383 address6=172.16.23.27:6384
4.
增加java类:
import java.util.HashSet; import java.util.Properties; import java.util.Set; import java.util.regex.Pattern; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.io.Resource; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; public class JedisClusterFactory implements FactoryBean<JedisCluster>, InitializingBean { private Resource addressConfig; private String addressKeyPrefix ; private JedisCluster jedisCluster; private Integer timeout; private Integer maxRedirections; private GenericObjectPoolConfig genericObjectPoolConfig; private Pattern p = Pattern.compile("^.+[:]\\d{1,5}\\s*$"); @Override public JedisCluster getObject() throws Exception { return jedisCluster; } @Override public Class<? extends JedisCluster> getObjectType() { return (this.jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class); } @Override public boolean isSingleton() { return true; } private Set<HostAndPort> parseHostAndPort() throws Exception { try { Properties prop = new Properties(); prop.load(this.addressConfig.getInputStream()); Set<HostAndPort> haps = new HashSet<HostAndPort>(); for (Object key : prop.keySet()) { if (!((String) key).startsWith(addressKeyPrefix)) { continue; } String val = (String) prop.get(key); boolean isIpPort = p.matcher(val).matches(); if (!isIpPort) { throw new IllegalArgumentException("ip 或 port 不合法"); } String[] ipAndPort = val.split(":"); HostAndPort hap = new HostAndPort(ipAndPort[0], Integer.parseInt(ipAndPort[1])); haps.add(hap); } return haps; } catch (IllegalArgumentException ex) { throw ex; } catch (Exception ex) { throw new Exception("解析 jedis 配置文件失败", ex); } } @Override public void afterPropertiesSet() throws Exception { Set<HostAndPort> haps = this.parseHostAndPort(); jedisCluster = new JedisCluster(haps, timeout, maxRedirections,genericObjectPoolConfig); } public void setAddressConfig(Resource addressConfig) { this.addressConfig = addressConfig; } public void setTimeout(int timeout) { this.timeout = timeout; } public void setMaxRedirections(int maxRedirections) { this.maxRedirections = maxRedirections; } public void setAddressKeyPrefix(String addressKeyPrefix) { this.addressKeyPrefix = addressKeyPrefix; } public void setGenericObjectPoolConfig(GenericObjectPoolConfig genericObjectPoolConfig) { this.genericObjectPoolConfig = genericObjectPoolConfig; } }
5.
到此配置完成
使用时,直接注入即可, 如下所示:
@Autowired
JedisCluster jedisCluster;
相关推荐
(4)集群:Redis 3.0支持集群,可以将多个Redis实例拼接成一个集群,并实现负载均衡,提高Redis的可用性。 3、总结: Redis 3.0是一款高性能的开源内存数据库,它拥有非常快速的读写性能,几乎是传统数据库的1000倍...
redis3.0 widows集群 spring整合jedis redis搭建window集群代码和文档rubygems-2.5.1和rubyinstaller-2.2.3-x64软件下载
Redis 3.0 集群环境安装手册 Redis 3.0 集群环境安装手册是指在 Linux 操作系统中安装和配置 Redis 3.0 集群的步骤指南。Redis 是一个开源、基于内存的数据结构存储系统,可以用作数据库、消息队列、缓存层等。 ...
### Redis 3.0 集群指南 #### 一、Redis 3.0 的安装与配置 **安装步骤:** 在安装 Redis 3.0 之前,首先确保已安装了必要的依赖包,如 cpp、binutils、glibc 等。通过 `yum` 命令安装这些依赖: ```bash yum -y ...
cp /usr/local/redis3.0/redis.conf /usr/local/cluster/ vi redis.conf ``` - 修改以下配置项: - `port`: 设置为节点对应的端口号(例如7000) - `daemonize yes`: 后台运行 - `cluster-enabled yes`: 开启...
为了监控Redis集群的状态,可以使用`JedisCluster`或`LettuceClientResources`提供的方法获取节点信息。同时,定期检查节点的健康状况和复制状态,确保数据的一致性和完整性。 总的来说,部署SpringCloud中的Redis...
5. **Cluster改进**: Redis Cluster在3.0版本中得到了进一步优化,增加了更多的自动故障转移功能,使得分布式部署更加稳定。此外,槽的迁移过程也更加平滑,减少了服务中断的时间。 6. **Bits per value (Bitmaps)*...
Redis3.0集群代理系统, 并发接收客户端请求,计算Key的哈希槽值,转发到对应的缓存服务器,并将缓存服务器的返回值回传给客户端, 这样客户端只要访问集群代理系统,实现一次性定位访问,效率与单台缓存服务器...
当我们谈论"spring4.0结合redis3.0"时,主要涉及到如何在Spring 4.0版本的应用中集成并利用Redis 3.0的功能。 首先,集成Spring与Redis的关键在于`spring-data-redis`模块,它为Spring应用提供了操作Redis的高级...
虽然Redis 3.0不支持集群功能,但在更高版本中,Redis引入了集群方案,允许在多台服务器之间分散数据,提高可用性和容量。若需要扩展,可以考虑升级到更高版本或使用哨兵(Sentinel)系统实现高可用性。 综上所述,...
通过这个“redis3.0 demo”,我们可以学习如何配置和使用Redis集群,如何编写和执行LUA脚本,以及如何利用其他新特性来优化应用性能。同时,它也将演示如何处理复制、连接管理和安全性等核心问题。通过实践,你可以...
最后,可以使用`redis-cli`工具连接到集群中的任一节点,并使用`cluster nodes`命令来查看当前集群的状态和节点信息。 ```bash ./redis-cli -h 192.168.118.136 -p 7001 192.168.118.136:7001> cluster nodes ``` ...
Redis 3.0 集群与应用是关于如何配置、管理和使用Redis分布式数据库系统的一个教程,旨在提供简单明了的指导。Redis是一款高性能的键值存储服务,常用于数据库缓存、消息队列等场景。在3.0版本中,引入了集群功能,...
Java客户端库如JedisCluster或Lettuce提供了连接和操作Redis集群的API。 批量插入String类型数据时,通常使用`JedisCluster`类中的`mset`方法。这个方法允许一次性设置多个键值对,但需要注意的是,由于Redis集群的...
本资源“redis3.0-window免安装”是专门为Windows操作系统设计的Redis 3.0版本,旨在简化在Windows平台上的部署和使用流程。 Redis 3.0是一个重要的版本,它引入了多项新特性和改进,包括但不限于: 1. **多线程...
redis3.0 的 nodejs 扩展,支持基于 nodejs npm redis url 的集群: : 更改日志 当我们向 redis 集群的一个节点发送命令时,我们可能会收到类似“ERR: MOVED 111 127.0.0.1:6379”的返回错误。 这不是错误,而是...
本文将详细讲解如何在Windows环境下安装Redis 3.0.503版本,以及安装过程中可能遇到的问题和解决方法。 首先,Redis 3.0.503是Redis的一个较早版本,但在当时已经具备了稳定性和高效性。在安装前,确保你的系统满足...
这个"redis3.0-windows"压缩包文件显然包含了Redis 3.0版本的Windows兼容版本,允许用户在Windows操作系统上运行和管理Redis实例。 Redis的核心特性包括: 1. **键值存储**:Redis的基础是键值对存储,它允许存储...