Redis OM
前几天,Redis 发布了对象映射框架:Redis OM,即:Object Mapping,不过目前它还是预览版。
当然,Redis OM 的横空出世不仅仅是对象映射,它更多的是提供一个高级的抽象类库,目标就是让开发人员更简单、方便的使用 Redis 数据。
Redis OM 支持的第一个抽象就是:对象映射,支持基于对象的 Redis 数据持久化、流式查询操作。
目前只支持 4 种开发语言:
Redis OM for Spring(Java)
Redis OM for .NET
Redis OM for Node.js
Redis OM for Python
相信后续会支持更多语言。
Redis OM for Spring
Redis OM for Spring 是对咱们 Java 的支持的对象映射类库。
栈长看了官方仓库源码说明,它其实就是扩展了 Spring Data Redis,可以提供更好的数据搜索、文档模型等,可以理解为 MyBatis-plus 和 MyBatis 的关系,相辅相成的。
快速开始
Redis OM 可以和 Spring Boot 快速集成。
Maven 依赖:
<dependency> <groupId>com.redis.om.spring</groupId> <artifactId>redis-om-spring</artifactId> <version>${version}</version> </dependency>
Spring Boot 配置:
1.@SpringBootApplication @Configuration @EnableRedisDocumentRepositories(basePackages = "cn.javastack.documents.*") public class RdsDocumentsApplication { public static void main(String[] args) { SpringApplication.run(RdsDocumentsApplication.class, args); } }
使用 @EnableRedisDocumentRepositories 注释扫描 @Document 注解的 Spring 模型,通过注入实现 RedisDocumentRepository 的 repositories bean,后面就可以进行 CRUD 和自定义查询操作了。
Spring Boot 基础就不介绍了,学习笔记分享给你,实战仓库源码:https://github.com/javastacks/spring-boot-best-practice
对象模型映射
Redis OM 也是通过注解的方式映射对象模型,如下面示例:
/** * 商户操作仓库 * 作者:栈长 * 来源公众号:Java技术栈 */ @Data @RequiredArgsConstructor(staticName = "of") @AllArgsConstructor(access = AccessLevel.PROTECTED) @Document public class Merchant { @Id private String id; @Searchable private String name; @Indexed private Point location; @Indexed private Set<String> sites = new HashSet<String>(); @Indexed private Integer numberOfEmployees; @Indexed private Integer yearFounded; private String url; private boolean publiclyListed; // ... }
注解说明:
@Document: 将 Spring Data 模型映射到 Redis JSON 文档;
@Id: 使用 ULID 取代传统的 UUID 主键生成策略,生成速度更快、更易用;
@Searchable: 声明全文搜索索引;
@Indexable: 声明索引;
定义仓库
Spring Data Redis 这里就不详细介绍了,栈长之前写过一些,不会用的可以关注公众号:Java技术栈,在公众号菜单栏中阅读,栈长都已经整理好了。
使用 Repository 仓库也很简单,继承 RedisDocumentRepository 就行了:
/** * 持久化数据 * 作者:栈长 * 来源公众号:Java技术栈 */ @Bean CommandLineRunner initData() { return args -> { // 清空数据 merchantRepo.deleteAll(); Merchant javastack1 = Merchant.of( "javastack1", "https://javastack.cn", new Point(-122.066540, 37.377690), 526, 2011 // ); javastack1.setTags(Set.of("fast", "scalable", "reliable")); Merchant javastack2 = Merchant.of( "javastack2", "https://javastack.cn", new Point(-122.124500, 47.640160), 182268, 1975 // ); javastack2.setTags(Set.of("innovative", "reliable")); // 持久化数据 merchantRepo.save(javastack1); merchantRepo.save(javastack2); }; }
数据查询:
/** * 查找单个商户 * 作者:栈长 * 来源公众号:Java技术栈 */ @GetMapping("name/{name}") Optional<Merchant> byName(@PathVariable("name") String name) { return merchantRepo.findMerchantByName(name); }1.
Redis OM 全程都是通过对象的方式,更好的面向对象编程的思想,不需要多余的对象转换操作了。
总结
Redis OM 对象映射只是扩展了 Spring Data Redis,它不能脱离 Spring Data Redis,更不能脱离其他 Redis 客户端,它只是一个更高层级的抽象库而已,可以使我们更简单、方便的使用 Redis。
可以简单的说它是 Redis 界的 Hibernate,真香!
现在还是预览版,功能也不全,我们还是期待它的正式发布吧,栈长会第一时间跟进和体验分享。
更多的细节可以参考:
https://redis.com/blog/introducing-redis-om-client-libraries/
https://github.com/redis/redis-om-spring
好了,今天的分享就到这里了,后面栈长会分享更多好玩的 Java 技术和最新的技术资讯,关注公众号Java技术栈第一时间推送,我也将主流 Java 面试题和参考答案都整理好了,在公众号后台回复关键字 "面试" 进行刷题。
最后,你觉得 Redis OM 怎么样?欢迎留言讨论!
这真是个好框架,欢迎转发、分享给更多 Javaer 小伙伴们吧!