与Spring整合连接redis集群

小咪咪 2022-06-09 09:20 259阅读 0赞

1、接口封装
常用的操作redis的方法提取出一个接口,分别对应单机版和集群版创建两个实现类。
2、接口定义

  1. public interface JedisClient {
  2. String set(String key, String value);
  3. String get(String key);
  4. Boolean exists(String key);
  5. Long expire(String key, int seconds);
  6. Long ttl(String key);
  7. Long incr(String key);
  8. Long hset(String key, String field, String value);
  9. String hget(String key, String field);
  10. Long hdel(String key, String... field);
  11. }

3、单机版实现类

  1. public class JedisClientPool implements JedisClient {
  2. @Autowired
  3. private JedisPool jedisPool;
  4. @Override
  5. public String set(String key, String value) {
  6. Jedis jedis = jedisPool.getResource();
  7. String result = jedis.set(key, value);
  8. jedis.close();
  9. return result;
  10. }
  11. @Override
  12. public String get(String key) {
  13. Jedis jedis = jedisPool.getResource();
  14. String result = jedis.get(key);
  15. jedis.close();
  16. return result;
  17. }
  18. @Override
  19. public Boolean exists(String key) {
  20. Jedis jedis = jedisPool.getResource();
  21. Boolean result = jedis.exists(key);
  22. jedis.close();
  23. return result;
  24. }
  25. @Override
  26. public Long expire(String key, int seconds) {
  27. Jedis jedis = jedisPool.getResource();
  28. Long result = jedis.expire(key, seconds);
  29. jedis.close();
  30. return result;
  31. }
  32. @Override
  33. public Long ttl(String key) {
  34. Jedis jedis = jedisPool.getResource();
  35. Long result = jedis.ttl(key);
  36. jedis.close();
  37. return result;
  38. }
  39. @Override
  40. public Long incr(String key) {
  41. Jedis jedis = jedisPool.getResource();
  42. Long result = jedis.incr(key);
  43. jedis.close();
  44. return result;
  45. }
  46. @Override
  47. public Long hset(String key, String field, String value) {
  48. Jedis jedis = jedisPool.getResource();
  49. Long result = jedis.hset(key, field, value);
  50. jedis.close();
  51. return result;
  52. }
  53. @Override
  54. public String hget(String key, String field) {
  55. Jedis jedis = jedisPool.getResource();
  56. String result = jedis.hget(key, field);
  57. jedis.close();
  58. return result;
  59. }
  60. @Override
  61. public Long hdel(String key, String... field) {
  62. Jedis jedis = jedisPool.getResource();
  63. Long result = jedis.hdel(key, field);
  64. jedis.close();
  65. return result;
  66. }
  67. }

4、配置applicationContext-redis.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util4.2.xsd">
  3. <!-- 配置单机版的连接 -->
  4. <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
  5. <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
  6. <constructor-arg name="port" value="6379"></constructor-arg>
  7. </bean>
  8. <bean id="jedisClientPool" class="com.taotao.jedis.JedisClientPool"/>
  9. </beans>

5、集群版实现类

  1. package com.taotao.jedis;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import redis.clients.jedis.JedisCluster;
  4. public class JedisClientCluster implements JedisClient {
  5. @Autowired
  6. private JedisCluster jedisCluster;
  7. @Override
  8. public String set(String key, String value) {
  9. return jedisCluster.set(key, value);
  10. }
  11. @Override
  12. public String get(String key) {
  13. return jedisCluster.get(key);
  14. }
  15. @Override
  16. public Boolean exists(String key) {
  17. return jedisCluster.exists(key);
  18. }
  19. @Override
  20. public Long expire(String key, int seconds) {
  21. return jedisCluster.expire(key, seconds);
  22. }
  23. @Override
  24. public Long ttl(String key) {
  25. return jedisCluster.ttl(key);
  26. }
  27. @Override
  28. public Long incr(String key) {
  29. return jedisCluster.incr(key);
  30. }
  31. @Override
  32. public Long hset(String key, String field, String value) {
  33. return jedisCluster.hset(key, field, value);
  34. }
  35. @Override
  36. public String hget(String key, String field) {
  37. return jedisCluster.hget(key, field);
  38. }
  39. @Override
  40. public Long hdel(String key, String... field) {
  41. return jedisCluster.hdel(key, field);
  42. }
  43. }

6、配置applicationContext-redis.xml

  1. <!-- 集群版的配置 -->
  2. <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
  3. <constructor-arg>
  4. <set>
  5. <bean class="redis.clients.jedis.HostAndPort">
  6. <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
  7. <constructor-arg name="port" value="7001"></constructor-arg>
  8. </bean>
  9. <bean class="redis.clients.jedis.HostAndPort">
  10. <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
  11. <constructor-arg name="port" value="7002"></constructor-arg>
  12. </bean>
  13. <bean class="redis.clients.jedis.HostAndPort">
  14. <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
  15. <constructor-arg name="port" value="7003"></constructor-arg>
  16. </bean>
  17. <bean class="redis.clients.jedis.HostAndPort">
  18. <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
  19. <constructor-arg name="port" value="7004"></constructor-arg>
  20. </bean>
  21. <bean class="redis.clients.jedis.HostAndPort">
  22. <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
  23. <constructor-arg name="port" value="7005"></constructor-arg>
  24. </bean>
  25. <bean class="redis.clients.jedis.HostAndPort">
  26. <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
  27. <constructor-arg name="port" value="7006"></constructor-arg>
  28. </bean>
  29. </set>
  30. </constructor-arg>
  31. </bean>
  32. <bean id="jedisClientCluster" class="com.taotao.jedis.JedisClientCluster"/>

集群版与单机版不能共存。

7、封装代码测试

  1. @Test
  2. public void testJedisClient() throws Exception {
  3. //初始化Spring容器
  4. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
  5. //从容器中获得JedisClient对象
  6. JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
  7. jedisClient.set("first", "100");
  8. String result = jedisClient.get("first");
  9. System.out.println(result);
  10. }

发表评论

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

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

相关阅读

    相关 Redisspring整合

    上一篇详细的赘述了Redis的curd操作及集群的搭建。下面我们开始将他整合到我们实际的项目中去。我的项目采用的是标准的ssm框架,ssm框架这里不说,直接开始整合。