Redis集群整合SpringBoot框架

版权声明:write by DGHxj https://blog.csdn.net/DGHxj_/article/details/83996246
@Test
public void test(){
	//集群节点信息的获取,无需获取全部信息
	//一部分就可以
	Set<HostAndPort> infoSet=new HashSet<HostAndPort>();
	infoSet.add(new HostAndPort("192.168.60.131", 8000));
	infoSet.add(new HostAndPort("192.168.60.131", 8001));
	//创建一个配置对象config,收集的是连接池的配置
	GenericObjectPoolConfig config=
			new GenericObjectPoolConfig();
	config.setMaxIdle(8);
	config.setMaxTotal(200);
	
	//获取集群连接对象
	JedisCluster cluster=new JedisCluster(infoSet, config);
	
	for(int i=0;i<1000;i++){
		String key="1807_redis_cluster_"+i;//第一次循环的key和value
		//发给8002了?????
		String value="value_"+i;
		cluster.set(key, value);
	}
}

整合步骤:

      1、配置application.properties

            spring.redis.cluster.nodes=192.168.10.10:8000,192.168.10.10:8001,192.168.10.10:8002

      2、spring.redis.maxTotal=200

            spring.redis.maxIdle=8

            spring.redis.minIdle=1

      3、编写配置类

import java.util.HashSet;
import java.util.Set;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

@Configuration
public class RedisConfig {
	@Value("${spring.redis.nodes}")
	private String nodes;
	@Value("${spring.redis.pool.maxTotal}")
	private Integer maxTotal;
	@Value("${spring.redis.pool.maxIdle}")
	private Integer maxIdle;
	@Value("${spring.redis.pool.minIdle}")
	private Integer minIdle;
	
	@Bean 
	public JedisCluster getInstance(){
		//收集节点信息
		Set<HostAndPort> infoList=new HashSet<HostAndPort>();
		String[] node = nodes.split(",");
		
		for(String hostAndPort:node){
			String ip = hostAndPort.split(":")[0];
			Integer port = Integer.parseInt(hostAndPort.split(":")[1]);
			infoList.add(new HostAndPort(ip, port));
		}
		//配置config
		GenericObjectPoolConfig config=new GenericObjectPoolConfig();
		config.setMaxIdle(maxIdle);
		config.setMaxTotal(maxTotal);
		config.setMinIdle(minIdle);
		
		JedisCluster jedis=new JedisCluster(infoList,config);				
		return jedis;
	}	
}

      4、封装底层api(便于以后直接适用固定的类来进行操作redis)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jt.easymall.service.RedisService;

import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

@Service
public class RedisServiceImpl implements RedisService{

	@Autowired
	private JedisCluster cluster;
	
	public void set(String key, String value) {
		cluster.set(key, value);
		
	}

	public void set(String key, String value, Integer second) {
		cluster.expire(key, second);
	}

	public String get(String key) {
		String result=cluster.get(key);
		return result;
	}

	public boolean exists(String key) {
		Boolean exists = cluster.exists(key);
		return exists;
	}

	public void del(String key) {
		cluster.del(key);
		
	}

}

      5、测试

            需求:

                    存数据,从浏览器传递一些参数id,name

                    在代码中生成key值,将value存储在cluster集群

                    通过key值获取集群的value,返回浏览器;

           测试代码端的高可用

                    将前面存储的key值所在的节点宕机,再来访问查询的功能观察结果(不能查到,能查到,过一段时间能查到)

                    JedisCluster代码端高可用

                             初始化过程

                                     

                    以set方法出现连接异常为例

                             

猜你喜欢

转载自blog.csdn.net/DGHxj_/article/details/83996246