版权声明: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方法出现连接异常为例