spring整合redis3.x集群

骑猪看日落 2023-10-17 19:03 93阅读 0赞

spring整合redis3.x集群

连接池 数据库配置

  1. <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  2. <property name="locations">
  3. <list>
  4. <value>classpath:jdbc.properties</value>
  5. <value>classpath:redis.properties</value>
  6. </list>
  7. </property>
  8. </bean>
  9. <!--redisPool配置 -->
  10. <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
  11. <!--最大连接数 -->
  12. <property name="maxTotal" value="${redis.maxTotal}"/>
  13. <!--最大空闲连接数 -->
  14. <property name="maxIdle" value="${redis.maxIdle}"/>
  15. <!--每次释放连接的最大数目 -->
  16. <property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}"/>
  17. <!--释放连接的扫描间隔(单位:毫秒) -->
  18. <property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}"/>
  19. <!--连接最小空闲时间(单位:毫秒) -->
  20. <property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}"/>
  21. <!--连接空闲多久后释放,当空闲时间大于该值并且空闲连接大于最大空闲连接时直接释放连接 -->
  22. <property name="softMinEvictableIdleTimeMillis" value="${redis.softMinEvictableIdleTimeMillis}"/>
  23. <!--获取连接时最大等待毫秒数,如果该值小于0,则阻塞不确定的时长,默认值-1 -->
  24. <property name="maxWaitMillis" value="${redis.maxWaitMillis}"/>
  25. <!--在获取连接时检查连接有效性,默认为false -->
  26. <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
  27. <!--在连接空闲时检查连接有效性,默认为false -->
  28. <property name="testWhileIdle" value="${redis.testWhileIdle}"/>
  29. <!--连接耗尽是否阻塞,false代表抛异常,true代表阻塞直到超时,默认为true -->
  30. <property name="blockWhenExhausted" value="${redis.blockWhenExhausted}"/>
  31. </bean>
  32. <!--配置redis集群 -->
  33. <bean id="myJedisCuster" class="redis.clients.jedis.JedisCluster">
  34. <constructor-arg name="nodes">
  35. <!--设置集群节点 -->
  36. <set>
  37. <bean class="redis.clients.jedis.HostAndPort">
  38. <constructor-arg name="host" value="${redis.host}"/>
  39. <constructor-arg name="port" value="${redis.port1}"/>
  40. </bean>
  41. <bean class="redis.clients.jedis.HostAndPort">
  42. <constructor-arg name="host" value="${redis.host}"/>
  43. <constructor-arg name="port" value="${redis.port2}"/>
  44. </bean>
  45. <bean class="redis.clients.jedis.HostAndPort">
  46. <constructor-arg name="host" value="${redis.host}"/>
  47. <constructor-arg name="port" value="${redis.port3}"/>
  48. </bean>
  49. <bean class="redis.clients.jedis.HostAndPort">
  50. <constructor-arg name="host" value="${redis.host}"/>
  51. <constructor-arg name="port" value="${redis.port4}"/>
  52. </bean>
  53. <bean class="redis.clients.jedis.HostAndPort">
  54. <constructor-arg name="host" value="${redis.host}"/>
  55. <constructor-arg name="port" value="${redis.port5}"/>
  56. </bean>
  57. <bean class="redis.clients.jedis.HostAndPort">
  58. <constructor-arg name="host" value="${redis.host}"/>
  59. <constructor-arg name="port" value="${redis.port6}"/>
  60. </bean>
  61. </set>
  62. </constructor-arg>
  63. <!--设置连接超时时间 -->
  64. <!--<constructor-arg name="connectionTimeout" value="${redis.timeout}"/>-->
  65. <!--设置网络通信超时时间 -->
  66. <!--<constructor-arg name="soTimeout" value="${redis.soTimeout}"/>-->
  67. <!--设置最大重试次数 -->
  68. <!--<constructor-arg name="maxAttempts" value="${redis.attempts}"/>-->
  69. <!--设置jedisPool配置 -->
  70. <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
  71. </bean>
  72. <!--配置jedisClientCluster -->
  73. <bean id="jedisClientCluster" class="org.seckill.redis.JedisClientCluster">
  74. <property name="jedisCluster" ref="myJedisCuster" />
  75. </bean>

redis.properties

  1. redis.maxIdle=10
  2. redis.maxTotal=30
  3. redis.testOnBorrow=false
  4. redis.testWhileIdle=true
  5. redis.numTestsPerEvictionRun=1024
  6. redis.timeBetweenEvictionRunsMillis=30000
  7. redis.minEvictableIdleTimeMillis=100000
  8. redis.softMinEvictableIdleTimeMillis=10000
  9. redis.maxWaitMillis=1500
  10. redis.blockWhenExhausted=false
  11. redis.timeout=6000
  12. redis.host=127.0.0.1
  13. redis.port1=7000
  14. redis.port2=7001
  15. redis.port3=7002
  16. redis.port4=7003
  17. redis.port5=7004
  18. redis.port6=7005

