在Spring Boot微服务集成Jedis操作Redis

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

记录:406

场景:在Spring Boot微服务集成Jedis操作Redis的缓存和队列。

版本:JDK 1.8,Spring Boot 2.6.3,redis-6.2.5,jedis-3.7.1。

1.微服务中配置Redis信息

1.1在application.yml中Jedis配置信息

hub:
  example:
    redis:
      jedis:
        host: 192.168.19.203
        port: 28001
        password: 12345678
        timeout: 60000

1.2使用ConfigurationProperties加载Jedis配置

Spring Boot微服务在启动时,自动注解机制会读取application.yml的Jedis相关注入到JedisConnectProperties 对象。

在Spring环境中,注入JedisConnectProperties对象,就能获取到Redis相关配置信息。也就是Jedis客户端必须的参数。

定义JedisConnectProperties 类,扫描yml中的hub.example.redis.jedis配置。

@Component
@ConfigurationProperties(prefix="hub.example.redis.jedis")
public class JedisConnectProperties {
  private String host;
  private int port;
  private int timeout;
  private String password;
  public String getHost() {
      return host;
  }
  public void setHost(String host) {
      this.host = host;
  }
  public int getPort() {
      return port;
  }
  public void setPort(int port) {
      this.port = port;
  }
  public int getTimeout() {
      return timeout;
  }
  public void setTimeout(int timeout) {
      this.timeout = timeout;
  }
  public String getPassword() {
      return password;
  }
  public void setPassword(String password) {
      this.password = password;
  }
}

1.3在pom.xml添加依赖

在Spring Boot中默认集成jedis,使用无需加版本号,本例版本3.7.1是Spring Boot 2.6.3对应的版本。

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.7.1</version>
</dependency>

2.微服务中配置Jedis

2.1配置Jedis

@Configuration
public class JedisConfig {
  @Autowired
  private JedisConnectProperties jedisProperties;
  @Bean("jedisPoolConfig")
  public JedisPoolConfig jedisPoolConfig() {
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(30);
    jedisPoolConfig.setMaxIdle(30);
    jedisPoolConfig.setMinIdle(1);
    jedisPoolConfig.setNumTestsPerEvictionRun(-1);
    jedisPoolConfig.setTestOnBorrow(true);
    jedisPoolConfig.setTestOnReturn(false);
    jedisPoolConfig.setBlockWhenExhausted(false);
    return jedisPoolConfig;
  }
  @Bean("jedisPool")
  public JedisPool jedisPool(JedisPoolConfig jedisPoolConfig) {
    JedisPool jedisPool = new JedisPool(jedisPoolConfig,
        jedisProperties.getHost(),
        jedisProperties.getPort(),
        jedisProperties.getTimeout(),
        jedisProperties.getPassword());
    return jedisPool;
  }
}

2.2解析

在配置Jedis后,在Spring环境中可以使用@Autowired自动注入jedisPool,从Jedis资源池中获取Jedis就可以操作Redis了。

3.使用@Autowired注入方式操作Jedis

3.1简要说明

使用@Autowired注入JedisPool取出Jedis,操作Redis的增、查、改、删。

3.2操作示例

@RestController
@RequestMapping("/hub/example/loadJedis")
@Slf4j
public class LoadJedisController {
  @Autowired
  private JedisPool jedisPool;
  /**
   * 使用@Autowired注入JedisPool取出Jedis
   */
  @GetMapping("/jedis01-01")
  public Object loadData01_01() {
    log.info("Jedis操作开始...");
    // 1.获取Jedis对象
    Jedis jedis = jedisPool.getResource();
    // 2.增
    jedis.set("CityInfo:suzhou01:01", "苏州");
    // 3.查
    String city = jedis.get("CityInfo:suzhou01:01");
    // 4.改
    jedis.set("CityInfo:suzhou01:01", "苏州-姑苏");
    // 5.删
    jedis.del("CityInfo:suzhou01:01");
    // 6.释放Jedis对象
    jedis.close();
    log.info("Jedis操作结束...");
    return "执行成功";
  }
}

3.3测试验证

使用Postman测试。

请求RUL:http://127.0.0.1:18205/hub-205-redis/hub/example/loadJedis/jedis01-01

4.使用静态方法获取JedisPool操作Jedis

4.1简要说明

