重磅发布:redis对象映射框架来了,操作大大简化!(代码片段)

Java知音_ Java知音_     2023-03-09     556

关键词:

点击关注公众号,实用技术文章及时了解

前言

最近,Redis 官方博客宣布推出四个用于 Redis 的客户端工具库:Redis OM(对象映射库,Object Mapping),目标是让应用程序尽可能地容易使用 Redis 和 Redis 模块。

四个客户端工具库分别对应四种编程语言

  • Redis OM for .NET:.Net 平台的 Redis OM,依赖 StackExchange.Redis 实现。借助 Redis OM .NET 可以实现对象操作的方式操作 Redis 数据,脱离 key/value 的操作方式。查询支持大部分.Neter 最爱的 LINQ。

  • Redis OM for Node.js: 为 TypeScript 和 JavaScript 提供一级支持

  • Redis OM for Python: 原生集成流行的 FastAPI 框架,将 FastAPI 与 Redis 结合可构建高性能 Web 服务。Redis OM Python 库还支持同步和异步使用

  • Redis OM for Spring: 原生集成 Spring,扩展了 Spring Data Redis(提供熟悉的界面),添加了对 RedisBloo 的部分支持。

换言之,在之后的开发中,开发者可以通过 Redis OM 库直观地将域对象 (domain objects) 保存在 Redis,然后使用流畅的、以语言为中心的 API 进行查询。

Redis OM for Spring

作为一枚java开发,我们重点了解一下 Redis OM for Spring。

简介

Redis OM for Spring提供了强大的存储库和基于强大的 Spring Data Redis (SDR) 框架构建的自定义对象映射抽象。

  • @Document 将 Spring Data 模型映射到 Redis JSON 文档的注释

  • @RedisHash通过以下方式增强 SDR @EnableRedisEnhancedRepositories

    • 使用 Redis 的原生搜索引擎 (RediSearch) 进行二级索引

    • 将ULID用于带@Id注释的字段

  • RedisDocumentRepository 自动实现存储库接口以实现复杂的查询功能,使用 @EnableRedisDocumentRepositories

  • 声明性搜索索引通过 @Indexable

  • 全文检索索引通过 @Searchable

  • @Bloom 注释可以非常快速地确定一个值是否在集合中。

实践

我们通过案例来了解一下Redis OM for Spring的具体用法

相关依赖

目前快照地址

<repositories>
    <repository>
      <id>snapshots-repo</id>
      <url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
    </repository>
  </repositories>

pom文件

<dependency>
  <groupId>com.redis.om</groupId>
  <artifactId>redis-om-spring</artifactId>
  <version>$version</version>
</dependency>

SpringBoot配置

package com.redis.om.documents;

import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.geo.Point;

import com.redis.om.documents.domain.Company;
import com.redis.om.documents.repositories.CompanyRepository;

@SpringBootApplication
@Configuration
@EnableRedisDocumentRepositories(basePackages = "com.redis.om.documents.*")
public class RomsDocumentsApplication 

  @Autowired
  CompanyRepository companyRepo;

  @Bean
  CommandLineRunner loadTestData() 
    return args -> 
      companyRepo.deleteAll();

      // 创建两组实体域 redis & microsoft
      Company redis = Company.of(
        "Redis", "https://redis.com", new Point(-122.066540, 37.377690), 526, 2011 
      );
      redis.setTags(Set.of("fast", "scalable", "reliable"));

      Company microsoft = Company.of(
        "Microsoft", "https://microsoft.com", new Point(-122.124500, 47.640160), 182268, 1975 
      );
      microsoft.setTags(Set.of("innovative", "reliable"));

      // 将创建的两组实体域持久化
      companyRepo.save(redis);
      companyRepo.save(microsoft);
    ;
  

  public static void main(String[] args) 
    SpringApplication.run(RomsDocumentsApplication.class, args);
  

整体使用上非常清晰,重点是类上开启@EnableRedisDocumentRepositories注解,就可以注入可用于 CRUD 操作和自定义查询的@Document存储库 bean。

