Springboot整合Redis集群实战详解

这篇具有很好参考价值的文章主要介绍了Springboot整合Redis集群实战详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Springboot 整合 Redis 集群,实现 Redis 分布式方案详解

  • 前言
  • 准备工作
  • Redis 集群环境搭建
  • Redis 集群故障转移(主从复制)
  • Redis 集群扩展与收缩节点
    • Redis 集群扩展节点(添加节点)
    • Redis 集群收缩节点(移除节点)
  • Springboot 整合 Redis 集群

前言

Redis Sentinel安装与部署,实现redis的高可用实现了redis的高可用,针对的主要是master宕机的情况,我们发现所有节点的数据都是一样的,那么一旦数据量过大,redis也会效率下降的问题。redis3.0版本正式推出后,有效地解决了Redis分布式方面的需求,当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方法达到负载均衡的目的。

准备工作

1、官网下载 Redis:http://www.redis.cn/download.html
2、准备 Linux 环境:Centos 7
3、Linux 服务器的 IP:可以通过 ifconfig 查询(此处很重要,避免踩坑
4、建议 Redis CLuster 结构目录如下

- redis-cluster
	# redis 安装目录
	- redis 
	# redis 节点配置文件
	- conf
	# redis log日志文件
	- logs
	# redis 持久化文件、集群配置文件
	- data

Redis 集群环境搭建

注意:集群操作可以使用 ./redis-cli --cluster help 指令查看集群命令的使用说明

1、节点准备

Redis 集群的节点,通常是三个 master 以上节点,每个 master 节点至少有一个 slave 节点。

由于本文采用同一台服务器完成集群的演示,所以节点如下(注意 ip 地址为自己服务器地址,端口自行定义

192.168.211.158:6382 
192.168.211.158:6383
192.168.211.158:6384 
192.168.211.158:6385
192.168.211.158:6386
192.168.211.158:6387

2、节点(192.168.211.158:6382 )配置文件:redis-6382.conf,一共 6 个节点,注意:其余节点只是端口号不同

# 节点端口
port 6382
# 注释绑定127.0.0.1
# bind 127.0.0.1
# 关闭保护模式
protected-mode no
requirepass "myredis"
# 设置 redis 后台运行
daemonize yes
# 设置 redis 运行的日志文件,自定义
logfile "/redis-cluster/logs/6382.log"
# 设置 redis 持久化文件名称,名称自定义,后缀为:.rdb
dbfilename "dump-6382.rdb"
# 持久化目录,这个目录保存的是:dbfilename、cluster-config-file 对应的文件
dir "/redis-cluster/data"

# master 节点登录密码
masterauth "myredis"
# 开启集群
cluster-enabled yes
cluster-node-timeout 15000
# 集群配置文件,自行生成,名称自定义
cluster-config-file "nodes-6382.conf"

3、启动如上配置的全部节点

./redis/src/redis-server conf/redis-6382.conf 
./redis/src/redis-server conf/redis-6383.conf 
./redis/src/redis-server conf/redis-6384.conf 
./redis/src/redis-server conf/redis-6385.conf 
./redis/src/redis-server conf/redis-6386.conf 
./redis/src/redis-server conf/redis-6387.conf 

4、检查检点是否全部启动成功:ps -ef|grep redis
Springboot整合Redis集群实战详解

5、创建 Redis Cluster 集群

# --cluster-replicas 1 表示创建自动创建并给每个 master 节点分配一个 slave 节点
# -a myredis 表示验证密码
./redis/src/redis-cli --cluster create 192.168.211.158:6382 192.168.211.158:6383 192.168.211.158:6384 192.168.211.158:6385 192.168.211.158:6386 192.168.211.158:6387 --cluster-replicas 1 -a myredis

6、检测集群节点是否成功:./redis/src/redis-cli --cluster check 192.168.211.158:6382 -a myredis

Springboot整合Redis集群实战详解
 [OK] All 16384 slots covered.表示集群所有的槽都已分配到节点。其中 key 是均匀分布在各个槽范围的。
 Springboot整合Redis集群实战详解
7、Redis 集群的操作

# -c 表示集群支持,支持自动重定向
./redis/src/redis-cli -h 192.168.211.158 -p 6382 -a myredis -c

Redis 集群故障转移(主从复制)

通过关闭某个集群节点的 master 节点,slave 节点会切换成 master 代替故障节点完成其工作。

Redis 集群扩展与收缩节点

集群一共有 16384 slots(槽)数量。

Redis 集群扩展节点(添加节点)

1、新建 192.168.211.158:6388、192.168.211.158:6389 两个节点的配置文件,分别为:redis-6388.conf、redis-6389.conf,配置同上。

# 节点端口
port 6388
# 注释绑定127.0.0.1
# bind 127.0.0.1
# 关闭保护模式
protected-mode no
requirepass "myredis"
# 设置 redis 后台运行
daemonize yes
# 设置 redis 运行的日志文件,自定义
logfile "/redis-cluster/logs/6388.log"
# 设置 redis 持久化文件名称,名称自定义,后缀为:.rdb
dbfilename "dump-6388.rdb"
# 持久化目录,这个目录保存的是:dbfilename、cluster-config-file 对应的文件
dir "/redis-cluster/data"

# master 节点登录密码
masterauth "myredis"
# 开启集群
cluster-enabled yes
cluster-node-timeout 15000
# 集群配置文件,自行生成,名称自定义
cluster-config-file "nodes-6388.conf"

2、启动两个节点

./redis/src/redis-server conf/redis-6388.conf 
./redis/src/redis-server conf/redis-6389.conf

3、添加节点

./redis/src/redis-cli --cluster add-node 192.168.211.158:6388 192.168.211.158:6382 -a myredis

Springboot整合Redis集群实战详解
4、将 6389 添加成 6388 的从节点
(1)查询节点 6388 的节点 id(node-id)M:abc8c97b1afb9982decace890c97653d00d10871

./redis/src/redis-cli  --cluster check 192.168.211.158:6388 -a myredis

(2)将 6389 添加成 6388 的从节点

./redis/src/redis-cli --cluster add-node --cluster-master-id abc8c97b1afb9982decace890c97653d00d10871 --cluster-slave 192.168.211.158:6389 192.168.211.158:6382 -a myredis

5、给 192.168.211.158:6388 分槽,大小为:4096

./redis/src/redis-cli --cluster reshard 192.168.211.158:6382 -a myredis

(1)将大小为 4096 的槽分配给指定节点:6388(master
(2)使用 all 指令结尾,将各个槽的空间分配一部分到节点 6388。也可以使用指定的其他 master 节点id,分配大小为 4096 槽给 6388 。
Springboot整合Redis集群实战详解

Redis 集群收缩节点(移除节点)

1、首先要将被移除节点的槽分配出去,保证该槽大小为 0。还是使用指令。

./redis/src/redis-cli --cluster reshard 192.168.211.158:6382 -a myredis

2、移除节点

./redis/src/redis-cli  --cluster del-node 192.168.211.158:6388 abc8c97b1afb9982decace890c97653d00d10871

Springboot 整合 Redis 集群

1、集群配置如上,已经配置好
2、引入 pom 依赖

<!--redis相关依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

3、yml 配置文件

server:
  port: 86379

spring:
  redis:
    cluster:
      # 集群节点
      nodes: 192.168.211.158:6382,192.168.211.158:6383,192.168.211.158:6384,192.168.211.158:6385,192.168.211.158:6386,192.168.211.158:6387
      # 最大重定向次数
      max-redirects: 5
    # 密码
    password: myredis
    lettuce:
      pool:
        min-idle: 0
        max-active: 8
        max-wait: -1
        max-idle: 8
        enabled: true

4、RedisConfig配置文件

@Configuration
@EnableCaching
@Slf4j
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    @SuppressWarnings(value = {"unchecked", "rawtypes"})
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        serializer.setObjectMapper(mapper);

        // 使用StringRedisSerializer来序列化和反序列化redis的key值
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(serializer);

        // Hash的key也采用StringRedisSerializer的序列化方式
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(serializer);
        
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

}

5、RedisService 自定义
6、测试文章来源地址https://www.toymoban.com/news/detail-485303.html

@SpringBootTest(classes = RedisServiceApplication.class)
public class Test_redis {

    @Autowired
    private RedisService redisService;

    @Test
    public void test(){
        redisService.setCacheObject("testkey","Hello world");
        Object value = redisService.getCacheObject("testkey");
        System.out.println("value = " + value);

    }
}

到了这里,关于Springboot整合Redis集群实战详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot整合shiro+jwt+redis详解

    三大核心组件:Subject、SecurityManager、Realm Subject 主体,代表了当前 “用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是 Subject,如网络爬虫,机器人等;即一个抽象概念;所有 Subject 都绑定到 SecurityManager,与 Subject 的所有交互都会委托给 SecurityManag

    2023年04月09日
    浏览(45)
  • Redis+SpringBoot企业版集群实战------【华为云版】

      目录 安装 复制及集群 bgsave  rdb aof SpringBoot+Redis操作 操作string 操作hash 操作set 操作sorted set 获取所有key删除 设置key的失效时间 SpringDataRedis整合使用哨兵机制 下载地址 Redis 上传至服务器  解压 安装依赖  预编译 切换到解压目录 创建安装目录 不使用: make install (make in

    2024年02月12日
    浏览(40)
  • 【案例实战】SpringBoot整合Redis的GEO实现查找附近门店功能

    像我们平常美团点外卖的时候,都会看到一个商家距离我们多少米。还有类似QQ附近的人,我们能看到附近的人距离我们有多少米。 那么这些业务是怎么做的呢?是如何实现 基于位置的附近服务 系统呢。 在去了解基于位置的附近服务之前,我们先来看一下什么是GIS技术。

    2024年02月10日
    浏览(38)
  • 【案例实战】SpringBoot整合Redis实现缓存分页数据查询

    正式观看本文之前,设想一个问题,高并发情况下,首页列表数据怎么做? 类似淘宝首页,这些商品是从数据库中查出来的吗?答案肯定不是,在高并发的情况下,数据库是扛不住的,那么我们要怎么去扛住C端大并发量呢,这块我们可以借助Redis,我们知道Redis是一个基于内

    2024年02月09日
    浏览(58)
  • Redis队列详解(springboot实战)

    MQ应用有很多,比如ActiveMQ,RabbitMQ,Kafka等,但是也可以基于redis来实现,可以降低系统的维护成本和实现复杂度,本篇介绍redis中实现消息队列的几种方案,并通过springboot实战使其更易懂。 1. 基于List的 LPUSH+BRPOP 的实现 2. 基于Sorted-Set的实现 3. PUB/SUB,订阅/发布模式 4. 基于Str

    2024年02月06日
    浏览(41)
  • 【Redis】SpringBoot整合Redis

    SpringData是Spring里专门用来操作数据的模块,其中对redis集成的模块 它提供了对不同的redis客户端的整合比如Lettuce和Jedis,提供了RedisTemplate统一的API来操作redis,而且它支持Redis的发布订阅模式、哨兵和Redis集群,以及Lettuce的响应式编程,支持序列化于反序列化,支持Redis的JD

    2023年04月23日
    浏览(45)
  • springboot整合redis配置

    2024年02月11日
    浏览(51)
  • SpringBoot 整合redis

    1、添加项目依赖 2、单实例连接 3、使用连接池连接 4、编写JedisConfig 配置 5、application.yml 配置文件  

    2024年01月24日
    浏览(39)
  • Springboot 整合 Redis配置

    RedisService接口 RedisServiceImpl 实现类 Redis 配置类

    2024年02月10日
    浏览(42)
  • SpringBoot——整合Redis

    redis是一款key-velue存储结构的内存级NoSQL数据库 - 支持多种数存储格式 - 支持持久化 - 支持集群 简单理解成一个大Map,反正我就是这么理解的。当然他的内部有很多复杂的数据类型和操作,咱们在这里就不过多赘述了。 首先你要操作Redis你得先有Redis的服务,那么第一步就是安

    2024年02月03日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包