使用静态方法获取JedisPool取出Jedis,操作Redis的增、查、改、删。

4.2封装静态类

使用Spring工具类从Spring管理的Bean中取出JedisPool。

添加重试机制从JedisPool取出Jedis。

@Slf4j
public class JedisUtil {
  public static Jedis getJedis() {
    Jedis jedis = null;
    JedisPool jedisPool = null;
    // 1.当前获取次数和最大重试次数
    int maxRetryTime = 3;
    int curRetryTime = 0;
    while (curRetryTime < maxRetryTime) {
      curRetryTime++;
      try {
        // 2.从JedisPool中获取Jedis
        jedisPool = SpringUtil.getBean("jedisPool");
        jedis = jedisPool.getResource();
        return jedis;
      } catch (Exception e) {
        log.info("从JedisPool中获取Jedis失败,最大次数{},当前获取次数{}", maxRetryTime, curRetryTime);
        try {
          TimeUnit.SECONDS.sleep(2L);
        } catch (InterruptedException ie) {
          ie.printStackTrace();
        }
      }
    }
    return null;
  }
}

4.3操作示例

@RestController
@RequestMapping("/hub/example/loadJedis")
@Slf4j
public class LoadJedisController {
  /**
   * 使用静态方法获取JedisPool取出Jedis
   */
  @GetMapping("/jedis01-02")
  public Object loadData01_02() {
    log.info("Jedis操作开始...");
    // 1.获取Jedis对象
    Jedis jedis = JedisUtil.getJedis();
    // 2.增
    jedis.set("CityInfo:suzhou01:02", "苏州");
    // 3.查
    String city = jedis.get("CityInfo:suzhou01:02");
    // 4.改
    jedis.set("CityInfo:suzhou01:02", "苏州-姑苏");
    // 5.删
    jedis.del("CityInfo:suzhou01:02");
    // 6.释放Jedis对象
    jedis.close();
    log.info("Jedis操作结束...");
    return "执行成功";
  }
}

4.4测试验证

使用Postman测试。

请求RUL: http://127.0.0.1:18205/hub-205-redis/hub/example/loadJedis/jedis01-02

5.Jedis类说明

Jedis类,继承BinaryJedis类,实现接口:JedisCommands、MultiKeyCommands、 AdvancedJedisCommands、ScriptingCommands、BasicCommands、ClusterCommands、 SentinelCommands、ModuleCommands。

Jedis类:redis.clients.jedis.Jedis,操作Redis全部功能,包括String和byte[]类型数据。Jedis已实现操作Redis的命令均可以使用此类操作。

BinaryJedis类:BinaryJedisredis.clients.jedis.BinaryJedis,操作byte[]类型数据。

JedisCommands接口:redis.clients.jedis.commands.JedisCommands,操作Redis常用操作命令,一般是操作一个key的命令。

MultiKeyCommands接口:redis.clients.jedis.commands.MultiKeyCommands,操作Redis使用多个key操作的命令。

AdvancedJedisCommands接口:redis.clients.jedis.commands.AdvancedJedisCommands,操作Redis的一些高阶命令。

ScriptingCommands接口:redis.clients.jedis.commands.ScriptingCommands,操作Redis脚本的命令。

BasicCommands接口:redis.clients.jedis.commands.BasicCommands,操作Redis的一些基础命令。比如ping、info等命令。

ClusterCommands接口:redis.clients.jedis.commands.ClusterCommands,操作Redis集群命令。

SentinelCommands接口:redis.clients.jedis.commands.SentinelCommands,操作Redis的Sentinel哨兵模式的命令。

ModuleCommands接口:redis.clients.jedis.commands.ModuleCommands,包括moduleLoad、moduleUnload、moduleList方法。

6.注意问题

(1)配置Redis超时时时,不能配置太短,如果网络稍微不好一点,就会取不到Jedis。注意设置Jedis超时时间单位是毫秒。

(2)在Spring Boot 2.6.3微服务中已经集成了Jedis,使用默认版本就可,如果使用更高版本,可能会存在版本冲突,需要做相应的适配修改。

以上,感谢。

2023年4月15日文章来源地址https://www.toymoban.com/news/detail-414643.html

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

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

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

