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 配置:
@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...
对象模型映射
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技术栈
*/
public interface MerchantRepository extends RedisDocumentRepository<Merchant, String> {
// 查找单个商户
Optional<Merchant> findMerchantByName(String name);
}
使用仓库
先注入 MerchantRepo 仓库:
@Autowired
MerchantRepository merchantRepo;
然后就可以持久化数据和查询操作了。
数据持久化:
/**
* 持久化数据
* 作者:栈长
* 来源公众号: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);
}
Redis OM 全程都是通过对象的方式,更好的面向对象编程的思想,不需要多余的对象转换操作了。
总结
Redis OM 对象映射只是扩展了 Spring Data Redis,它不能脱离 Spring Data Redis,更不能脱离其他 Redis 客户端,它只是一个更高层级的抽象库而已,可以使我们更简单、方便的使用 Redis。
可以简单的说它是 Redis 界的 Hibernate,真香!
现在还是预览版,功能也不全,我们还是期待它的正式发布吧,栈长会第一时间跟进和体验分享。
更多的细节可以参考:
好了,今天的分享就到这里了,后面栈长会分享更多好玩的 Java 技术和最新的技术资讯,关注公众号Java技术栈第一时间推送,我也将主流 Java 面试题和参考答案都整理好了,在公众号后台回复关键字 "面试" 进行刷题。
最后,你觉得 Redis OM 怎么样?欢迎留言讨论!
这真是个好框架,欢迎转发、分享给更多 Javaer 小伙伴们吧!
版权声明: 本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,抄袭者一律举报+投诉,并保留追究其法律责任的权利。
近期热文推荐:
1.1,000+ 道 Java面试题及答案整理(2021最新版)
2.别在再满屏的 if/ else 了,试试策略模式,真香!!
3.卧槽!Java 中的 xx ≠ null 是什么新语法?
4.Spring Boot 2.6 正式发布,一大波新特性。。
觉得不错,别忘了随手点赞+转发哦!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。