Spring Boot中支持的Redis访问客户端有哪些?

在与Redis进行交互的时候,常见的客户端访问工具有如下几种Redis CLI(Command Line Interface)、Redis Desktop Manager、RedisInsight、Redisson、Lettuce、Jedis,而在我们编码的时候最常见的Redis客户端访问工具就是Jedis与Lettuce,下面我们就来看看在Redis中如何集成这两种客户端访问工具。

Jedis客户端方式

Jedis是一个流行的Java Redis客户端,它提供了简单易用的API,并且与Redisson和Lettuce相比,它更轻量级。虽然它在性能上可能不如Lettuce,但它仍然是一个强大而灵活的工具。在很多场景下都有使用。

下面就来看看如何在Spring Boot项目中整合Jedis客户端工具。

第一步、引入POM依赖

xml 复制代码
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>

第二步、添加配置信息

在SpringBoot项目的配置文件中添加Redis的链接信息。

yaml 复制代码
spring:
  redis:
    host: localhost
    port: 6379
    password:   # 如果 Redis 设置了密码,则填写密码

第三步、如何使用

配置完上面的两步之后,接下来,就是在需要用到Redis的地方引入JedisPool对象就可以了,如下所示。

typescript 复制代码
@Service
public class RedisService {
    @Autowired
    private JedisPool jedisPool;
    public void setValue(String key, String value) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.set(key, value);
        }
    }
    public String getValue(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.get(key);
        }
    }
}

Lettuce客户端连接

Lettuce是一个高性能的Java Redis客户端,与Redisson类似,它也提供了丰富的功能和异步API。它被广泛用于构建高性能的分布式应用程序。

Lettuce 是一个基于 Netty 的 Redis 客户端,性能较好,支持异步操作。

下面就来看看如何整合Lettuce客户端

第一步、引入POM依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

第二步、添加配置

在 Spring Boot 配置文件中配置 Redis 连接信息(与 Jedis 配置方式相同)。当然Lettuce还提供了一些其他的配置,比如说连接池大小、空闲线程、可用线程等配置。有兴趣的读者可以自己研究这些配置内容。

yaml 复制代码
spring:
  redis:
    host: localhost
    port: 6379
    password:   # 如果 Redis 设置了密码,则填写密码

第三步、使用

在需要使用 Redis 的地方,直接注入StringRedisTemplate或者RedisTemplate对象即可。当然在SpringBoot中还提供了对于Redis对象序列化方式的配置,可以通过Config配置类的方式添加RedisTemplate中。如果不做配置,那么默认使用SpringBoot中自带的支持的序列化方式。

typescript 复制代码
@Service
public class RedisService {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    public void setValue(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }
    public String getValue(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }
}

以上是使用 Jedis 和 Lettuce 的常见整合方式。在实际项目中,选择合适的 Redis 客户端需要根据项目的具体需求、性能要求和开发习惯来决定。

Jedis与Lettuce的区别与联系

底层实现

  • Jedis 使用了阻塞式 IO,它是直接连接 Redis 的客户端,每个 Jedis 实例都是一个直接连接,因此在多线程环境中,需要使用连接池来管理 Jedis 实例。
  • Lettuce 基于 Netty 框架实现了非阻塞式 IO,它是一个异步、线程安全的 Redis 客户端,一个 Lettuce 实例可以处理多个连接。

连接方式

  • Jedis 是基于连接池的方式管理连接的,每次操作 Redis 都会从连接池中获取连接,操作完成后将连接归还到连接池。
  • Lettuce 是基于异步和回调的方式,使用了单个连接实例来处理所有的 Redis 操作,不需要像 Jedis 那样使用连接池。

线程安全

  • Jedis 的实例不是线程安全的,如果需要在多线程环境中使用 Jedis,必须通过连接池来管理连接。
  • Lettuce 是线程安全的,一个 Lettuce 实例可以被多个线程共享,无需额外的同步操作。

总结

综上所述,Jedis 和 Lettuce 在底层实现、连接方式、线程安全性和性能等方面有所不同,但都可以在 Spring Boot 中使用,并且提供了类似的功能和整合方式。选择使用哪种 Redis 客户端取决于项目需求、性能要求和开发习惯等因素。

相关推荐
Mahir087 小时前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
RyFit8 小时前
SpringAI 常见问题及解决方案大全
java·ai
石山代码8 小时前
C++ 内存分区 堆区
java·开发语言·c++
绝知此事9 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
无风听海9 小时前
C# 隐式转换深度解析
java·开发语言·c#
一只大袋鼠9 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
德思特10 小时前
从 Dify 配置页理解 RAG 的重要参数
java·人工智能·llm·dify·rag
YOU OU11 小时前
Spring IoC&DI
java·数据库·spring
один but you11 小时前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
IT_陈寒11 小时前
Redis缓存击穿把我整不会了,原来还有这手操作
前端·人工智能·后端