实体对象映射

这个我们使用SpringBoot非常熟悉,Redis OM Spring 也提供@Document注释来为我们将模型保存为 JSON 文档

package com.redis.om.documents.domain;

import java.util.HashSet;
import java.util.Set;
import org.springframework.data.annotation.Id;
import org.springframework.data.geo.Point;
import com.redis.om.spring.annotations.Document;
import com.redis.om.spring.annotations.Searchable;
import lombok.*;

@Data
@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Document
public class Company 
  @Id private String id;
  @Searchable private String name;
  @Indexed private Point location;
  @Indexed private Set<String> tags = new HashSet<String>();
  @Indexed private Integer numberOfEmployees;
  @Indexed private Integer yearFounded;
  private String url;
  private boolean publiclyListed;

  // ...

添加@Document注释即可,定义格式省去了自己做转换,Redis OM 库直观地将域对象 (domain objects) 保存在 Redis上。

接口使用

可以使用流畅的、以语言为中心的 API 进行查询,更符合我们平常的编写习惯,看一组官方给的实现案例:

package com.redis.om.documents.repositories;

import java.util.*;

import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Point;
import org.springframework.data.repository.query.Param;

import com.redis.om.documents.domain.Company;
import com.redis.om.spring.annotations.Query;
import com.redis.om.spring.repository.RedisDocumentRepository;

public interface CompanyRepository extends RedisDocumentRepository<Company, String> 
  // find one by property
  Optional<Company> findOneByName(String name);

  // geospatial query
  Iterable<Company> findByLocationNear(Point point, Distance distance);

  // find by tag field, using JRediSearch "native" annotation
  @Query("@tags:$tags")
  Iterable<Company> findByTags(@Param("tags") Set<String> tags);

  // find by numeric property
  Iterable<Company> findByNumberOfEmployees(int noe);

  // find by numeric property range
  Iterable<Company> findByNumberOfEmployeesBetween(int noeGT, int noeLT);

  // starting with/ending with
  Iterable<Company> findByNameStartingWith(String prefix);

总结

整体上,Redis OM Spring为我们节省了很多项目中整合Redis的步骤,可以更好的面向对象编程,省去不少数据格式的转换,同时也提供了我们更熟悉的API接口,大大的赞,不过这轮操作下来,Redis更像一个数据库了。

注意:Redis OM Spring 目前仅适用于 Jedis,同时 Redis OM 的一些高级特性依赖于两个可用 Redis 模块的核心特性:RediSearch和RedisJSON。

你对这个Redis 对象映射库期待吗?

地址:https://github.com/redis/redis-om-spring

推荐

主流Java进阶技术(学习资料分享)

Java面试题宝典

加入Spring技术开发社区

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!

重磅官宣:redisom发布,redis对象映射框架来了……(代码片段)

RedisOM前几天,Redis发布了对象映射框架:RedisOM,即:ObjectMapping,不过目前它还是预览版。当然,RedisOM的横空出世不仅仅是对象映射,它更多的是提供一个高级的抽象类库,目标就是让开发人员更... 查看详情

重磅官宣:redisom发布,redis对象映射框架来了!!(代码片段)

点击关注公众号,Java干货及时送达RedisOM前几天,Redis发布了对象映射框架:RedisOM,即:ObjectMapping,不过目前它还是预览版。当然,RedisOM的横空出世不仅仅是对象映射,它更多的是提供一个高级的... 查看详情

springboot+querydsl框架,大大简化复杂查询操作(代码片段)

...章及时了解概述本篇博客主要将介绍的是利用springquerydsl框架实现的服务端查询解析和实现介绍。查询功能是在各种应用程序里面都有应用,且非常重要的功能。用户直接使用的查询功能往往是在我们做好的UI界面上进行查询... 查看详情

springboot+querydsl框架,大大简化复杂查询操作!!(代码片段)

概述本篇博客主要将介绍的是利用springquerydsl框架实现的服务端查询解析和实现介绍。查询功能是在各种应用程序里面都有应用,且非常重要的功能。用户直接使用的查询功能往往是在我们做好的UI界面上进行查询,UI会... 查看详情

