操作系统:centos 6.3
redis版本:3.0.6
java客户端版本: jedis 2.7.2
redis客户端图形用户界面:RedisDesktopManager
1.redis服务端集群搭建步骤:
1.下载redis安装包,进行解压安装
2.安装ruby、rubygems install ruby ,安装ruby的原因是,在进行集群的时候,使用的是ruby语言工具实现的,所以在集群之前首先需要搭建ruby的环境
3.在上述步骤完成之后,便可以搭建集群环境,redis提供了两种集群搭建方法,执行脚本方法(安装包下面的util包中)和手动搭建。
注意:
1.在集群的时候,如果是远端客户端访问redis服务端,那么在分片的时候,需要使用Ip进行分片,下面会详细说
2.在创建每个节点的时候,不要只用redis-server ,使用绝对路径下的redis-server xxx
具体的安装步骤如下:http://blog.csdn.net/xu470438000/article/details/42971091
2.客户端(java):
注意:
1.本文的客户端使用的是java,官网中对于java客户端也提供了不少的client,但是本文使用的是官方推荐的jedis。
2.在项目开发中,一般情况下都会用到spring来管理应用,本文也是如此,spring 本身也提供了对redis的集成支持,具体的网址:http://projects.spring.io/spring-data-redis,
但是好像目前spring-data-redis不提供集群的功能,所以本文没有使用它,而是使用了原装的jedis来进行开发,如果在项目中没有用到集群的功能,则可以使用spirng-data-redis。
下面是具体的代码实现
1.maven依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.2</version> </dependency>
2.applicationContext.xml中的配置
<!-- jedis cluster config --> <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="com.besttone.subscribe.util.JedisClusterFactory"> <property name="addressConfig"> <value>classpath:redis-config.properties</value> </property> <property name="addressKeyPrefix" value="address" /> <property name="timeout" value="300000" /> <property name="maxRedirections" value="6" /> <property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" /> </bean>
3.JedisClusterFactory实现类
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; } }
4.redis-config.properties文件
这是一个集群环境,六个节点(不同端口),三个master ,三个slaver
address1=192.168.30.139:7000 address2=192.168.30.139:7001 address3=192.168.30.139:7002 address4=192.168.30.139:7003 address5=192.168.30.139:7004 address6=192.168.30.139:7005
5.项目目录图
6.代码中使用(此代码为从redis中获取相关信息)
ok,运行之后,会发现redis会根据不同的key,把它们放入到不同的节点中,如下图
7.三个master节点中的数据
8.三个slave节点中的数据
实践过程中碰到的问题:
1.在一切准备好了之后,在操作redis的时候,却报错误:Too many Cluster redirections
由于,我是windows开发环境,在本机开了一个虚拟机,然后在虚拟机中搭建的linux集群环境,本机的ip和虚拟机中的ip不相同,所以报这个错误,
解决方法:在redis集群搭建过程中,在为每个节点分hash槽的时候,执行如下代码(其中,xxx为集群环境中的ip):
./redis-trib.rb create --replicas 1 xxx.xxx.xxx.xxx:7000 xxx.xxx.xxx.xxx:7001 xxx.xxx.xxx.xxx:7002 xxx.xxx.xxx.xxx:7003 xxx.xxx.xxx.xxx:7004 xxx.xxx.xxx.xxx:7005./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
ok,以上满足使用,结束!!
相关推荐
2. 初始化JedisCluster:在Java代码中,我们需要创建一个JedisCluster对象,传入Redis集群的节点信息。这里以公网IP为例: ```java Set<HostAndPort> nodes = new HashSet(); nodes.add(new HostAndPort("公网IP...
通过这份源码,你可以学习到如何在Java应用中实现对Redis集群的正确配置和高效使用,以及如何处理集群环境中的异常情况。同时,了解这些知识对于提升应用的稳定性和扩展性至关重要。通过实践,你将能够更好地理解和...
然后,需要在Java代码中链接Redis集群,使用JedisPoolConfig配置对象来设置链接池的参数。 三、高可用测试 高可用测试是指对Redis集群的可用性进行测试,以确保集群在节点故障或网络故障的情况下仍能正常工作。...
Redis 集群的高可用测试(含 Jedis 客户端的使用) ...本文详细介绍了如何使用 Jedis 客户端来测试 Redis 集群的高可用性,希望能够帮助读者更好地了解 Redis 集群的高可用测试,并且可以应用于实际项目中。
总的来说,Redis 集群的搭建和 Java 中的使用涉及多个步骤,包括下载安装 Redis、配置集群、创建自启动脚本以及集成 Jedis 客户端。通过这种方式,可以有效地应对高并发场景,提高应用性能和数据安全性。在实际开发...
2. **Java客户端**:Java中常见的Redis客户端有Jedis、Lettuce和Redisson等。它们都提供了与Redis服务器通信的API,包括连接管理、命令执行、事务处理等功能。例如,Jedis是较早的Redis客户端,功能完备,而Lettuce...
总结起来,要在Java中连接Redis集群并批量插入String类型数据,你需要: 1. 配置JedisCluster实例,包含所有集群节点的信息。 2. 创建一个Map对象,存储键值对。 3. 使用`mset`方法执行批量插入。 4. 确保所有键在...
在SpringCloud框架中,部署Redis集群是实现高可用、数据持久化和分布式缓存的关键步骤。Redis是一款高性能的键值数据库,广泛应用于缓存、消息队列等多种场景。SpringCloud通过集成Spring Data Redis模块,使得在...
【Redis集群连接及工具类DEMO】是一个Spring工程,它提供了与Redis集群交互的实例,同时也包含了一些实用的工具类,使得开发者能够更方便地在Java应用中使用Redis作为数据存储。这个DEMO的主要目标是展示如何配置和...
本指南将详细阐述如何搭建 Redis 集群环境,并介绍在 Java 应用中对集群进行基本的增删改查操作。 一、Redis 集群环境搭建 1. 安装 Redis 首先,你需要在多台服务器或虚拟机上安装 Redis。下载最新稳定版本的 ...
在本资料包中,您将找到关于Redis集群搭建的详细步骤和教程。 首先,Redis集群的基本概念是将数据分散到多个节点上,每个节点存储一部分数据。它采用无中心架构,每个节点都可以接收客户端的请求,并通过哈希槽...
### Redis集群环境搭建详解 #### 一、Redis简介与应用场景 **Redis**(REmote DIctionary Server)是一款由 Salvatore Sanfilippo 开发的开源内存数据结构存储系统,使用 C 语言编写,支持多种数据结构,如字符串、...
总之,Jedis作为Java开发中的Redis客户端,提供了全面的Redis操作支持,是构建高性能、高可用Java应用的重要工具。了解并熟练使用Jedis的各项特性和最佳实践,能够帮助开发者充分发挥Redis在缓存、消息传递等方面的...
在这个资源中,我们将探讨如何使用 Java 客户端连接 Redis 集群,并实现单例模式和集群模式的连接。 Redis 集群 Redis 集群是一种高可用性的 Redis 部署方式,通过将多个 Redis 节点组成一个集群,可以提高整个...
标题中的“jfinal redis cluster plugin”指的是一个专为JFinal框架设计的Redis集群插件,旨在帮助开发者在使用JFinal时能便捷地接入并管理Redis集群。JFinal是一款基于Java的轻量级Web开发框架,它以其简洁的API...
安装完成后,Redis 集群将启动,用户可以通过 jedis 等客户端来访问集群。 知识点总结: * Redis 是一个开源、基于内存的数据结构存储系统。 * Redis 集群环境安装需要安装 gcc、ruby、rubygem 和 gem-redis 等...
项目由maven构建,使用springMVC整合了Redis的集群,发布到tomcat中,访问http://localhost:8080/SpringRedisCluster/redis/hello.do测试即可,前提是配好了redis的集群。
1. 前言 在使用redis集群时,发现...关于Redis集群配置代码此处不贴,直接贴配置监听类代码! redis.host1: 10.113.56.68 redis.port1: 7030 redis.host2: 10.113.56.68 redis.port2: 7031 redis.host3: 10.113.56.6
windows环境下redis集群的搭建,搭建频繁如下: redis集群测试 01、安装Redis 02、创建6个目录Redis7001、Redis7002、Redis7003、Redis7004、Redis7005、Redis7006 03、把Redis目录下的redis.windows.conf文件分别...