相关文章

  • 在Spring Boot微服务集成spring-kafka操作Kafka集群

    记录 :461 场景 :在Spring Boot微服务集成spring-kafka-2.8.2操作Kafka集群。使用KafkaTemplate操作Kafka集群的生产者Producer。使用@KafkaListener操作Kafka集群的消费者Consumer。 版本 :JDK 1.8,Spring Boot 2.6.3,kafka_2.12-2.8.0,spring-kafka-2.8.2。 Kafka集群安装 :https://blog.csdn.net/zhangbeizhen18/article/details

    2024年02月10日
    浏览(35)
  • 在Spring Boot微服务集成kafka-clients操作Kafka集群

    记录 :463 场景 :在Spring Boot微服务集成kafka-clients-3.0.0操作Kafka集群。使用kafka-clients的原生KafkaProducer操作Kafka集群生产者Producer。使用kafka-clients的原生KafkaConsumer操作Kafka集群的消费者Consumer。 版本 :JDK 1.8,Spring Boot 2.6.3,kafka_2.12-2.8.0,kafka-clients-3.0.0。 Kafka集群安装 :https://bl

    2024年02月09日
    浏览(34)
  • 在Spring Boot微服务集成Kafka客户端(spring-kafka)操作Kafka

    记录 :457 场景 :在Spring Boot微服务集成Kafka客户端spring-kafka-2.8.2操作Kafka。使用Spring封装的KafkaTemplate操作Kafka生产者Producer。使用Spring封装的@KafkaListener操作Kafka的消费者Consumer。 版本 :JDK 1.8,Spring Boot 2.6.3,kafka_2.12-2.8.0,spring-kafka-2.8.2。 Kafka安装 :https://blog.csdn.net/zhangbeizhen1

    2024年02月09日
    浏览(37)
  • 在Spring Boot微服务集成Kafka客户端(kafka-clients)操作Kafka

    记录 :459 场景 :在Spring Boot微服务集成Kafka客户端kafka-clients-3.0.0操作Kafka。使用kafka-clients的原生KafkaProducer操作Kafka生产者Producer。使用kafka-clients的原生KafkaConsumer操作Kafka的消费者Consumer。 版本 :JDK 1.8,Spring Boot 2.6.3,kafka_2.12-2.8.0,kafka-clients-3.0.0。 Kafka安装 :https://blog.csdn.ne

    2024年02月12日
    浏览(34)
  • 将Spring Boot与Redis集成

    Spring Boot是一个用于创建独立且可执行的Spring应用程序的框架。它简化了基于Spring框架的应用程序的开发过程,并提供了一种快速和简便的方式来构建Java应用程序。 Spring Boot提供了自动配置机制,通过引入适当的依赖项,可以自动配置各种Spring功能。它还提供了内嵌的HTTP服务

    2024年02月11日
    浏览(34)
  • Spring Boot集成Redis简单示例

    要在Spring Boot中集成Redis,你可以使用Spring Data Redis库来简化操作。 下面是一个示例代码: 首先,在你的Spring Boot项目的pom.xml文件中添加以下依赖: 接下来,配置Redis连接信息。在application.properties(或application.yml)文件中添加以下配置: 然后,创建一个Redis服务类来执行一些

    2024年01月22日
    浏览(37)
  • 【Redis系列】Spring Boot 集成 Redis 实现缓存功能

    【Redis系列】Spring Boot 集成 Redis 实现缓存功能

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年04月10日
    浏览(38)
  • 【Spring Boot 3】【Redis】集成Redisson

    软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费或多或少的时间、检索不止一篇资料才能得出一个可工作的DEMO,这占用了我大量的时

    2024年01月23日
    浏览(37)
  • 【Spring Boot 3】【Redis】集成Lettuce

    软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费或多或少的时间、检索不止一篇资料才能得出一个可工作的DEMO,这占用了我大量的时

    2024年01月18日
    浏览(45)
  • Spring Boot 集成 Redis 三种模式实践汇总

    Spring Boot 集成 Redis 三种模式实践汇总

    背景 项目的某个模块集成了 SpringBoot Redis 包,客户端使用 Lettuce,Redis 测试环境单机模式。但是现场反馈的 Redis 环境是集群,如果简单的修改 spring.redis 配置为集群的配置信息,程序能否能无缝衔接呢? 本文记录这个问题的验证过程: 集群配置和单机配置,直接改配置,R

    2024年02月15日
    浏览(266)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包