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

骑猪看日落 2022-09-27 04:00 261阅读 0赞

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是它的配置文件:

Center

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

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

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

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

2.2 启动redis服务器

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

Center 1

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

Center 2

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

3.1 添加maven依赖

  1. <!-- jedis配置 -->
  2. <dependency>
  3. <groupId>redis.clients</groupId>
  4. <artifactId>jedis</artifactId>
  5. <version>2.9.0</version>
  6. </dependency>

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

  1. redis.host = 192.168.13.172
  2. redis.port = 6379
  3. redis.password = 123456

springRedis.xml配置

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

JedisClient.java

  1. package com.mycompany.jedis.dao;
  2. public interface JedisClient {
  3. /**获取缓存
  4. * @param key
  5. * @return
  6. */
  7. String get(String key);
  8. /**设置缓存
  9. * @param key
  10. * @param value
  11. * @return
  12. */
  13. String set(String key, String value);
  14. }

JedisClientImpl.java

  1. package com.mycompany.jedis.dao;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Repository;
  4. import redis.clients.jedis.Jedis;
  5. import redis.clients.jedis.JedisPool;
  6. @Repository("jedisClient")
  7. public class JedisClientImpl implements JedisClient{
  8. @Autowired
  9. private JedisPool jedisPool;
  10. @Override
  11. public String get(String key) {
  12. String value = null;
  13. Jedis jedis = null;
  14. try {
  15. jedis = jedisPool.getResource();
  16. value = jedis.get(key);
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. } finally {
  20. if(jedis!=null){
  21. jedis.close();
  22. }
  23. }
  24. return value;
  25. }
  26. @Override
  27. public String set(String key, String value) {
  28. Jedis jedis = null;
  29. try {
  30. jedis = jedisPool.getResource();
  31. value = jedis.set(key, value);
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. } finally {
  35. if(jedis!=null){
  36. jedis.close();
  37. }
  38. }
  39. return value;
  40. }
  41. }

使用定时器跑类JedisTest.java:

  1. package com.mycompany.mvc.quartz;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Service;
  4. import com.mycompany.jedis.dao.JedisClient;
  5. @Service("jedisTest")
  6. public class JedisTest {
  7. @Autowired
  8. private JedisClient jedisClient;
  9. public void JedisTestMain(){
  10. jedisClient.set("tString","hello");
  11. String tString = jedisClient.get("tString");
  12. System.out.println("JedisTest.JedisTestMain():"+tString);
  13. }
  14. }

至此,已完成。

四.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

然后设置一下几个选项:

  1. cluster-enabled yes
  2. cluster-config-file nodes.conf
  3. cluster-node-timeout 5000
  4. 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服务器:

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

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

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

4.3 下面需要创建集群

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

安装完成后检验下:

Center 5

之后可使用gem命令:

gem install redis

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

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

如下即可:

Center 6

Center 7

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

  1. redis01.host = 192.168.13.172
  2. redis01.port = 7000
  3. redis02.host = 192.168.13.172
  4. redis02.port = 7001
  5. redis03.host = 192.168.13.172
  6. redis03.port = 7002
  7. redis04.host = 192.168.13.172
  8. redis04.port = 7003
  9. redis05.host = 192.168.13.172
  10. redis05.port = 7004
  11. redis06.host = 192.168.13.172
  12. redis06.port = 7005

