Redis 7 第九讲 微服务集成Redis 应用篇

这篇具有很好参考价值的文章主要介绍了Redis 7 第九讲 微服务集成Redis 应用篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Jedis

理论 

        Jedis是redis的java版本的客户端实现,使用Jedis提供的Java API对Redis进行操作,是Redis官方推崇的方式;并且,使用Jedis提供的对Redis的支持也最为灵活、全面;不足之处,就是编码复杂度较高。 

引入包 

        <!--Jedis-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>4.3.1</version>
        </dependency>

案例演示

 直连案列

 Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot

 获取Redis连接对象


    // 获取Jedis对象
    private static Jedis getJedis() {
        Jedis jedis = new Jedis("自己的地址", 端口);
        jedis.auth("111111");
        return jedis;
    }

Redis 案列

Jedis jedis = getJedis();     
         //geo
        String geo_key = getKey();
        jedis.geoadd(geo_key, getGeo());
        logger.info(String.valueOf(jedis.geodist(geo_key, "成都", "上海", GeoUnit.KM)));


    private static String getKey() {
        return "TOC-" + RandomUtil.randomString(6);
    }


    private static Map<String, GeoCoordinate> getGeo() {
        Map<String, GeoCoordinate> geoCoordinateHashMap = new HashMap<>(5);
        geoCoordinateHashMap.put("成都", new GeoCoordinate(103.954887, 30.569293));
        geoCoordinateHashMap.put("北京", new GeoCoordinate(116.427185, 39.93682));
        geoCoordinateHashMap.put("上海", new GeoCoordinate(121.477665, 31.236176));
        geoCoordinateHashMap.put("西安", new GeoCoordinate(108.952789, 34.36515));
        geoCoordinateHashMap.put("重庆", new GeoCoordinate(106.454377, 29.581309));
        return geoCoordinateHashMap;
    }

关闭Jedis对象 

  jedis.close();

 池案列

Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot 获取连接池对象

    JedisPool jedisPool = getJedisPool();
    Jedis jedis = jedisPool.getResource();

    // 获取Jedispoll对象
    private static JedisPool getJedisPool() {
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        poolConfig.setMaxIdle(8);
        poolConfig.setMinIdle(2);
        poolConfig.setMaxWait(Duration.ofSeconds(30000));
        return new JedisPool(poolConfig, "自己的ip", 端口, 100000, "111111");
    }

 代码案列

        //hash
        String hash_key = getKey();
        jedis.hset(hash_key, getMapStr());
        for (String hkey : jedis.hkeys(hash_key)) {
            logger.info(jedis.hget(hash_key, hkey));
        }

 关闭Jedis和Pool

 try {
            if (!Objects.isNull(jedis)) {
                jedis.close();
            }
        } finally {
            jedis = null;
        }
        try {
            if (Objects.isNull(jedisPool)){
                jedisPool.close();
            }
        } finally {
            jedisPool = null;
        }

总结

优点 缺点
直连

1.简单方便new-close

2.适用于连接数比较少且使用时间较长,可构成长连接的场景(只使用一个Jedis,比如down数据、大量数据更新)

1.存在每次新建和关闭TCP的开销(三次握手四次挥手)

2.每次都去new,系统资源可能无法在有效范围内进行控制,会存在连接容易发生泄漏

3.Jedis对象本身是线程不安全的

池连接

1.Jedis是预先生成的,不需要随用随创,随用完随关闭,降低了这些开销

2.连接池能够更好地保护和控制资源使用,有固定的参数去控制最大连接数或者空闲数目等

1.相对直连,使用起来麻烦,特别是资源管理上需要非常多的参数来保证,一旦出现规划不合理的情况就会出现问题(比如池满、连接空闲、连接超时等情况)

Lettuce

理论

        Lettuce 是一个可伸缩线程安全的 Redis 客户端。多个线程可以共享同一个 RedisConnection。它利用优秀 netty NIO 框架来高效地管理多个连接。 

引入包

        <dependency>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
            <version>6.2.5.RELEASE</version>
        </dependency>

案列演示

