springboot(spring)整合redis(集群)、细节、底层配置讲解

这篇具有很好参考价值的文章主要介绍了springboot(spring)整合redis(集群)、细节、底层配置讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.springboot整合redis.

1.引入依赖.

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

     其实springboot整合其他主流框架直接在后面加上名称即可,比如spring-boot-starter-redis,然后就直接可以用,可以直接注入了.
     主要原因大概就是springboot框架已经包含了自动注入的功能,对于每一个引入的主要jar包(包含starter),都有一个factory的配置文件,里面配置了jar包的全路径,有了这个路径就可以将这些类处理然后注入到spring工厂中,我们就可以直接使用.

2.添加配置.

#地址
spring.redis.host=192.168.68.2
#端口
spring.redis.port=6379
#超时时间
spring.redis.timeout=60000
    

集群的话可以使用以下两个配置

 #以下是最关键的两个配置,
 #最大的切换连接节点的数目,当连接某一个节点不成功时,会去连接另一个节点
 spring.redis.cluster.max-redirects=1000
 spring.redis.cluster.nodes=192.168.5.111:6380,192.168.5.111:6381,192.168.5.111:6382,192.168.5.111:6383,192.168.5.111:6384,192.168.5.111:6385

3.使用封装对象举例

 @Service
  public class RedisService {
     @Resource
     RedisTemplate<String,String> template;                        

     ValueOperations<String, String> string = template.opsForValue();
     HashOperations<String, Object, Object> hash = template.opsForHash();
     ListOperations<String, String> list = template.opsForList();
     SetOperations<String, String> set = template.opsForSet();
     ZSetOperations<String, String> zset = template.opsForZSet();

    //封装String类型方法
    public void set(String key,String value){
        string.set(key,value);
    }
    public String get(String key){
        return string.get(key);
    }
    //封装hash方法
    public void hset(String key,String itemKey,String itemValue){
        hash.put(key,itemKey,itemValue);
     }
     public String hget(String key,String itemKey){
         return (String)hash.get(key,itemKey);
     }
  }
    -----测试-----
    @org.junit.Test
    public void TestRedisService(){
        redis.set("name","wang");
        redis.hset("hset","韩信","刺客");
        System.out.println(redis.get("name"));
        System.out.println(redis.hget("hset","韩信"));
    }

二.细节讲解

出现问题,堆外内存溢出

当我们的项目直接使用以上配置的时候,对项目进行压测,可能很快就出现堆外内存溢出.
springboot(spring)整合redis(集群)、细节、底层配置讲解
     出现这个问题的原因就是lettuce操作netty的bug,在springboot2.0以后,默认使用lettuce作为操作redis的客户端.它使用netty进行网络通信,因为这个bug导致netty堆外内存溢出.
      假如我们的项目设置jvm最大内存为200m,那么netty如果没有指定堆外内存的话,就会默认使用我们这里的200m作为堆外内存的大小.同时这个堆外内存的使用并不会得到及时释放,将会不断增加.所以会出现堆外内存溢出.

解决方案,切换客户端

这里有两个解决方案:

  1. 升级lettuce客户端
  2. 切换客户端为jedis.

因为考虑到升级版本可能会带来其他的兼容问题,这里选择一种比较简单的方式,切换客户端为jedis.

切换方式:
直接修改pom即可,其他代码,配置都不用改.

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

三.补充原理.

      我们直接将操作redis的客户端由lettuce切换成jedis,但是使用的时候却不用做任何修改操作,
可以说非常方便,这是为什么呢?

      无论是lettuce还是jedis,都是操作redis的底层客户端, spring都对其进行了统一的封装,也就是封装成restTemplate. 从配置层面就可以看到这个关系.

      那怎么看底层的注入配置呢?其实springboot整合很多其他第三方组件,Redis,Mybatis,Elasticsearch等等都会有一个XXXAutoConifguration的配置类.直接搜索这个配置类即可.
springboot(spring)整合redis(集群)、细节、底层配置讲解
springboot(spring)整合redis(集群)、细节、底层配置讲解

这里我们主要看RedisAutoConfiguration.

springboot(spring)整合redis(集群)、细节、底层配置讲解

而在对应的LettuceConnectionConfiguration和JedisConnectionConfiguration配置类中,都会向spring注入RedisConnectionFactory这个bean(在spring缺失这个bean的条件下)

