redis(二) JedisCluster操作redis集群工具。

本文详细介绍了RedisDao接口的设计及其具体实现RedisDaoImpl。RedisDao接口定义了基本的Redis操作,如设置、获取、检查存在性和增量操作等。RedisDaoImpl通过JedisCluster实现了这些操作,能够连接到多个Redis节点,提供了高可用性和负载均衡。

一、RedisDao定义。

package com.cloudwise.redis;
/**
  * 暂时定义几个 后续再扩展
  * <p>Title: RedisDao</p>  
  * <p>Description: </p>  
  * @author back  
  * @date 2019年9月19日
 */
public interface RedisDao {

	boolean isExist(String key);
	
	String set(String key,String value);

	String get(String key);
	
	String setex(String key,String value,int seconds);
	
	long delete(String key);
	
	long incr(String key);
}

二、相关实现。只是向默认db中写

package com.cloudwise.redis;

import java.util.Arrays;
import java.util.Set;

import com.google.common.collect.Sets;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
/**
  *
  * <p>Title: RedisDaoImpl</p>  
  * <p>Description: </p>  
  * @author back  
  * @date 2019年9月19日
 */
public class RedisDaoImpl  implements RedisDao{

	
	private JedisCluster jedisCluster;
	/**
	 * 
	 * @param hosts 127.0.0.1:6379,127.0.0.1:8001,127.0.0.1:8002
	 */
	public RedisDaoImpl(String hosts){
		Set<HostAndPort> nodes = transferHostAndPorts(hosts);
		JedisPoolConfig config = getConfig();
		jedisCluster = new JedisCluster(nodes, config);
	}
	private Set<HostAndPort> transferHostAndPorts(String hosts){
		Set<HostAndPort> set = Sets.newHashSet();
		Arrays.asList(hosts.split(",")).forEach(host1 -> {
			String[] meta = host1.trim().split(":");
			HostAndPort hostAndPort = new HostAndPort(meta[0].trim(),Integer.parseInt(meta[1].trim()));
			set.add(hostAndPort);
		});
		return set;
	}
	
	private JedisPoolConfig getConfig(){
		JedisPoolConfig config = new JedisPoolConfig();
		//最大连接数
		config.setMaxTotal(30);
		//最大空闲连接数
		config.setMaxIdle(10);
		//每次释放连接的最大数目
		config.setNumTestsPerEvictionRun(1024);
		// 释放连接的扫描间隔(毫秒)
		config.setTimeBetweenEvictionRunsMillis(30000);
		//连接最小空闲时间 
		config.setMinEvictableIdleTimeMillis(1800000);
		//连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放
		config.setSoftMinEvictableIdleTimeMillis(10000);
		//获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1
		config.setMaxWaitMillis(1500);
		//在获取连接的时候检查有效性, 默认false
		config.setTestOnBorrow(true);
		//在空闲时检查有效性, 默认false
		config.setTestWhileIdle(true);
		//连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
		config.setBlockWhenExhausted(false);
		return config;
	}
	@Override
	public boolean isExist(String key) {
		return jedisCluster.exists(key);
	}

	@Override
	public String set(String key, String value) {
		return jedisCluster.set(key, value);
	}

	@Override
	public String get(String key) {
		return jedisCluster.get(key);
	}

	@Override
	public String setex(String key, String value, int seconds) {
		return jedisCluster.setex(key, seconds, value);
	}

	@Override
	public long delete(String key) {
		return jedisCluster.del(key);
	}

	@Override
	public long incr(String key) {
		return jedisCluster.incr(key);
	}

}

 

Redis 2.9.0 版本下使用 JedisCluster 执行 `MEMORY PURGE` 命令,步骤和通用的 JedisCluster 使用方式类似。首先要确保项目中添加了 Jedis 的依赖,以 Maven 项目为例,在 `pom.xml` 中添加如下依赖: ```xml <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.7.0</version> </dependency> ``` 然后创建 JedisCluster 实例并执行 `MEMORY PURGE` 命令,示例代码如下: ```java import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import java.util.HashSet; import java.util.Set; public class Redis290JedisClusterMemoryPurge { public static void main(String[] args) { // 定义 Redis 集群节点 Set<HostAndPort> jedisClusterNodes = new HashSet<>(); jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7000)); jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7001)); // 可根据实际情况添加更多节点 // 创建 JedisCluster 实例 JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes); try { // 执行 MEMORY PURGE 命令 String result = jedisCluster.execute("MEMORY", "PURGE"); System.out.println("MEMORY PURGE 命令执行结果: " + result); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭 JedisCluster 连接 jedisCluster.close(); } } } ``` 在上述代码中,先定义了 Redis 集群的节点集合,接着创建 JedisCluster 实例,之后使用 `execute` 方法执行 `MEMORY PURGE` 命令,最后在 `finally` 块中关闭 JedisCluster 连接,避免资源泄漏。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值