叮咚,Redis OM对象映射框架来了!

一、Redis OM来了

11月23日,redis宣布了四个新的Redis高级客户端的预览版,将这些库称为Redis OM(Redis Object Mapping)-----对象映射。
其框架以强大的 Spring Data Redis (SDR) 框架为基础,提供一个高级抽象工具箱,通过我们熟悉的面向对象的编程来表示。
其目的是专注于对象映射和流畅查询,即尽可能轻松的使用 Redis 。它可以透明地将域对象保存在 Redis 中,并且能使用流畅的、以语言为中心的 API 查询它们。
Redis OM 的一些高级功能依赖于来自两个可用 Redis 模块的核心功能:RediSearch和RedisJSON。

如下,推出了对 .NET、Node.js、Python 和 Java (Spring) 语言的支持

  1. Redis OM for .NET
  2. Redis OM for Node.js
  3. Redis OM for Python
  4. Redis OM for Spring

二、了解

以下是Redis OM for Spring为例通过查看源码提供的demo:rds-documents模块模拟来更近一步的了解Redis OM

官方包下载:redis-om-spring-main
开发环境:JDK11
springboot版本:2.6.0-M1

:Redis OM的抽象构建在spring-data-redis (SDR)之上

代码解析

1、对象映射

通过注解
@Document 将 Spring Data 对象映射到 Redis JSON
@Indexable 声明式搜索
@Searchable 全文检索索引
@RequiredArgsConstructor(staticName = "of") 表示通过方法of()来构建对象
@NonNull不能为空
补充:@Bloom 以非常快的速度确定一个值是否在集合中

/*** 地点*/
@Data
@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Document
public class Address {@Idprivate String id;@NonNull@Searchableprivate String addressName;@Indexedprivate Set<String> addressTags = new HashSet<String>();@NonNullprivate String picUrl;@NonNull@Indexedprivate Point location;@NonNull@Indexedprivate Integer yearRegister;private boolean publiclyListed;
}

2、对象的持久化

通过拓展接口RedisDocumentRepository来进行CRUD操作,类似JPA方式的自定义查询。

其通过继承spring data里的接口:PagingAndSortingRepository

/*** 通过继承RedisDocumentRepository来进行CRUD操作以及类似JPA方式的自定义查询*/
public interface AddressRepository extends RedisDocumentRepository<Address, String> {// find one by property 通过addressName查询Optional<Address> findOneByAddressName(String name);// find by tag field, using JRediSearch "native" annotation@Query("@tags:{$tags}")Iterable<Address> findByTags(@Param("tags") Set<String> tags);}

查询定义

  • 通过直接从方法名称派生查询。
  • 通过使用@Query或@Aggregation注释使用手动定义的查询。

3、与spring的集成及使用

通过注解@EnableRedisDocumentRepositories扫描指定包下带有@Document注释的对象,注入RedisDocumentRepository,可用CRUD操作自定义查询@Document注释的Bean

/*** 启动入口*/
@SpringBootApplication
@Configuration
@com.redis.om.spring.annotations.EnableRedisDocumentRepositories(basePackages = "com.redis.documents.*")
public class RdsDocumentsApplication {public static void main(String[] args) {SpringApplication.run(RdsDocumentsApplication.class, args);}...
}

4、保存数据

