Ohhnews

分类导航

$ cd ..
Spring Blog原文

Spring Data 2026.0.0-M2 发布:引入 Redis 注解监听与增强型批量操作

#spring data#redis#mongodb#后端开发#数据库

我谨代表团队及所有贡献者,非常高兴地宣布 2026.0.0 发布序列的第二个里程碑版本。

基于注解的 Redis Pub/Sub 监听器

Spring Data Redis 现在支持基于 Spring Messaging 构建的、用于 Pub/Sub 的注解驱动监听器端点。

$ java
@Component
public class MyService {

  @RedisListener(topic = "my-channel")
  public void processMessage(String data) { ... }
    
  @RedisListener("my-order-channels*")
  public void processOrder(Order order, @Header("pattern") Topic pattern) {
    ...
  }
}

注解驱动的监听器需要在配置类上通过 @EnableRedisListeners 启用。监听器方法将关联到您的主 RedisMessageListenerContainer Bean。注解方法可以指定 MIME 类型(例如 @RedisListener(topic = "my-channel", consumes = "application/json")),从而为监听器选择特定的 MessageConverter。默认情况下,RedisListenerEndpointRegistrar 会根据类路径中是否存在 Jackson、Kotlin Serialization 或 Gson 来自动注册相应的 JSON 转换器。

条件化 SET 和 DEL

对于 Redis 8.4 用户,现已提供比较并设置(compare-and-set)以及比较并删除(compare-and-delete)功能。通过为 SETDEL 附加基于值的条件,您无需额外的网络往返即可实现这些操作。

为了保持命令的一致性,我们为 setdelete 操作引入了一种函数式方法,允许您配置命令条件和过期时间:

使用预期值比较及 TTL 设置值:

$ java
valueOps.set(key, newValue, spec -> spec.ifEquals().value(expectedValue).expire(Duration.ofSeconds(10)));

使用摘要(digest)比较设置值,并保留现有 TTL:

$ java
valueOps.set(key, newValue, spec -> spec.ifEquals().digest(expectedHex16Digest).expiration(Expiration.keepTtl()));

仅在当前值与您传入的值不相等时执行删除:

$ java
redisTemplate.delete(key, it -> it.ifNotEquals().value(value));

修订后的 MongoDB Bulk API

我们简化了处理批量变更的方式。新的 MongoOperations.bulkWrite 支持一次性混合执行插入、更新和删除操作。如果您使用的是 MongoDB 8.0 或更高版本,该功能支持跨多个集合同时操作。如果使用的是早期版本,您仍然可以使用该新 API 进行单集合的批量写入。

$ java
Bulk bulk = Bulk.create(builder -> builder.inCollection(Jedi.class, spec -> spec
        .insert(new Jedi("Luke", "Skywalker"))
        .insert(new Jedi("Leia", "Princess"))
        .updateOne(where("firstname").is("Leia"), update("lastname", "Organa")))
    .inCollection(Sith.class, spec -> spec.upsert(where("name").is("Darth Sidious"), update("realName", "Palpatine")))
);

BulkWriteResult result = operations.bulkWrite(bulk, BulkWriteOptions.ordered());

展望未来,我们计划在 4 月发布候选版本(Release Candidate),并在 5 月发布正式版本(GA)。为了方便起见,Spring Boot 4.1 M3 将升级到此里程碑版本。祝升级顺利,如有任何想法或遇到问题,欢迎随时反馈。

您可以在我们的 发行说明 中查看更多详细信息。

2026.0.0-M2