百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Spring Boot 集成Redis集群

mhr18 2024-11-24 18:43 18 浏览 0 评论

集成Redis作为缓存或数据存储系统具有以下几个重要的原因:

  1. 提升性能:Redis是一种高性能的内存数据库,它以键值对的方式存储数据,并且数据存储在内存中,因此读写速度非常快。通过将热点数据存储在Redis中,可以显著提升应用程序的响应速度和吞吐量。
  2. 缓存支持:Redis提供了对缓存的支持,可以将经常访问的数据缓存到Redis中,以减少对后端数据库的频繁访问。由于Redis的高速读写能力,可以大大减少数据库负载,提高系统的整体性能和可扩展性。
  3. 分布式锁:在分布式环境中,确保数据的一致性和避免并发冲突是一个挑战。Redis提供了分布式锁的功能,可以帮助开发人员实现对共享资源的安全访问。通过使用Redis的分布式锁,可以防止多个实例同时修改同一数据,确保数据的正确性和完整性。
  4. 发布/订阅功能:Redis支持发布/订阅模式,可以实现实时消息的传递和广播。这对于需要实时通知或实时数据更新的应用程序非常有用。例如,在聊天应用程序或实时数据监控系统中,可以使用Redis的发布/订阅功能实现消息的实时传递。
  5. 计数器和排行榜:Redis提供了原子性的操作,可以用于实现计数器和排行榜等功能。开发人员可以使用Redis的原子递增和递减操作来实现对数据的计数,或者使用有序集合来存储和排名数据,如用户积分排行榜。
  6. 会话管理:对于需要跨多个服务器实例管理用户会话的应用程序,Redis可以用作会话存储。将会话数据存储在Redis中可以实现会话的共享和集中管理,提高应用程序的可伸缩性和容错性。

综上所述,集成Redis在Java项目中可以提供高性能的缓存支持、分布式锁、实时消息传递、计数器和排行榜等功能,以及会话管理等优势,从而改善应用程序的性能、扩展性和可靠性。

Redis集群具有以下优点:

  1. 高可用性:Redis集群提供了主从复制和故障转移功能,当其中一个节点失败时,系统可以自动切换到其他可用节点,保证服务的高可用性。这样可以避免单点故障导致整个系统不可用的情况发生。
  2. 提高性能:Redis集群允许在多个节点上进行数据分片,每个节点负责处理一部分数据。这种数据分片方式可以提高系统的并发处理能力和读写性能,因为多个节点可以并行处理请求和存储数据。
  3. 扩展性:随着业务的增长,数据量也会增加,通过使用Redis集群可以轻松地扩展存储容量。当数据量超过单个节点的存储能力时,可以简单地添加新的节点来扩展集群的存储容量和性能。
  4. 负载均衡:Redis集群会自动进行数据分布和负载均衡,将数据均匀地分布到各个节点上。这样可以避免某个节点负载过高,而其他节点负载过低的情况,保证系统整体的负载均衡。
  5. 数据冗余和备份:Redis集群使用主从复制机制,将主节点的数据复制到从节点上,实现数据的冗余和备份。当主节点发生故障时,可以自动切换到从节点,确保数据的可用性和持久性。
  6. 故障恢复:Redis集群支持故障自动转移功能,当主节点发生故障时,系统可以自动选择一个从节点作为新的主节点,保证系统的连续可用性。这种故障转移的机制可以大大减少系统停机时间和人工干预的需求。

引用Spring Boot Redis依赖

# pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>${org.springframework.boot}</version>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>${jedis}</version>
</dependency>

配置Redis 集群链接池

# platform-config/src/main/resources/application-redis.yml.vm
# maven 编译后会自动在每个项目的class目录下生成application-redis.yml。

## Duration转换字符串方式,默认为正,负以-开头,紧接着P,(字母不区分大小写)D :天 T:天和小时之间的分隔符 H :小时  M:分钟  S:秒 每个单位都必须是数字,且时分秒顺序不能乱。例如PT20M,就是设置为20分钟,

# group ID: com.tinem
# data ID: redis.yaml
spring:
 redis:
  timeout: 1000
  jedis:
   pool:
    # 连接池中的最大空闲连接
    max-idle: 10
    # 连接池中的最小空闲连接
    min-idle: 5
    # 连接池最大连接数(使用负值表示没有限制)
    max-active: 10
    # 连接池最大阻塞等待时间(使用负值表示没有限制))
    max-wait: PT3S
    # 每ms运行一次空闲连接回收器(独立线程)
    time-between-eviction-runs: PT1M
  cluster:
   max-redirects: 3
   nodes:
		# redis集群节点地址
    - ${REDIS_SERVER_HOST_1}:${REDIS_SERVER_PORT_1:7000}
    - ${REDIS_SERVER_HOST_2}:${REDIS_SERVER_PORT_2:7000}
    - ${REDIS_SERVER_HOST_3}:${REDIS_SERVER_PORT_3:7000}
    - ${REDIS_SERVER_HOST_4}:${REDIS_SERVER_PORT_4:7000}
    - ${REDIS_SERVER_HOST_5}:${REDIS_SERVER_PORT_5:7000}
    - ${REDIS_SERVER_HOST_6}:${REDIS_SERVER_PORT_6:7000}

