Redis单机集群配置和java客户端

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jintao_Ma/article/details/60746267

Redis单机集群配置和java客户端

一.redis使用手册 

二.redis单机安装

三.redis的java单机客户端配置和调试

四.redis集群配置手册翻译和配置

五.redis的java集群客户端配置和调试

一.redis使用手册

Redis的官网首页https://redis.io/有基本介绍: 它是一个内存型数据结构存储系统,被用作数据库,缓存和中间件。另外有一个redis命令手册的中文网站:http://doc.redisfans.com/

二.redis单机安装

2.1 官网下载redis-3.2.6-.tar.gz(目前最新版是3.2.8),解压后在主目录redis-3.2.6下,redis.conf是它的配置文件:


bind指定特定client可访问,注释掉则任意client可访问

port执行server开放的端口,默认6379

repass指密码,注释掉则不需要密码则可以访问

protected-mode值为yes,旨在提供保护模式,当bind和repass均注释时,只允许本地可访问。

2.2 启动redis服务器

需要指定redis.conf;如果不指定则默认在当前目录下寻找,所以如果不指定的话,当前目录需是redis.conf所在目录。


由于redis默认配置是bind本地,且配置密码,则本地启动client如下:


三.redis单机客户端配置(使用之前搭建的项目http://download.csdn.net/detail/jintao_ma/9661038)

3.1 添加maven依赖

<!-- jedis配置 -->
	<dependency>
	    <groupId>redis.clients</groupId>
	    <artifactId>jedis</artifactId>
	    <version>2.9.0</version>
	</dependency>

3.2 redis.properties(虚拟机中redis服务器地址为192.168.13.172,,另外由于使用java客户端调试,为方便,将redis.conf中bind注释掉)

redis.host = 192.168.13.172
redis.port = 6379
redis.password = 123456

springRedis.xml配置

	<!-- 连接池配置 -->
	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<!-- 最大连接数 -->
		<property name="maxTotal" value="300" />
		<!-- 最大空闲连接数 -->
		<property name="maxIdle" value="10" />
		<!-- 每次释放连接的最大数目 -->
		<property name="numTestsPerEvictionRun" value="1024" />
		<!-- 释放连接的扫描间隔(毫秒) -->
		<property name="timeBetweenEvictionRunsMillis" value="30000" />
		<!-- 连接最小空闲时间 -->
		<property name="minEvictableIdleTimeMillis" value="1800000" />
		<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
		<property name="softMinEvictableIdleTimeMillis" value="10000" />
		<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
		<property name="maxWaitMillis" value="1500" />
		<!-- 在获取连接的时候检查有效性, 默认false -->
		<property name="testOnBorrow" value="true" />
		<!-- 在空闲时检查有效性, 默认false -->
		<property name="testWhileIdle" value="true" />
		<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
		<property name="blockWhenExhausted" value="false" />
	</bean>	
<!-- jedis客户端单机版 -->
	<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
		<constructor-arg name="host" value="${redis.host}"></constructor-arg>
		<constructor-arg name="port" value="${redis.port}"></constructor-arg>
		<constructor-arg name="password" value="${redis.password}"></constructor-arg>
		<constructor-arg name="timeout" value="3000"></constructor-arg>
		<constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
	</bean>

JedisClient.java

package com.mycompany.jedis.dao;

public interface JedisClient {
	
	/**获取缓存
	 * @param key
	 * @return
	 */
	String get(String key);

	/**设置缓存
	 * @param key
	 * @param value
	 * @return
	 */
	String set(String key, String value);
}

JedisClientImpl.java

package com.mycompany.jedis.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

@Repository("jedisClient")
public class JedisClientImpl implements JedisClient{

	@Autowired
	private JedisPool jedisPool;
	
	@Override
	public String get(String key) {
		String value = null;
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			value = jedis.get(key);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(jedis!=null){
				jedis.close();
			}
		}
		return value;
	}

	@Override
	public String set(String key, String value) {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			value = jedis.set(key, value);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(jedis!=null){
				jedis.close();
			}
		}
		return value;
	}
	
}

使用定时器跑类JedisTest.java:

package com.mycompany.mvc.quartz;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mycompany.jedis.dao.JedisClient;

@Service("jedisTest")
public class JedisTest {

	@Autowired
	private JedisClient jedisClient;
	
	public void JedisTestMain(){
		jedisClient.set("tString","hello");
		String tString  = jedisClient.get("tString");
		System.out.println("JedisTest.JedisTestMain():"+tString);
	}
	
}

至此,已完成。

四.redis集群配置手册翻译和配置

在配置和使用之前需要阅读文档,官方:https://redis.io/topics/cluster-tutorial,最其中涉及到集群配置的部分进行翻译:http://blog.csdn.net/jintao_ma/article/details/60756645

本例的配置如下:

4.1 redis.conf配置中,注释bind,注释repass,protected-mode设置为no

然后设置一下几个选项:

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

