在Spring中使用Redis

  • 内容
  • 评论
  • 相关

在教程《在Java程序中使用Redis》中介绍了在没有封装情况下使用 Java API 的缺点,需要自己编写规则把 Java 对象和 Redis 的字符串进行相互转换,而在 Spring 中这些问题都可以轻松处理。

在 Spring 中使用 Redis,除了需要 jedis.jar 外,还需要下载 spring-data-redis.jar,这里值得注意的是 jar 包和 Spring 版本兼容的问题,笔者使用的 jar 包版本是 1.8.1,而 Spring 的版本是 5.0.4,如果使用其他的版本可能存在不兼容的问题,从而产生异常,这是笔者从实际操作得来的经验。

把下载的 jar 包导入到工程环境中,这样就可以在使用 Spring 提供的 RedisTemplate 操作 Redis 了,只是在使用前,需要对 Spring 提供的方案进行探讨,以便更好地使用它们。

在大部分情况下我们都会用到连接池,于是先用 Spring 配置一个 JedisPoolConfig 对象,这个配置相对而言比较简单,使用 Spring 配置 JedisPoolConfig 对象代码如下所示。

<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <!-- 最大空闲数 -->
    <property name="maxIdle" value="50" />
    <!-- 最大连接数 -->
    <property name="maxTotal" value="100" />
    <!-- 最大等待时间 -->
    <property name="maxWaitMillis" value="20000" />
</bean>

这样就设置了一个连接池的配置,继续往下配置。

在使用 Spring 提供的 RedisTemplate 之前需要配置 Spring 所提供的连接工厂,在 Spring Data Redis 方案中它提供了 4 种工厂模型。

  • JredisConnectionFactory。
  • JedisConnectionFactory。
  • LettuceConnectionFactory。
  • SrpConnectionFactory。

虽然使用哪种实现工厂都是可以的,但是要根据环境进行测试,以验证使用哪个方案的性能是最佳的。无论如何它们都是接口 RedisConnectionFactory 的实现类,更多的时候我们都是通过接口定义去理解它们,所以它们是具有接口适用性特性的。本教程将以使用最为广泛的 JedisConnectionFactory 为例进行讲解。

例如,在 Spring 中配置一个 JedisConnectionFactory 对象,配置 JedisConnectionFactory 代码如下所示。

<bean id="connectionFactory"
    class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="localhost" />
    <property name="port" value="6379" />
    <!--<property name="password" value="password"/> -->
    <property name="poolConfig" ref="poolConfig" />
</bean>

解释一下它的属性配置。

  • hostName,代表的是服务器,默认值是 localhost,所以如果是本机可以不配置它。
  • port,代表的是接口端口,默认值是 6379,所以可以使用默认的 Redis 端口,也可以不配置它。
  • password,代表的是密码,在需要密码连接 Redis 的场合需要配置它。
  • poolConfig,是连接池配置对象,可以设置连接池的属性。

这样就完成了一个 Redis 连接工厂的配置。这里配置的是 JedisConnectionFactory,如果需要的是 LettuceConnectionFactory,可以把使用 Spring 配置 JedisPoolConfig 对象代码中的 Bean 元素的 class 属性修改为 org.springframework.data.redis.connection.lettuce.LettuceConnectionFactor 即可,这取决于项目的需要和特殊性。有了 RedisConnectionFactory 工厂,就可以使用 RedisTemplate 了。

普通的连接使用没有办法把 Java 对象直接存入 Redis,而需要我们自己提供方案,这时往往就是将对象序列化,然后使用 Redis 进行存储,而取回序列化的内容后,在通过转换转变为 Java 对象,Spring 模板中提供了封装的方案,在它内部提供了 RedisSerializer 接口(org.springframework.data.redis.serializer.RedisSerializer)和一些实现类,其原理如图 1 所示。

Spring序列化器
图 1  Spring序列化器

本文标题:在Spring中使用Redis

本文地址:https://www.hosteonscn.com/5988.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注