博学谷学习记录超强总结,用心分享|springcache常用注解介绍+集成redis

SpringCache缓存框架实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。SpringCache缓存框架实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功... 查看详情

21-java-hibernate框架

...Hibernate框架是Java持久层的框架,是GavinKing发明的,2001年发布的,JBoss公司的产品,2003年进入市场。    Hibernate是基于对象来操作数据库的,但他最终还是被转换为SQL去进行操作    Hibernate对JDBC进行封装,简化数据库访... 查看详情

androidorm框架--greendao简介(代码片段)

...发的成本。把我们从纷繁复杂的sql世界回归到熟悉的面向对象的世界。简单介绍下ORM的概念,其全称叫做对象关系映射(ObjectRelationMappingÿ 查看详情

pythonorm框架:sqlalchemy(代码片段)

 ORM,对象关系映射,即ObjectRelationalMapping的简称,通过ORM框架将编程语言中的对象模型与数据库的关系模型建立映射关系,这样做的目的:简化sql语言操作数据库的繁琐过程(原生sql的编写及拼接等),转而直接使用对象模型... 查看详情

如何简化 postgres 数据和 java 对象/json 有效负载之间的映射(反之亦然)

...implifymappingbetweenpostgresdataandjavaobject/jsonpayload(andviceversa)【发布时间】:2021-02-0312:42:19【问题描述】:该项目是简单的restapi(springboot框架),其中交换json消息并将有效负载保存到Postgres数据库。实 查看详情

框架2

...为什么要用?原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提交事务7.关闭Session8.关闭SesstionFactory为什么要用:1.对JDBC访问数据库的代码做了封装,大大简化了... 查看详情

eunomia-bpf项目重磅开源!ebpf轻量级开发框架来了

近日,在 2022云栖大会龙蜥峰会eBPF&Linux稳定性专场上,来自eBPF技术探索SIGMaintainer、浙江大学的郑昱笙分享了《eunomia-bpf:eBPF轻量级开发框架》技术演讲,以下为本次演讲内容:大家好!我是来自浙江... 查看详情

如何用注解简化ssh框架

...声明table的名称publicclassNews{@Id//声明此列为主键,作为映射对象的标识符/***@GeneratedValue注解来定义生成策略*GenerationType.TABLES当前主键的值单独保存到一个数据库的表中* 查看详情

hiberante知识点梳理

...操作进行了简化,并且将数据库表中的字段和关系映射为对象,简化了对数据库的操作。使用方法读取并解析配置文件读取并解析映射信息,创建SessionFactory打开Sesssion创建事务Transation持久化操作提交事务关闭Session关闭SesstionFact... 查看详情

orm和jdbc有何不一样

ORM是对象和关系型数据库映射,是把Java中的JavaBean对象和数据库表进行映射,使数据库表中的记录和JavaBean对象一一对应,从而大大简化原来直接使用JDBC时,手工拼写SQL带来的不便。ORM通过配置文件,使数据库表和JavaBean类对应... 查看详情

框架学习笔记之hibernate

... 学习该框架的编程思想是 ORM(ObjectRelationalMapping)即对象关系映射是思想,进而对数 查看详情

java面试之hibernate

...更改的高效。114.什么是ORM框架?ORM(ObjectRelationMapping)对象关系映射,是把数据库中的关系数据映射成为程序中的对 查看详情

java面试之hibernate

...更改的高效。114.什么是ORM框架?ORM(ObjectRelationMapping)对象关系映射,是把数据库中的关系数据映射成为程序中的对 查看详情

hdc2022重磅发布“鸿蒙赋能全家桶”,开发者的新时代要来了?

HDC2022重磅发布“鸿蒙赋能全家桶”,开发者的新时代要来了?前言11月4日在华为开发者大会2022(HDC)现场宣布发布“鸿蒙开发者赋能7大套件”,代表着鸿蒙生态新的征程。而早在今年7月的时候,华为Harmo... 查看详情