4.2 redis主目录下新建目录cluster-test,然后cluster-test中新建子目录7000 7001 7002 7003 7004 7005,复制主目录的redis.conf到每个子目录中,修改端口port分别为7000 7001 7002 7003 7004 7005

在子目录中启动每个redis服务器:

cd 7000
../redis-server ./redis.conf

然后在每个子目录中会产生nodes.conf


查看,会发现其中记录了序列号,用来作为该服务器的唯一标识

4.3 下面需要创建集群

在每个server都启动后,然后创建集群。安装zlib,ruby,rubygem;如:yum -y install zlib,yum -y install ruby,yum -y install rubygem

安装完成后检验下:


之后可使用gem命令:

gem install redis

使用gem安装redis之后,接着就可以在redis主目录src目录下使用redis-trib.rb 这个ruby命令来创建集群:

./redis-trib.rb create --replicas 1 192.168.13.172:7000 192.168.13.172:7001 \
192.168.13.172:7002 192.168.13.172:7003 192.168.13.172:7004 192.168.13.172:7005

如下即可:




五.redis的java集群客户端配置和调试
5.1 redis.properties

redis01.host = 192.168.13.172
redis01.port = 7000
redis02.host = 192.168.13.172
redis02.port = 7001
redis03.host = 192.168.13.172
redis03.port = 7002
redis04.host = 192.168.13.172
redis04.port = 7003
redis05.host = 192.168.13.172
redis05.port = 7004
redis06.host = 192.168.13.172
redis06.port = 7005

spring-Redis.xml

	<!-- 连接池配置 -->
	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<!-- 最大连接数 -->
		<property name="maxTotal" value="300" />
		<!-- 最大空闲连接数 -->
		<property name="maxIdle" value="10" />
		<!-- 每次释放连接的最大数目 -->
		<property name="numTestsPerEvictionRun" value="1024" />
		<!-- 释放连接的扫描间隔(毫秒) -->
		<property name="timeBetweenEvictionRunsMillis" value="30000" />
		<!-- 连接最小空闲时间 -->
		<property name="minEvictableIdleTimeMillis" value="1800000" />
		<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
		<property name="softMinEvictableIdleTimeMillis" value="10000" />
		<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
		<property name="maxWaitMillis" value="1500" />
		<!-- 在获取连接的时候检查有效性, 默认false -->
		<property name="testOnBorrow" value="true" />
		<!-- 在空闲时检查有效性, 默认false -->
		<property name="testWhileIdle" value="true" />
		<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
		<property name="blockWhenExhausted" value="false" />
	</bean>
<!-- jedis集群版配置 -->
	<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
		<constructor-arg name="jedisClusterNode">
			<set>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis01.host}"/>
                  	<constructor-arg name="port" value="${redis01.port}"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis02.host}"/>
                  	<constructor-arg name="port" value="${redis02.port}"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis03.host}"/>
                  	<constructor-arg name="port" value="${redis03.port}"/>
                  	
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis04.host}"/>
                  	<constructor-arg name="port" value="${redis04.port}"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis05.host}"/>
                  	<constructor-arg name="port" value="${redis05.port}"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis06.host}"/>
                  	<constructor-arg name="port" value="${redis06.port}"/>
				</bean>				
			</set>
		</constructor-arg>
		<constructor-arg name="connectionTimeout" value="10000"></constructor-arg>
		<constructor-arg name="soTimeout" value="10000"></constructor-arg>
		<constructor-arg name="maxAttempts" value="10000"></constructor-arg>
<!-- 		<constructor-arg name="password" value="${redisCluster.password}"></constructor-arg> -->
		<constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
	</bean>

JedisClusterClientImpl.java

package com.mycompany.jedis.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import redis.clients.jedis.JedisCluster;

@Repository("jedisClusterClient")
public class JedisClusterClientImpl implements JedisClient{

	@Autowired
	private JedisCluster jedisCluster;

	@Override
	public String get(String key) {
		String value = null;
		try {
			value = jedisCluster.get(key);
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return value;
	}

	@Override
	public String set(String key, String value) {
		try {
			value = jedisCluster.set(key, value);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return value;
	}
}

定时器类JedisClusterTest.java

package com.mycompany.mvc.quartz;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mycompany.jedis.dao.JedisClient;

@Service("jedisClusterTest")
public class JedisClusterTest {
	
	@Autowired
	private JedisClient jedisClusterClient;
	
	public void JedisClusterTestMain(){
		jedisClusterClient.set("tStringCluster","helloCluster");
		String tString  = jedisClusterClient.get("tStringCluster");
		System.out.println("JedisTest.JedisTestMain():"+tString);
	}

}

至此完成

注意前面使用redis-trib.rb创建集群时,需要指定本服务器地址是192.168.13.172,不能为127.0.0.1, 否则Java客户端会出现no reachable node in cluster的错误

猜你喜欢

转载自blog.csdn.net/Jintao_Ma/article/details/60746267
今日推荐