JedisClientCluster.java

  1. package org.seckill.redis;
  2. import redis.clients.jedis.JedisCluster;
  3. import java.util.List;
  4. import java.util.Map;
  5. public class JedisClientCluster implements JedisClient {
  6. private JedisCluster jedisCluster;
  7. public JedisCluster getJedisCluster() {
  8. return jedisCluster;
  9. }
  10. public void setJedisCluster(JedisCluster jedisCluster) {
  11. this.jedisCluster = jedisCluster;
  12. }
  13. @Override
  14. public String set(String key, String value) {
  15. return jedisCluster.set(key, value);
  16. }
  17. @Override
  18. public String get(String key) {
  19. return jedisCluster.get(key);
  20. }
  21. @Override
  22. public Boolean exists(String key) {
  23. return jedisCluster.exists(key);
  24. }
  25. @Override
  26. public Long expire(String key, int seconds) {
  27. return jedisCluster.expire(key, seconds);
  28. }
  29. @Override
  30. public Long ttl(String key) {
  31. return jedisCluster.ttl(key);
  32. }
  33. @Override
  34. public Long hset(String key, String field, String value) {
  35. return jedisCluster.hset(key, field, value);
  36. }
  37. @Override
  38. public String hget(String key, String field) {
  39. return jedisCluster.hget(key, field);
  40. }
  41. @Override
  42. public Long hdel(String key, String... field) {
  43. return jedisCluster.hdel(key, field);
  44. }
  45. @Override
  46. public Boolean hexists(String key, String field) {
  47. return jedisCluster.hexists(key, field);
  48. }
  49. @Override
  50. public Map<String, String> hgetAll(String key) {
  51. return jedisCluster.hgetAll(key);
  52. }
  53. @Override
  54. public List<String> hvals(String key) {
  55. return jedisCluster.hvals(key);
  56. }
  57. @Override
  58. public Long del(String key) {
  59. return jedisCluster.del(key);
  60. }
  61. }

JedisClient.java

  1. package org.seckill.redis;
  2. import java.util.List;
  3. import java.util.Map;
  4. public interface JedisClient {
  5. /**
  6. * 设置一个字符串类型的值,如果记录存在则覆盖原有value
  7. *
  8. * @param key 值对应的键
  9. * @param value 值
  10. * @return 状态码, 成功则返回OK
  11. */
  12. String set(String key, String value);
  13. /**
  14. * 从redis中根据key取值
  15. *
  16. * @param key 要取得值对应的key
  17. * @return 取到的value值
  18. */
  19. String get(String key);
  20. /**
  21. * 判断某个键值对是否存在
  22. *
  23. * @param key 根据键判断
  24. * @return 判断结果
  25. */
  26. Boolean exists(String key);
  27. /**
  28. * 设置键值对的过期时间
  29. *
  30. * @param key 要设置过期时间的k键值对的键
  31. * @param seconds 过期时间
  32. * @return 影响的记录数
  33. */
  34. Long expire(String key, int seconds);
  35. /**
  36. * 查看键值对的剩余时间
  37. *
  38. * @param key 要查看的键值对的键
  39. * @return 剩余时间
  40. */
  41. Long ttl(String key);
  42. /**
  43. * 添加一个对应关系
  44. *
  45. * @param key 存储的键
  46. * @param field 存储的名字
  47. * @param value 存储的值
  48. * @return 状态码, 1成功, 0失败, 如果field已存在将更新, 返回0
  49. */
  50. Long hset(String key, String field, String value);
  51. /**
  52. * 返回hash中指定存储的值
  53. *
  54. * @param key 查找的存储的键
  55. * @param field 查找的存储的名字
  56. * @return 指定存储的值
  57. */
  58. String hget(String key, String field);
  59. /**
  60. * 从hash中删除指定的存储
  61. *
  62. * @param key 存储的键
  63. * @param field 存储的名字
  64. * @return 状态码, 1成功, 0失败
  65. */
  66. Long hdel(String key, String... field);
  67. /**
  68. * 检测hash中指定的存储是否存在
  69. *
  70. * @param key 存储的键
  71. * @param field 存储的额名字
  72. * @return 状态码, 1代表成功, 0代表失败
  73. */
  74. Boolean hexists(String key, String field);
  75. /**
  76. * 以map的形式返回hash存储的名字和值
  77. *
  78. * @param key 存储的键
  79. * @return 根据key查找到的存储的名字和值
  80. */
  81. Map<String, String> hgetAll(String key);
  82. /**
  83. * 获取hash中value的集合
  84. *
  85. * @param key hash中存储的键
  86. * @return 指定键的所有value的集合
  87. */
  88. List<String> hvals(String key);
  89. /**
  90. * 根据存储的键删除存储
  91. *
  92. * @param key 存储的键
  93. * @return 状态码, 1成功, 0失败
  94. */
  95. Long del(String key);
  96. }

JunitTest测试类

  1. package org.seckill.redis;
  2. import org.junit.After;
  3. import org.junit.Before;
  4. import org.junit.Test;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;
  7. public class JedisClientClusterTest {
  8. private ApplicationContext context;
  9. @Before
  10. public void setUp() {
  11. context = new ClassPathXmlApplicationContext(new String[]{加载你自己的spring xml配置文件});
  12. }
  13. @Test
  14. public void testRedisCluster(){
  15. JedisClientCluster jedisClientCluster = (JedisClientCluster) context.getBean("jedisClientCluster");
  16. jedisClientCluster.set("foo","chyw");
  17. String value = jedisClientCluster.get("foo");
  18. System.out.println(value);
  19. }
  20. @After
  21. public void tearDown() {
  22. }
  23. }

使用redis-cli连接redis集群 查看是否有相关key

这里写图片描述

发表评论

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

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

相关阅读