spring-Redis.xml

  1. <!-- 连接池配置 -->
  2. <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
  3. <!-- 最大连接数 -->
  4. <property name="maxTotal" value="300" />
  5. <!-- 最大空闲连接数 -->
  6. <property name="maxIdle" value="10" />
  7. <!-- 每次释放连接的最大数目 -->
  8. <property name="numTestsPerEvictionRun" value="1024" />
  9. <!-- 释放连接的扫描间隔(毫秒) -->
  10. <property name="timeBetweenEvictionRunsMillis" value="30000" />
  11. <!-- 连接最小空闲时间 -->
  12. <property name="minEvictableIdleTimeMillis" value="1800000" />
  13. <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
  14. <property name="softMinEvictableIdleTimeMillis" value="10000" />
  15. <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
  16. <property name="maxWaitMillis" value="1500" />
  17. <!-- 在获取连接的时候检查有效性, 默认false -->
  18. <property name="testOnBorrow" value="true" />
  19. <!-- 在空闲时检查有效性, 默认false -->
  20. <property name="testWhileIdle" value="true" />
  21. <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
  22. <property name="blockWhenExhausted" value="false" />
  23. </bean>
  24. <!-- jedis集群版配置 -->
  25. <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
  26. <constructor-arg name="jedisClusterNode">
  27. <set>
  28. <bean class="redis.clients.jedis.HostAndPort">
  29. <constructor-arg name="host" value="${redis01.host}"/>
  30. <constructor-arg name="port" value="${redis01.port}"/>
  31. </bean>
  32. <bean class="redis.clients.jedis.HostAndPort">
  33. <constructor-arg name="host" value="${redis02.host}"/>
  34. <constructor-arg name="port" value="${redis02.port}"/>
  35. </bean>
  36. <bean class="redis.clients.jedis.HostAndPort">
  37. <constructor-arg name="host" value="${redis03.host}"/>
  38. <constructor-arg name="port" value="${redis03.port}"/>
  39. </bean>
  40. <bean class="redis.clients.jedis.HostAndPort">
  41. <constructor-arg name="host" value="${redis04.host}"/>
  42. <constructor-arg name="port" value="${redis04.port}"/>
  43. </bean>
  44. <bean class="redis.clients.jedis.HostAndPort">
  45. <constructor-arg name="host" value="${redis05.host}"/>
  46. <constructor-arg name="port" value="${redis05.port}"/>
  47. </bean>
  48. <bean class="redis.clients.jedis.HostAndPort">
  49. <constructor-arg name="host" value="${redis06.host}"/>
  50. <constructor-arg name="port" value="${redis06.port}"/>
  51. </bean>
  52. </set>
  53. </constructor-arg>
  54. <constructor-arg name="connectionTimeout" value="10000"></constructor-arg>
  55. <constructor-arg name="soTimeout" value="10000"></constructor-arg>
  56. <constructor-arg name="maxAttempts" value="10000"></constructor-arg>
  57. <!-- <constructor-arg name="password" value="${redisCluster.password}"></constructor-arg> -->
  58. <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
  59. </bean>

JedisClusterClientImpl.java

  1. package com.mycompany.jedis.dao;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Repository;
  4. import redis.clients.jedis.JedisCluster;
  5. @Repository("jedisClusterClient")
  6. public class JedisClusterClientImpl implements JedisClient{
  7. @Autowired
  8. private JedisCluster jedisCluster;
  9. @Override
  10. public String get(String key) {
  11. String value = null;
  12. try {
  13. value = jedisCluster.get(key);
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. return value;
  18. }
  19. @Override
  20. public String set(String key, String value) {
  21. try {
  22. value = jedisCluster.set(key, value);
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. return value;
  27. }
  28. }

定时器类JedisClusterTest.java

  1. package com.mycompany.mvc.quartz;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Service;
  4. import com.mycompany.jedis.dao.JedisClient;
  5. @Service("jedisClusterTest")
  6. public class JedisClusterTest {
  7. @Autowired
  8. private JedisClient jedisClusterClient;
  9. public void JedisClusterTestMain(){
  10. jedisClusterClient.set("tStringCluster","helloCluster");
  11. String tString = jedisClusterClient.get("tStringCluster");
  12. System.out.println("JedisTest.JedisTestMain():"+tString);
  13. }
  14. }

至此完成

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

发表评论

表情:
评论列表 (有 0 条评论,261人围观)

还没有评论,来说两句吧...

相关阅读