尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Redis OM Spring 对象映射实战:用 @Document 注解将实体存储为 JSON 文档

Redis OM Spring 对象映射实战:用 @Document 注解将实体存储为 JSON 文档 Redis OM Spring 对象映射实战用 Document 注解将实体存储为 JSON 文档【免费下载链接】redis-om-springSpring Data Redis extensions for better search, documents models, and more项目地址: https://gitcode.com/gh_mirrors/re/redis-om-springRedis OM Spring 对象映射的核心能力就是让你用一行Document注解把普通的 Java 实体直接存储为 Redis 中的 JSON 文档。本文是一份面向新手的 Redis OM Spring 实战指南带你从零理解Document注解的用法、JSON 文档存储的原理、配套的RedisDocumentRepository仓储接口以及如何用最少的代码完成全文本搜索与二级索引快速上手 Redis 对象映射开发。为什么需要 Redis OM Spring 对象映射传统方式下把 Java 对象存进 Redis你通常要自己写序列化逻辑手动拼 JSON、手动建索引、手动拼查询语句。一旦实体字段变多代码很快变得又臭又长。Redis OM Spring 改变了这一切。它是基于 Spring Data Redis 的扩展框架核心思路是注解即映射你只需在实体类上打上Document注解框架就会自动完成三件事存储借助 RedisJSON 模块把实体序列化为 JSON 文档存入 Redis索引借助 RediSearch 自动创建二级索引支持全文检索查询通过方法名派生查询、Query注解查询零手写查询语句也就是说对象映射、JSON 文档存储、索引创建、搜索查询全部由框架一站式搞定。Document 注解用法三步定义一个 JSON 文档实体 我们先看最核心的Document注解。它的源码定义在 Document.java标注在类上即可生效常用属性包括属性作用默认值value文档集合名keyspace不填则用类名类简单名indexNameRediSearch 索引名称不填自动生成自动生成timeToLive文档自动过期时间秒-1 表示永不过期-1async是否异步执行索引操作falselanguage全文搜索的默认语言ENGLISH最快配置方法用 Document 注解写一个 Person 实体看官方示例 roms-documents 里的 Person.javaDocument public class Person { Id private String id; TextIndexed private String firstName; TextIndexed private String lastName; TagIndexed private String email; }只需要三步类上打Document—— 告诉框架这个类是 JSON 文档实体主键加Id—— 声明文档唯一标识字段加索引注解——TextIndexed做全文索引TagIndexed做精确匹配标签存储到 Redis 后数据是这样一条 JSON 文档{id:01HX...,firstName:张三,lastName:李四,email:zhangexample.com}这就是 Redis OM Spring 对象映射最直观的体验Java 对象 ↔ JSON 文档的转换完全透明。更复杂的实体怎么映射看看 Company 的例子再看官方示例里的 Company.java它展示了对象映射实战中的进阶用法Searchable对文本字段做全文搜索如公司名nameIndexed对普通字段建索引支持数字、集合、地理位置CreatedDate/LastModifiedDate自动审计时间戳比如SetString tags用Indexed注解后就能直接按标签查询公司Point location用Indexed注解后还能做地理位置附近搜索。一个注解就解锁一种查询能力非常省事。如何让 Redis 自动创建 JSON 文档索引️只有Document还不够你还需要开启文档仓储扫描。用EnableRedisDocumentRepositories注解源码见 EnableRedisDocumentRepositories.java告诉框架扫描哪些包Configuration EnableRedisDocumentRepositories(basePackages com.example.repositories) public class RedisConfig { }启动时框架会自动为所有带Document的实体创建 RediSearch 索引并随数据增删改实时维护。索引的详细配置前缀、过滤条件、语言等都可以在Document注解里声明完整属性说明见 Document.java 源码。RedisDocumentRepository零 SQL 的 JSON 文档查询 实体定义好之后查询就交给仓储接口。你只需要继承框架自带的RedisDocumentRepositoryT, ID接口定义见 RedisDocumentRepository.java其余交给 Spring Data 的方法名派生机制。方法名派生查询像写英语一样写查询看官方示例的 PersonRepository.javapublic interface PersonRepository extends RedisDocumentRepositoryPerson, String { ListPerson findByLastNameAndFirstName(String lastName, String firstName); }一行接口方法声明就完成了按姓氏和名字查找的查询无需任何实现类。框架会自动把方法名翻译成 RediSearch 查询语句。再来看功能更全的 CompanyRepository.javapublic interface CompanyRepository extends RedisDocumentRepositoryCompany, String { OptionalCompany findOneByName(String name); IterableCompany findByLocationNear(Point point, Distance distance); // 附近搜索 IterableCompany findByNumberOfEmployeesBetween(int low, int high); // 范围查询 IterableCompany findByNameStartingWith(String prefix); // 前缀匹配 }地理搜索、数值范围、前缀匹配……这些在其他数据库里要写一堆查询语句的操作在 Redis OM Spring 对象映射体系下都只是一行方法签名。灵活查询Query 注解直接写 RediSearch 语法当方法名表达不了复杂逻辑时可以像 CompanyRepository.java 里那样直接用Query注解写原生查询Query(tags:{$tags}) IterableCompany findByTags(Param(tags) SetString tags);Query注解的更多用法可以参考 Query.java 与 RediSearchQuery.java 源码。仓储的进阶能力字段级更新与过期控制 ⏱️除了常规 CRUDRedisDocumentRepository还提供了面向 JSON 文档的进阶能力updateField()只更新文档中的某个字段不必整条覆盖getFieldsByIds()按 ID 批量提取指定字段值省去加载整个实体getExpiration()/setExpiration()查询与设置文档 TTL 过期时间deleteById(id, path)按 JSONPath 删除文档中的局部结构getIds()只取所有 ID不加载完整数据这些方法直接基于 RedisJSON 的底层命令实现既高效又贴合 JSON 文档存储的天然结构。完整实战从实体到 REST 接口一条龙打通 官方示例 roms-documents 提供了一个完整的可运行项目麻雀虽小五脏俱全。想动手实验可以从仓库根目录用 Gradle 直接启动./gradlew :demos:roms-documents:bootRun项目启动后自动在 8080 端口提供 REST 接口。看 PersonController.java 里的接口实现你会发现连控制器都极度精简——所有查询逻辑全部来自仓储接口的方法声明。RestController RequestMapping(/api/persons) public class PersonController { Autowired PersonRepository repository; GetMapping(name/{last}/{first}) ListPerson byLastAndFirst(PathVariable String last, PathVariable String first) { return repository.findByLastNameAndFirstName(last, first); } }项目里还包含了 Company、Event 等多种实体示例覆盖文本搜索、标签查询、时间范围查询、地理搜索等常见场景是学习 Redis OM Spring 对象映射的最佳参考。Event 实体的日期范围查询示例见 Event.java 与其控制器 EventController.java。快速上手清单4 步完成你的第一个 JSON 文档 ✅帮你把上面的内容浓缩成一份速查清单加依赖引入 redis-om-spring 与 redis-om-spring 相关模块参考项目 build.gradle定义实体类上加Document字段按需加Indexed/Searchable/TextIndexed/TagIndexed开启扫描配置类上加EnableRedisDocumentRepositories指定包路径写仓储接口继承RedisDocumentRepositoryT, ID用方法名或Query声明查询小结 通过本文的 Redis OM Spring 对象映射实战你应该已经掌握了Document注解的用法理解了实体如何被存储为 Redis JSON 文档也知道了RedisDocumentRepository如何用最少的代码实现强大的搜索能力。这套注解即映射的开发模式把对象映射、JSON 文档存储、索引构建、全文搜索四大能力揉进了一套统一的编程模型里。对新手来说最大的好处是心智负担极低不用学 Redis 命令、不用写序列化代码、不用维护索引只要会写 Java 类和接口方法就能构建出具备全文检索能力的 Redis 应用。想要更深入的源码细节不妨直接翻阅 annotations 包 和 repository 包 下的实现边读边跑官方 demo理解会更快。【免费下载链接】redis-om-springSpring Data Redis extensions for better search, documents models, and more项目地址: https://gitcode.com/gh_mirrors/re/redis-om-spring创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表