获取连接对象 

 
private static StatefulRedisConnection<String, String> getRedis() {
        // 链式编程 创建RedisUri
        RedisURI build = RedisURI.builder().withHost("120.77.64.190").withPort(6379).withPassword("111111".toCharArray()).build();

        //创建客户端
        StatefulRedisConnection<String, String> conn = RedisClient.create().connect(build);
        return conn;
    }


 StatefulRedisConnection<String, String> conn = getRedis();

 获取操作命令对象

  //链接command
   RedisCommands<String, String> jedis = conn.sync();

 案列


        //geo
        String geo_key = getKey();
        jedis.geoadd(geo_key, 103.954887, 30.569293,"成都");
        jedis.geoadd(geo_key, 121.477665, 31.236176,"上海");
        logger.info(String.valueOf(jedis.geodist(geo_key, "成都", "上海", GeoArgs.Unit.km)));

 关闭对象

 private static void closeConn(StatefulRedisConnection<String, String> conn) {
        // 关闭
        try {
            if (!Objects.isNull(conn)){

                conn.close();
            }
        }catch (Exception e){
            System.out.println(e);
        }finally {
            conn = null;
        }
    }

总结 

        Lettuce 相比Jedis 客户端,功能更加强大,不仅解决了线程安全的问题,还支持异步和响应式编程,支持集群,Sentinel,管道,编码器等等功能。 

spring-data-redis

单机 

理论

         RedisTemplate 继承自 RedisAccessor , 实现 RedisOperations 和 BeanClassLoaderAware 两个接口。spring-data-redis针对Jedis提供如下功能:

        1. 提供了一个高度封装的“RedisTemplate”类,里面封装了对于Redis的五种数据结构的各种操作

        2. SpringBoot2.x后,RedisTemplate采用是lettuce(基于netty采用异步非阻塞式lO)进行通信,大并发下比jedis效率更高。

        3. RedisTemplate模板使用序列化器操作redis数据

引入包

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>3.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.11.1</version>
        </dependency>

案列演示

配置文件 

server:
  port: 8080
spring:
  application:
    name: mop
  redis:
    host: 自己的ip
    port: 6379
    database: 0
    password: 111111
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 3s

未加序列化配置 

Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot

Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot

加入序列化配置

默认走JDK序列化 

Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot

加入自定义配置

Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot

插入数据后,客户端显示正常

Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot

后续案列可自行实践 

 集群

集群配置可参考 【Redis 7 第八讲 集群模式(cluster)架构篇】,集群搭建如下

Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot

配置文件

server:
  port: 8080
spring:
  application:
    name: mop
  redis:
    cluster:
      max-redirects: 3
      nodes:
        - 自己的IP:端口
        - 自己的IP:端口
        - 自己的IP:端口
        - 自己的IP:端口
        - 自己的IP:端口
        - 自己的IP:端口
    database: 0
    password: 111111
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 3s

案列演示 

Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot

意外模拟6381宕机,从机上位验证代码是否正常

Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot

写入时出现无法连接

Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot
主机宕机,从机上位

 原因分析:

        SpringBoot 客户端无法动态感知到集群最新变化。

        SpringBoot 2.X版本, Redis默认的连接池采用 Lettuce当Redis 集群节点发生变化后,Letture默认是不会刷新节点拓扑

加入配置参数,动态刷新

server:
  port: 8080
spring:
  application:
    name: mop
  redis:
    cluster:
      max-redirects: 3
      nodes:
        - IP:PORT
        - IP:PORT
        - IP:PORT
        - IP:PORT
        - IP:PORT
        - IP:PORT
    database: 0
    password: 111111
    lettuce:
      cluster:
        refresh:
          adaptive: true
          period: 2000
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: -1ms
#支持集群拓扑动态感应码斯,户适应拓扑树新是查使用所有可用的更斯,默认false 关闭spring.redis.lettuce.cluster .refresh,adaptive=true
#定时刷新
spring.redis,lettuce.cluster.refresh.period-2000

Redis 7 第九讲 微服务集成Redis 应用篇,技术专研,redis,Jedis,lettuce,Redistemplate,spring boot文章来源地址https://www.toymoban.com/news/detail-706731.html

【源码地址】


🌹 以上分享 Redis 客户端的应用,请指教🤝。
 
🌹🌹 如你对技术也感兴趣,欢迎交流。
 
🌹🌹🌹  如有需要,请👍点赞💖收藏🐱‍🏍分享 

