Spring Data Redis 教程

通过 RedisTemplate 处理对象

在使用 Spring Data Redis 操作 Redis 时,大多数用户可能会使用 RedisTemplate 类及其对应的包 org.springframework.data.redis.core 来操作 Redis。

实际上,模板(RedisTemplate)是 Redis 模块的中心类,因为它具有丰富的功能集。虽然 RedisConnection 提供了接受和返回二进制值(字节数组)的低级方法,但模板(RedisTemplate)负责序列化和连接管理,使用户免于处理此类的细节。

此外,该模板(RedisTemplate)提供了操作视图(按照 Redis 命令参考中的分组进行分类型操作),这些视图提供了丰富的通用接口,用于处理特定类型或特定键(通过 KeyBound 接口),如下表所述:

接口描述
键类型操作(Key Type Operations)
GeoOperationsRedis 地理空间操作,例如 GEOADD、GEORADIUS、...
HashOperationsRedis hash 操作
HyperLogLogOperationsRedis HyperLogLog 操作,例如 PFADD、PFCOUNT、...
ListOperationsRedis list 操作
SetOperationsRedis set 操作
ValueOperationsRedis string (或 value) 操作
ZSetOperationsRedis zset (或 sorted set) 操作
键绑定操作(Key Bound Operations)
BoundGeoOperationsRedis 键绑定地理空间操作
BoundHashOperationsRedis hash 键绑定操作
BoundKeyOperationsRedis 键绑定操作
BoundListOperationsRedis list 键绑定操作
BoundSetOperationsRedis set 键绑定操作
BoundValueOperationsRedis string (或 value) 键绑定操作
BoundZSetOperationsRedis zset (或 sorted set) 键绑定操作

注意:配置好后,模板(RedisTemplate)是线程安全的,可以跨多个实例重用。

RedisTemplate 对其大部分操作使用基于 Java 的序列化程序。这意味着模板(RedisTemplate)写入或读取的任何对象都通过Java进行序列化和反序列化。

您可以更改模板上的序列化机制,Redis 模块提供了几种实现,可在 org.springframework.data.redis.serializer 包中找到。

您还可以通过将 enableDefaultSerializer 属性设置为 false 将任何序列化程序设置为 null 并将 RedisTemplate 与原始字节数组一起使用。

注意:模板要求所有键都是非空的。但是,只要底层序列化程序接受它们为空,值就可以为空。

对于需要某个模板视图的情况,将该视图声明为依赖项并注入模板。容器自动执行转换,消除了 opsFor[X] 调用,如下例所示:

XML 配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:p="http://www.springframework.org/schema/p"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
    https://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="jedisConnectionFactory" 
    class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" 
    p:use-pool="true"/>
  
  <!-- redis template 定义 -->
  <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" 
    p:connection-factory-ref="jedisConnectionFactory"/>
  
  <!-- ... -->
</beans>

Java 代码:

public class Example {

  // 注入实际模板
  @Autowired
  private RedisTemplate<String, String> template;

  // 将模板作为 ListOperations 注入
  @Resource(name="redisTemplate")
  private ListOperations<String, String> listOps;

  public void addLink(String userId, URL url) {
    listOps.leftPush(userId, url.toExternalForm());
  }
}
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号