springboot(spring)整合redis(集群)、细节、底层配置讲解
springboot(spring)整合redis(集群)、细节、底层配置讲解

      这样,即使底层切换了客户端,在使用层面也不需要做任何修改.是非常方便的.

      其实想一想如果我们自己去实现这个功能,你很有可能直接一套if else,没有jedis的话用lettuce,将来再新增一个其他的客户端,又增加个if else,这样是非常不美观,且不具有扩展性的,所以我们最重要的还是要学习这种思想,运用到我们自己的实际工作中.

今天的分享就到这里了,有问题可以在评论区留言,均会及时回复呀.
我是bling,未来不会太差,只要我们不要太懒就行, 咱们下期见.
springboot(spring)整合redis(集群)、细节、底层配置讲解文章来源地址https://www.toymoban.com/news/detail-490360.html

到了这里,关于springboot(spring)整合redis(集群)、细节、底层配置讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【微服务】springboot整合redis哨兵集群使用详解

    目录 一、前言 二、环境准备 三、安装redis 3.1 前置准备 3.1.1 下载安装包

    2024年02月14日
    浏览(40)
  • Redis底层封装细节

    日常我们程序员在使用redis做缓存的时候,很少会直接使用到RedisTemplate直接操作k-v键值对,而是通过对RedisTemplate原生代码的封装,来构建我们日常便于使用习惯的代码来操作数据,这里我分享一下日常基本的对RedisTemplate底层的封装原理和使用方法 以上是我日常使用过程中对

    2024年02月16日
    浏览(35)
  • Redis(发布订阅、事务、redis整合springboot、集成 Spring Cache)

    目录 一.redis的发布订阅 1、什么 是发布和订阅 2、Redis的发布和订阅 3、发布订阅的代码实现 二.Redis事务 1.事务简介 1、在事务执行之前 如果监听的key的值有变化就不能执行 2、在事务执行之前 如果监听的key的值没有变化就能执行 3、Exec之前就出现错误 4、Exec之后出现的错误

    2024年01月24日
    浏览(50)
  • 【Spring】SpringBoot整合Redis,用Redis实现限流(附Redis解压包)

       📝个人主页:哈__ 期待您的关注  本文介绍SpringBoot整合Redis并且进行接口的限流,文章主要介绍的是一种思想,具体代码还要结合实际。 Redis的解压包我放在了百度网盘上,有需要的可以下载。 Redis-x64-3.0.504 解压码:uhwj 我们在本地解压下载的Redis压缩包,打开解压后的

    2024年04月09日
    浏览(49)
  • Springboot 整合 Redis配置

    RedisService接口 RedisServiceImpl 实现类 Redis 配置类

    2024年02月10日
    浏览(42)
  • springboot整合redis配置

    2024年02月11日
    浏览(48)
  • SpringBoot整合redis的配置

    第一步,引入依赖。 第二步,配置文件中新增redis的配置项 yml properties 第三步,新增redis配置类 @EnableCaching 作用:开启缓存 @AutoConfigureAfter 作用:在加载配置的类之后再加载当前类

    2024年02月15日
    浏览(38)
  • 【手撕Spring源码】一些值得注意的Spring底层细节

    FactoryBean是一个Factory对象,用于生成其他bean示例。当一个bean实现FactoryBean接口后,Spring容器调用其getObject方法返回该工厂所生成的bean,而不是该FactoryBean本身。但是工厂生成的产品对象只能说是一部分受到Spring容器的管理,我们来看看下面的例子: 我们把一个Bean1通过工厂Bean的

    2024年02月09日
    浏览(47)
  • springboot中redis的配置详细讲解

    在Spring Boot中配置Redis主要涉及以下几个方面:引入依赖、配置连接信息、配置连接池、配置操作模板。 引入依赖:首先,在项目的pom.xml文件中添加Redis相关的依赖,例如: 配置连接信息:在application.properties或application.yml文件中配置Redis连接信息,包括主机名、端口号、密码

    2024年01月24日
    浏览(92)
  • 【Java Web】利用Spring整合Redis,配置RedisTemplate

    1. 在config中加入RedisConfig配置类 2. 写个测试类测试一下 3. 注意事项 Redis不满足事务的原子性,原子性是指事务要么被全部执行,要么都不执行。但是Redis不支持回滚,就可能会出现有些语句执行成功,有些执行失败,因此具备原子性; Redis事务的三个阶段: 开始事务 命令入

    2024年02月09日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包