在多模块项目中如果需要启用Redis则在application.yaml中引用Redis配置文件

spring:
  profiles:
    include: redis


代码建议

  1. redis的key尽量使用英文冒号【:】分隔,很多redis可视化客户可以通过:给redis key做目录区分。
  1. redis的key在保持可读性的情况下尽量短。
  2. 尽量使用字符串类型来存储,方便我们调试问题,如果是要存对象可以使用redis的hash数据结构或者使用json序列化对象,会造成一些性能损耗,但是一般问题不大。
  3. 所有的key都要设置过期时间,如果不确定过期时间,可以设置的长一些。但一定不要不设置。


Redis集群可视化管理工具

AnotherRedisDesktopManager

https://github.com/qishibo/AnotherRedisDesktopManager


相关推荐

如何检查 Linux 服务器是物理服务器还是虚拟服务器?

在企业级运维、故障排查和性能调优过程中,准确了解服务器的运行环境至关重要。无论是物理机还是虚拟机,都存在各自的优势与限制。在很多场景下,尤其是当你继承一台服务器而不清楚底层硬件细节时,如何快速辨识它是...

第四节 Windows 系统 Docker 安装全指南

一、Docker在Windows上的运行原理(一)架构限制说明Docker本质上依赖Linux内核特性(如Namespaces、Cgroups等),因此在Windows系统上无法直...

C++ std:shared_ptr自定义allocator引入内存池

当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低。当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分...

Activiti 8.0.0 发布,业务流程管理与工作流系统

Activiti8.0.0现已发布。Activiti是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的BPMN2流程引擎。Activiti可以...

MyBatis动态SQL的5种高级玩法,90%的人只用过3种

MyBatis动态SQL在日常开发中频繁使用,但大多数开发者仅掌握基础标签。本文将介绍五种高阶技巧,助你解锁更灵活的SQL控制能力。一、智能修剪(Trim标签)应用场景:动态处理字段更新,替代<...

Springboot数据访问(整合Mybatis Plus)

Springboot整合MybatisPlus1、创建数据表2、引入maven依赖mybatis-plus-boot-starter主要引入这个依赖,其他相关的依赖在这里就不写了。3、项目结构目录h...

盘点金州勇士在奥克兰13年的13大球星 满满的全是...

见证了两个月前勇士与猛龙那个史诗般的系列赛后,甲骨文球馆正式成为了历史。那个大大的红色标志被一个字母一个字母地移除,在周四,一切都成为了过去式。然而这座,别名为“Roaracle”(译注:Roar怒吼...

Mybatis入门看这一篇就够了(mybatis快速入门)

什么是MyBatisMyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为M...

Springboot数据访问(整合druid数据源)

Springboot整合druid数据源基本概念SpringBoot默认的数据源是:2.0之前:org.apache.tomcat.jdbc.pool.DataSource2.0及之后:com.z...

Linux 中的 &quot;/etc/profile.d&quot; 目录有什么作用 ?

什么是/etc/profile.d/目录?/etc/profile.d/目录是Linux系统不可或缺的一部分保留配置脚本。它与/etc/profile文件相关联,这是一个启动脚本,该脚...

企业数据库安全管理规范(企业数据库安全管理规范最新版)

1.目的为规范数据库系统安全使用活动,降低因使用不当而带来的安全风险,保障数据库系统及相关应用系统的安全,特制定本数据库安全管理规范。2.适用范围本规范中所定义的数据管理内容,特指存放在信息系统数据库...

Oracle 伪列!这些隐藏用法你都知道吗?

在Oracle数据库中,有几位特殊的“成员”——伪列,它们虽然不是表中真实存在的物理列,但却能在数据查询、处理过程中发挥出意想不到的强大作用。今天给大家分享Oracle伪列的使用技巧,无论...

Oracle 高效处理数据的隐藏神器:临时表妙用

各位数据库搬砖人,在Oracle的代码世界里闯荡,处理复杂业务时,是不是总被数据“搅得头大”?今天给大家安利一个超实用的隐藏神器——临时表!当你需要临时存储中间计算结果,又不想污染正式数据表...

Oracle 数据库查询:多表查询(oracle多表关联查询)

一、多表查询基础1.JOIN操作-INNERJOIN:返回两个表中满足连接条件的匹配行,不保留未匹配数据。SELECTa.emp_id,b.dept_nameFROMempl...

一文掌握怎么利用Shell+Python实现多数据源的异地备份程序

简介:在信息化时代,数据安全和业务连续性已成为企业和个人用户关注的焦点。无论是网站数据、数据库、日志文件,还是用户上传的文档、图片等,数据一旦丢失,损失难以估量。尤其是当数据分布在多个不同的目录、服务...

取消回复欢迎 发表评论: