使用jedis客户端连接redis,单机版和集群版

引入原著:https://www.cnblogs.com/zqr99/p/8099978.html

 

单机版

1.入门实例

复制代码

 @Test
    public void testJedis(){
        //创建一个jedis对象,需要指定服务的ip和端口号
        Jedis jedis=new Jedis("192.168.25.11",6379);
        //直接操作数据库
        jedis.set("str","nihao");
        //关闭
        jedis.close();
    }

复制代码

复制代码

@Test
    public void testGetJedis(){
        //创建一个jedis对象,需要指定服务的ip和端口号
        Jedis jedis=new Jedis("192.168.25.11",6379);
        //直接操作数据库
        String str = jedis.get("str");
        System.out.println(str);
        //关闭
        jedis.close();
    }

复制代码

 <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
<jedis.version>2.7.2</jedis.version>
        </dependency>

这样使用的话,每次都需要创建连接和关闭连接,耗费性能,所以一般实际项目中我们一般会采用连接池的方式进行开发

2.使用数据库连接池的方式操作redis

复制代码

    @Test
    public  void testJedisPool(){
        //创建连接池(单例),需要指定服务ip和端口号
        JedisPool pool=new JedisPool("192.168.25.11",6379);
        //从连接池中获得连接
        Jedis resource = pool.getResource();
        //使用Jedis操作数据库(方法级别使用)
        String str = resource.get("str");
        System.out.println(str);
        //一定要关闭Jedis连接
        resource.close();
        //系统关闭前关闭连接池
        pool.close();
    }

复制代码

 

集群版

1.直接使用

复制代码

  public void testRedisCluster() {
        //创建一个JedisCluster对象,构造参数Set类型,集合中每个元素 是一个HostAndPort类型
       Set<HostAndPort> nodes=new HashSet<>();
        nodes.add(new HostAndPort("192.168.25.11",7001));
        nodes.add(new HostAndPort("192.168.25.11",7002));
        nodes.add(new HostAndPort("192.168.25.11",7003));
        nodes.add(new HostAndPort("192.168.25.11",7004));
        nodes.add(new HostAndPort("192.168.25.11",7005));
        nodes.add(new HostAndPort("192.168.25.11",7006));

        JedisCluster jedisCluster=new JedisCluster(nodes);
        //直接使用JedisCluster操作redis,自带连接池,JedisCluster可以是单例的
        jedisCluster.set("nihao","你好");

        System.out.println(jedisCluster.get("nihao"));
        //系统关闭前,关闭JedisCluster.
        jedisCluster.close();
    }

复制代码

 

使用Spring整合redis集群

复制代码

 <bean class="redis.clients.jedis.JedisCluster" id="jedisCluster">
        <constructor-arg name="nodes">
            <set>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.11"/>
                    <constructor-arg name="port" value="7001"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.11"/>
                    <constructor-arg name="port" value="7002"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.11"/>
                    <constructor-arg name="port" value="7003"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.11"/>
                    <constructor-arg name="port" value="7004"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.11"/>
                    <constructor-arg name="port" value="7005"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.11"/>
                    <constructor-arg name="port" value="7006"/>
                </bean>
            </set>
        </constructor-arg>
    </bean>
    <bean class="com.taotao.jedis.JedisClientCluster" id="jedisCluster"/>

复制代码

复制代码

    private JedisCluster jedisCluster;
    @Before
    public  void testBefore(){
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("Spring/applicationContext-redis.xml");
        jedisCluster=classPathXmlApplicationContext.getBean(JedisCluster.class);
    }
    @Test
    public  void testJedisSping(){
        jedisCluster.set("11","11");
        System.out.println( jedisCluster.get("11"));
    }
好的,以下是一个同时支持 Redis 集群单机版的 Spring Boot Java 客户端的示例代码: 首先,你需要引入 Redis 客户端jedis: ```xml <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.5.3</version> </dependency> ``` 然后,你可以创建一个 RedisClient 类,实现连接池的初始化、数据操作等功能: ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import redis.clients.jedis.*; import javax.annotation.PostConstruct; import java.util.HashSet; import java.util.Set; @Component public class RedisClient { private JedisPool jedisPool; private JedisCluster jedisCluster; @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Value("${spring.redis.password}") private String password; @Value("${spring.redis.timeout}") private int timeout; @Value("${spring.redis.pool.max-active}") private int maxActive; @Value("${spring.redis.pool.max-idle}") private int maxIdle; @Value("${spring.redis.pool.max-wait}") private long maxWaitMillis; @Value("${spring.redis.pool.min-idle}") private int minIdle; @Value("${spring.redis.cluster.nodes}") private String clusterNodes; @Value("${spring.redis.cluster.max-redirects}") private int maxRedirects; @PostConstruct public void init() { if (clusterNodes == null || clusterNodes.isEmpty()) { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(maxActive); jedisPoolConfig.setMaxIdle(maxIdle); jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); jedisPoolConfig.setMinIdle(minIdle); jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password); } else { Set<HostAndPort> jedisClusterNodes = new HashSet<>(); for (String node : clusterNodes.split(",")) { String[] parts = node.split(":"); jedisClusterNodes.add(new HostAndPort(parts[0], Integer.parseInt(parts[1]))); } JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(maxActive); jedisPoolConfig.setMaxIdle(maxIdle); jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); jedisPoolConfig.setMinIdle(minIdle); jedisCluster = new JedisCluster(jedisClusterNodes, timeout, timeout, maxRedirects, password, jedisPoolConfig); } } public String get(String key) { if (jedisPool != null) { try (Jedis jedis = jedisPool.getResource()) { return jedis.get(key); } } else { return jedisCluster.get(key); } } public void set(String key, String value) { if (jedisPool != null) { try (Jedis jedis = jedisPool.getResource()) { jedis.set(key, value); } } else { jedisCluster.set(key, value); } } public void del(String key) { if (jedisPool != null) { try (Jedis jedis = jedisPool.getResource()) { jedis.del(key); } } else { jedisCluster.del(key); } } // 其他操作... public void close() { if (jedisPool != null) { jedisPool.close(); } else { jedisCluster.close(); } } } ``` 在这个示例中,我们增加了一个 init() 方法用来初始化 Redis 连接池,根据配置文件中是否配置了 Redis 集群节点信息来选择使用 JedisPool 还是 JedisCluster。然后,我们可以在 RedisClient 中实现 Redis 的各种操作方法,例如 get、set、del 等。 最后,我们可以在 Spring Boot 应用程序中使用 RedisClient 来连接 Redis,例如: ```java @Autowired RedisClient redisClient; redisClient.set("key", "value"); String value = redisClient.get("key"); System.out.println(value); redisClient.del("key"); redisClient.close(); ``` 这是一个同时支持 Redis 集群单机版的 Spring Boot Java 客户端示例,你可以根据实际需求进行扩展和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值