  @Autowiredprivate AddressRepository addressRepository;@BeanCommandLineRunner loadTestData() {return args -> {//删除数据addressRepository.deleteAll();//save保存数据addressRepository.save(Address.of("广州市唯品会地址", "https://www.vip.com/?wq=1", new Point(113.124500, 23.640160), 2000));addressRepository.save(Address.of("广州市百度地址", "https://www.baidu.com/", new Point(113.235614, 23.342545), 2020));};}

5、接口调用

@RestController
@RequestMapping("/api/address")
public class AddressController {@Autowiredprivate AddressRepository addressRepository;@GetMapping("name/{name}")Optional<Address> byAddressName(@PathVariable("name") String name) {return addressRepository.findOneByAddressName(name);//方法名称派生查询}@GetMapping("tags")Iterable<Address> byTags(@RequestParam("tags") Set<String> tags) {return addressRepository.findByTags(tags);//方法名称派生查询}@GetMapping("all")Page<Address> all(Pageable pageable) {return addressRepository.findAll(pageable);//spring data自带}@GetMapping("{id}")Optional<Address> byId(@PathVariable("id") String id) {return addressRepository.findById(id);//spring data自带}
}

6、Maven依赖

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

参考文档

官方介绍:https://redis.com/blog/introducing-redis-om-client-libraries/
git源码:https://github.com/redis/redis-om-spring

总结

Redis OM发布预览版后,引来各程序员们广泛的关注,大家称其为Redis界的Hibernate
有人说,Springboot Redis已经很简洁,此对象映射也是相当于一个Map,新开发一个框架,也是多此一举。
也有人说,能让redis的使用更加简易,更加的符合语言的规范,正所谓语言的优美,其重要的一部分在于它的规范性,是一个很好的进步。

官方解释,
目前redis客户端确实已经支持 Redis各种各样的工具,包括缓存、分布式锁、消息队列等
而此新框架的生成在于并非每个人都有时间自己重新封装这些工具。不是每个人都有时间来将 Redis 哈希映射到 Java 类(反之亦然)。通过构建Redis OM,这样即使大家没有时间使用 Redis 提供的核心数据结构编写自己的抽象,也可以获得 Redis 的性能。

我的想法是,每个框架的生成,都是一个思想的汇总表示,可以给我们的开发提供更多的技术选择。
而技术的进步,也正是因为这些可爱的程序员们在不断拓展和精益求精。

由于之前在公司分享了redis的基础与进阶,打算补充完最后一节Redis相关的分布式锁,然而看到Redis OM的预览版,更让我充满期待,故分享出来。

让我们一起期待正式版的发布,期待它更完整的功能!

作者:yana

叮咚,Redis OM对象映射框架来了相关推荐

  1. 可能是.NET领域性能最好的对象映射框架——Mapster

    我之前文章提到过 MediatR 的作者 Jimmy Bogard,他也是大名鼎鼎的对象映射框架 AutoMapper 的作者.AutoMapper 的功能强大,在 .NET 领域的开发者中有非常高的 ...

  2. 对象映射框架MapStruct与orika的简单使用

    对象映射框架MapStruct与orika 1.介绍 1.1 MapStruct MapStruct 是一个 Java注释处理器,用于生成类型安全的 bean 映射类. 您所要做的就是定义一个映射器接 ...

  3. 重磅发布:Redis 对象映射框架来了,操作大大简化!

    欢迎关注方志朋的博客,回复"666"获面试宝典 前言 最近,Redis 官方博客宣布推出四个用于 Redis 的客户端工具库:Redis OM(对象映射库,Object Mappi ...

  4. java的对象对象映射_Java对象到对象映射器

    java的对象对象映射 我在该项目上使用了Dozer一段时间. 但是,最近我遇到了一个非常有趣的错误,这促使我环顾四周,并尝试使用其他"对象到对象"映射器. 这是我找到的工具列表: ...

  5. Java对象到对象映射器

    我在该项目上使用了Dozer一段时间. 但是,最近我遇到了一个非常有趣的错误,它促使我环顾四周,并尝试使用其他"对象到对象"映射器. 这是我找到的工具列表: 推土机:推土机是Jav ...

  6. android对象关系映射框架ormlite之一对多(OneToMany)

    前两天,用ormlite对单张表进行了基本的操作,但是,我们知道通常情况对于单张表格进行操作在实际情况中很前两天不现实,那么ormlite能否像Hibenate那样实现多张表之间的一对多,多对多(即O ...

  7. 开源实体映射框架EmitMapper介绍

    综述 EmitMapper是一个开源实体映射框架,地址:http://emitmapper.codeplex.com/. EmitMapper映射效率比较高,接近硬编码.EmitMapper采用emi ...

  8. MyBatis简介——半自动的持久化层框架(SQL映射框架)|| 支持定制化sql

    MyBatis简介 1.MyBatis:和数据库进行交互:持久化层框架(SQL映射框架): 1).从原始的JDBC-----dbutils(QueryRunner)-------JdbcTemplat ...

  9. MyBatis是持久化层框架(SQL映射框架)-操作数据库

    MyBatis是持久化层框架(SQL映射框架)-操作数据库 1.环境搭建 1).创建一个java工程: 2).创建测试库,测试表,以及封装数据的javaBean,和操作数据库的dao接口 创建表:自己 ...

最新文章

  1. 创建mysql数据库,在新数据库中创建表,再尝试删除表
  2. observable_在Spring MVC流中使用rx-java Observable
  3. javascript中==与===的区别
  4. 怎么判断应用程序是多少位运行的
  5. 原来C语言还可以这样实现“泛型编程”!
  6. C++:13---多态和虚函数表
  7. Spring Boot中表格的请求以及表格界面的显示
  8. python3读取本地_如何使用Python读取本地存储?
  9. linux zookeeper 端口号,linux下zookeeper安装
  10. 高性能的服务器的架设
  11. struts2框架之拦截器(参考第二天学习笔记)
  12. Symantec Backup Exec 2012修改显示语言
  13. 贷前调查必须采集的十大客户信息
  14. er ubnt x设置教程_ubnt edgerouter er-x 路由器怎么设置
  15. “前首富”牟其中:欠的人情太多,要留着命来还
  16. 电商一定是一元化结构
  17. Excel的INDEX函数用法及其实例
  18. Pytorch note
  19. Mybatis---ResultMap及分页
  20. Warframe圣殿突袭打法配卡详解

热门文章

  1. VUE—移动端手机号正则验证,不正确显示‘请输入正确手机号’,若正确跳转到发送验证码(图文详情)
  2. 42表盘直径是从哪测量_表盘直径多大才合适?如何测量手表表盘的直径?
  3. Nginx + Frp + Let'sEncrypt 泛域名证书
  4. Photoshop批量导入笔刷、形状、渐变、图层样式、图案的方法
  5. Unity高级功能—制作自己的天空盒并添加到场景
  6. vim设置所有文件自动换行.
  7. html中的text标签怎么设置自动换行,textarea自动换行如何设置
  8. Unity3D《太空战机》如何给战机加上防护罩
  9. 传感器433报文协议
  10. 【调剂】沈阳理工大学关于2023年硕士研究生招生部分专业拟接收调剂的说明