Spring整合Redis

前言

在Spring项目中整合Redis,能显著提升数据缓存、分布式锁、会话管理等操作的效率。Jedis作为轻量级的Java Redis客户端,搭配Spring Data Redis模块,能够简化Redis的连接和数据操作,实现更高性能的读写与灵活的缓存管理。本文将简要介绍如何在Spring中集成Jedis,配置连接池、数据序列化等内容,并通过封装工具类来优化Redis的使用体验。

[!NOTE]

Spring版本:5.3.27

JDK版本:1.8

本文基于Jedis在Spring中整合Redis

一、redis客户端分类

1.1客户端对比

特性 Jedis Lettuce Redisson
线程安全 ×
支持集群
支持哨兵
支持发布/订阅
支持管道
支持异步操作 ×
支持响应式编程 ×
API直观性 √(API简单易用) ×(API较复杂) ×(API较复杂,丰富的功能)
社区支持
性能 性能较低(同步阻塞) 高性能(异步非阻塞) 高性能(异步非阻塞)
资源消耗 较高(频繁创建连接) 较低(连接复用) 较低(连接复用)
高级功能支持 × × √(支持分布式锁、布隆过滤器等)
易用性 高(简单易用) 中等(需要更多配置) 高(封装良好,功能丰富)
学习曲线 中等 陡峭(功能丰富,学习成本高)
文档完善度
客户端实例创建 简单 较复杂(需要配置) 较复杂(需要配置)
连接池支持 需要外部支持(如Apache Commons Pool) 内置连接池 内置连接池
跨语言支持 × × ×
商业支持 有社区版本支持 有社区版本支持 有社区版本支持,有商业支持

1.2客户端简要说明

Jedis:传统的Redis客户端,基于同步阻塞模型,不支持异步操作,在高并发场景下性能受限。使用起来比较简单,API直观,适合轻量级应用和快速开发。

Lettuce:基于Netty实现的异步非阻塞客户端,支持异步、响应式编程,性能较高,尤其适用于高并发应用。需要一些额外的配置,相较于Jedis,学习曲线略陡。

Redisson:功能最为丰富,除了基本的Redis操作外,还封装了分布式锁、布隆过滤器等高级功能,适合大型、分布式应用。其API相对复杂,学习成本较高,但提供了较强的扩展性和便捷的高级特性支持。

二、依赖项

2.1依赖项说明

spring-data-redis:

  • 这是Spring Data Redis模块的核心依赖,提供了对Redis的支持,简化Redis操作。
  • 封装了对Redis的连接、数据访问以及常用操作的API(如RedisTemplateStringRedisTemplate),并且兼容多种Redis客户端,包括Jedis和Lettuce。
  • 通过它可以轻松实现与Redis的交互,并支持连接池管理、事务支持和缓存抽象等功能。

jedis:

  • Jedis是一个轻量级的Java Redis客户端,用于直接操作Redis。
  • spring-data-redis虽然提供了对Redis操作的抽象,但并不包含Redis客户端,因此需要Jedis作为Redis的具体实现。
  • Jedis提供了同步的、简单易用的API,使得与Redis交互更加便捷。
  • RedisConnectionFactory中可以配置Jedis作为连接池,为RedisTemplate提供连接。

jackson-databind:

  • Jackson是Java中的一种常用JSON处理工具库,jackson-databind依赖提供了将Java对象和JSON之间互相序列化和反序列化的功能。
  • 在Redis中通常需要将复杂数据结构序列化为JSON格式存储,Jackson能够帮助实现对象到JSON的转换,特别适用于RedisTemplateGenericJackson2JsonRedisSerializer
  • jackson-databind结合RedisTemplate使用,可以方便地将Java对象转换成JSON格式存储到Redis中,以及从Redis中取出JSON字符串时将其反序列化为Java对象。

2.2pom文件

<dependency>
    <groupId>org.springframework.datagroupId>
    <artifactId>spring-data-redisartifactId>
    <version>2.6.10version>
dependency>

<dependency>
    <groupId>redis.clientsgroupId>
    <artifactId>jedisartifactId>
    <version>3.7.0version>
dependency>

<dependency>
    <groupId>com.fasterxml.jackson.coregroupId>
    <artifactId>jackson-databindartifactId>
    <version>2.13.4version>
dependency>

三、配置文件

  • host:redis服务地址
  • port:redis服务端口(默认6379)
  • password:密码(如果设置了)
  • timeout:处理客户端请求超时时间
  • pool.max-total:连接池最大连接数(包括空闲连接和正在使用的连接。当连接池中的连接数量达到 maxTotal 时,如果有新的请求想要连接,连接池将会等待,直到有连接被释放为止)
  • pool.max-idle:连接池最大空闲连接数(当连接池中空闲连接的数量超过 maxIdle 所设置的值时,连接池会尽量释放多余的连接。这样可以避免资源的浪费,确保系统的性能和稳定性。)
  • pool.min-idle:连接池最小空闲连接数
redis.host=*.*.*.*
redis.port=6379
redis.password=123456
redis.timeout=60000
redis.pool.max-total=8
redis.pool.max-idle=8
redis.pool.min-idle=0

3.1配置类

3.1.1配置类说明

  • 客户端及连接池配置属性使用@Value注入

  • 定义了两个Spring管理的bean,分别是redisConnectionFactoryredisTemplate

  • redisConnectionFactory用于创建和配置RedisConnectionFactory实例,以便为应用程序提供与Redis数据库的连接。

3.1.2redisConnectionFactory

Redis服务器地址配置:
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host,

你可能感兴趣的:(学一学Spring,spring,redis,java)