到了这里,关于Redis 7 第九讲 微服务集成Redis 应用篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MySQL第九讲·索引怎么提高查询的速度?

    你好,我是安然无虞。 在超市信息系统刚刚开始运营的时候,因为数据量很少,每一次的查询都能很快拿到结果。但是,系统运转时间长了以后,数据量不断地累积,变得越来越庞大,很多查询的速度就变得特别慢。这个时候,我们就采用了 MySQL 提供的高效访问数据的方法

    2024年02月04日
    浏览(48)
  • Git第九讲 Git stash暂存消息

    git stash 是一个在 Git 中用于临时保存未提交的更改的命令。它可以帮助你在切换分支或处理紧急任务时,将当前工作目录中的修改保存起来,以便稍后恢复。 git stash 的使用方法如下: 当你想要暂存当前的修改时,运行以下命令: 可选地,你可以提供一个简短的描述性消息,

    2024年02月08日
    浏览(52)
  • 【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群指令分析—上篇)

    Redis Cluster提供了一套完整的功能技术,使得Redis能够以分布式的方式运行,并具备高可用性、容错性和扩展性。通过自动发现、主从选举、在线分片等机制,Redis Cluster能够自动管理集群中的节点,并保证数据的一致性和可靠性。同时,基于配置文件和转向机制,Redis Cluster能

    2024年02月14日
    浏览(55)
  • 『Linux』第九讲:Linux多线程详解(二)_ 线程控制

    「前言」文章是关于Linux多线程方面的知识,上一篇是 Linux多线程详解(一),今天这篇是 Linux多线程详解(二),讲解会比较细,下面开始! 「归属专栏」Linux系统编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「每篇一句」 纵有千古,横有八荒

    2024年02月01日
    浏览(46)
  • 设计模式第九讲:常见重构技巧 - 去除不必要的!=

    项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢?本文是设计模式第九讲,讲解常见重构技巧:去除不必要的!= 通常是这样的 初步的,使用Apache Commons,Guvava,Hutool等 StringUtils 考虑用Assert断言 逐级判断空,还是抛出自定义异常,还是

    2024年02月11日
    浏览(42)
  • 『Linux』第九讲:Linux多线程详解(五)_ 信号量

    「前言」文章是关于Linux多线程方面的知识,上一篇是 Linux多线程详解(四),今天这篇是 Linux多线程详解(五),内容大致是信号量,讲解下面开始! 「归属专栏」Linux系统编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「每篇一句」 求其上,

    2024年02月07日
    浏览(50)
  • 『Linux』第九讲:Linux多线程详解(三)_ 线程互斥 | 线程同步

    「前言」文章是关于Linux多线程方面的知识,上一篇是 Linux多线程详解(二),今天这篇是 Linux多线程详解(三),内容大致是线程互斥与线程同步,讲解下面开始! 「归属专栏」Linux系统编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「每篇一句

    2024年02月02日
    浏览(74)
  • 互联网大厂技术-Redis-集群模型、架构原理、难点应用场景、高频面试问题详解

    目录 一、Redis集群模型 1.1、主从模式 1.1.1 主从模式优缺点 1.2、哨兵模式 1.2.1 哨兵模式的作用: 1.2.2 哨兵实现原理 1.2.3 主观下线和客观下线 1.2.4 哨兵模式优缺点 1.3、各大厂的Redis集群方案 1.3.1 客户端分片 1.3.2 代理分片 Twemproxy的优点: Twemproxy的不足: 1.3.3 Codis 1.4、Redis

    2024年02月16日
    浏览(83)
  • 第九讲 单片机驱动彩色液晶屏 控制RA8889软件:显存操作

    目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控制RA8889软件:绘图 第五讲 单片机驱动彩色液

    2024年01月16日
    浏览(50)
  • 海山数据库(He3DB)Redis技术实践:继承开源Redis精髓,强化升级企业级服务

    数字化转型中的企业数据的处理速度和效率直接关系到企业的竞争力,Redis作为业界广泛使用的开源键值对存储系统,以其卓越的性能和丰富的数据结构,成为了众多开发者和企业的首选。然而,近期Redis开源社区对Redis协议进行了变更,从 Redis 7.4 版本开始,Redis 将从 BSD 3-

    2024年04月28日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包