windows--Redis集群搭建和Jedis连接

一、Redis集群搭建

1.下载redis

2.创建集群的端口分别为6380,6381,6382,将下载好的redis内容复制到创建的文件夹下

以6380文件夹为例:

在每个文件内创建一个启动脚本start.bat

# 6380为创建的端口
title redis-6380  
redis-server.exe redis.windows.conf

3.修改里面的配置文件 redis.windows.conf

port 6380 //修改为与当前文件夹名字一样的端口号
appendonly yes //指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。 yes表示:存储方式,aof,将写操作记录保存到日志中
cluster-enabled yes //开启集群模式
cluster-config-file nodes-6380.conf  //保存节点配置,自动创建,自动更新(建议命名时加上端口号)
cluster-node-timeout 15000 //集群超时时间,节点超过这个时间没反应就断定是宕机

(注意:redis默认没有密码,如果先修改配置设置密码的话,会报错[ERR] Sorry, can't connect to node 127.0.0.1:6380-----就需要把密码先注释掉,集群成功后在设置密码) 

配置文件中的   requirepass 密码内容

4.下载Ruby并安装:(请问度娘)

cmd进入安装目录进行配置

 5.构建集群脚本redis-trib.rb

需要到redis-trib.rb 下载_new Girl的博客-CSDN博客_redis-trib.rb下载,放入到redis的目录下

然后依次启动所有集群节点start.bat

然后cmd进入redis集群节点目录后,执行: (–replicas 0表示为集群中的没有节点 1则是每个主节点创建一个从节点)

redis-trib.rb create --replicas 0 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 

成功案例:

     当出现提示时,需要手动输入yes,输入后,当出现以下内容,说明已经创建了Redis集群

 如果出现[ERR] Sorry, can't connect to node 127.0.0.1:6380 上面提到的,需要检查下面两项

1、检查配置文件中的bind配置项配置的是ip地址还是127.0.0.1,要与此项保持一致。

2、若检查了配置文件中的其他部分,都没有出错,还要将密码注释掉,才可以。   

# requirepass password

6.检验是否真的创建成功,输入以下命令:

redis-trib.rb check 127.0.0.1:6380

     出现以下信息,说明创建的Redis集群是没问题的

成功后就可以设置密码

参考;:redis如何设置密码_橙子君的博客-CSDN博客_redis设置密码 

成功后就可以使用可视化工具查看信息

二、项目上的Jedis访问集群

1.配置文件

spring.session.store-type=redis
server.servlet.session.timeout=3600
#session更新策略,有ON_SAVE、IMMEDIATE,前者是在调用#SessionRepository#save(org.springframework.session.Session)时,在response commit前刷新缓存,#后者是只要有任何更新就会刷新缓存
spring.session.redis.flush-mode=ON_SAVE

# redis连接池配置
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=100
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=10000
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=100
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=1
# redis-集群配置
spring.redis.cluster.nodes=127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382
spring.redis.maxAttempts=6
spring.redis.connectionTimeout=10000
spring.redis.soTimeOut=10000
spring.redis.password=admin123

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;
import redis.clients.jedis.JedisPoolConfig;

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

@Configuration
public class RedisConfig {

	@Value("${spring.redis.cluster.nodes:}")
	private String clusterNodes;
	@Value("${spring.redis.sentinel.nodes:}")
	private String sentinelNodes;
	@Value("${spring.redis.maxAttempts:}")
	private Integer maxAttempts;
	@Value("${spring.redis.connectionTimeout:}")
	private Integer connectionTimeout;
	@Value("${spring.redis.soTimeOut:}")
	private Integer soTimeOut;
	@Value("${spring.redis.password:}")
	private String password;

	private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class);

	@Bean
	public JedisCluster jedisCluster() {
		String nodesStr = StringUtils.isNotEmpty(clusterNodes);
		// 截取集群节点
		String[] cluster = nodesStr.split(",");
		// 创建set集合
		Set<HostAndPort> nodes = new HashSet<>();
		// 循环数组把集群节点添加到set集合中
		for (String node : cluster) {
			String[] host = node.split(":");
			//添加集群节点
			nodes.add(new HostAndPort(host[0], Integer.parseInt(host[1])));
		}
		if (StringUtils.isEmpty(password)) {
			return new JedisCluster(nodes,
					connectionTimeout,
					soTimeOut,
					maxAttempts
					, new JedisPoolConfig());
		} else {
			return new JedisCluster(nodes,
					connectionTimeout,
					soTimeOut,
					maxAttempts,
					password
					, new JedisPoolConfig());
		}
	}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.JedisCluster;

import java.util.*;

@Service
public class RedisService {

	@Autowired
	private JedisCluster jedisCluster;

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

	public void setString(String key,String val,int minute){
		jedisCluster.set(key, val);
		jedisCluster.expire(key, minute * 60);
	}

	public void putObject(String key, String val, int minute) {
		jedisCluster.set(key, val);
		jedisCluster.expire(key, minute * 60);
	}
	public void delete(String key) {
		jedisCluster.del(key);
	}

	public <T> T getObject(String key, Class<T> clazz) {
		return JsonUtil.jsonToObject(jedisCluster.get(key), clazz);
	}

	public Set<String> scan(String key){
		return jedisCluster.hkeys(key);
	}

	public <T> Map<String, T> objectEntry(String key,Class<T> clazz) {
		Map<String, T> res = new HashMap<>();
		Map<String, String> stringStringMap = jedisCluster.hgetAll(key);
		for (Map.Entry<String, String> entry : stringStringMap.entrySet()) {
			res.put(entry.getKey(), JsonUtil.jsonToObject(entry.getValue(), clazz));
		}
		return res;
	}

}

有意义的文章:

Java操作Redis数据类型_p812438109的专栏-CSDN博客_jedis setparams一)Java连接Redis准备第一步:需安装Redis服务和Java Redis驱动包。Java Redis驱动包下载地址:https://mvnrepository.com/artifact/redis.clients/jedis第二步:创建一个Maven项目,并在pom.xml文件中引入jedis驱动包。pom.xml:<dependency> <groupId>redis.clients</groupId> <artifahttps://blog.csdn.net/p812438109/article/details/107010170

​​​​​​SpringBoot集成redis的JedisCluster和RedisTemplate 实现redis的消息队列消费者-生产者模式,订阅者发布者模式_CNZYYH的博客-CSDN博客_jediscluster redistemplate一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式。利用redis这两种场景的消息队列都能够实现。定义:生产者消费者模式 :生产者生产消息放到队列里,多个消费者同时监听队列,谁先抢到消息谁就会从队列中取走消息;即对于每个消息只能被最多一个消费者拥有。发布者订阅者模式:发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息;即正常情况下每个消费者收到的消息...https://blog.csdn.net/CNZYYH/article/details/85696674Spring Boot使用Spring Data Redis操作Redis(单机/集群) - EasonJim - 博客园说明:Spring Boot简化了Spring Data Redis的引入,只要引入spring-boot-starter-data-redis之后会自动下载相应的Spring Data Redis和https://www.cnblogs.com/EasonJim/p/7805665.html​​​​​​SpringBoot集成redis的JedisCluster和RedisTemplate 实现redis的消息队列消费者-生产者模式,订阅者发布者模式_CNZYYH的博客-CSDN博客_jediscluster redistemplate

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值