重磅官宣:Redis OM 發(fā)布,Redis 對(duì)象映射框架來(lái)了!
Redis OM
前幾天,Redis 發(fā)布了對(duì)象映射框架:Redis OM,即:Object Mapping,不過(guò)目前它還是預(yù)覽版。
當(dāng)然,Redis OM 的橫空出世不僅僅是對(duì)象映射,它更多的是提供一個(gè)高級(jí)的抽象類庫(kù),目標(biāo)就是讓開發(fā)人員更簡(jiǎn)單、方便的使用 Redis 數(shù)據(jù)。
Redis OM 支持的第一個(gè)抽象就是:對(duì)象映射,支持基于對(duì)象的 Redis 數(shù)據(jù)持久化、流式查詢操作。
目前只支持 4 種開發(fā)語(yǔ)言:
- Redis OM for Spring(Java)
- Redis OM for .NET
- Redis OM for Node.js
- Redis OM for Python
相信后續(xù)會(huì)支持更多語(yǔ)言。
Redis OM for Spring
Redis OM for Spring 是對(duì)咱們 Java 的支持的對(duì)象映射類庫(kù)。
棧長(zhǎng)看了官方倉(cāng)庫(kù)源碼說(shuō)明,它其實(shí)就是擴(kuò)展了 Spring Data Redis,可以提供更好的數(shù)據(jù)搜索、文檔模型等,可以理解為 MyBatis-plus 和 MyBatis 的關(guān)系,相輔相成的。
快速開始
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 模型,通過(guò)注入實(shí)現(xiàn) RedisDocumentRepository 的 repositories bean,后面就可以進(jìn)行 CRUD 和自定義查詢操作了。
Spring Boot 基礎(chǔ)就不介紹了,學(xué)習(xí)筆記分享給你,實(shí)戰(zhàn)倉(cāng)庫(kù)源碼:https://github.com/javastacks/spring-boot-best-practice
對(duì)象模型映射
Redis OM 也是通過(guò)注解的方式映射對(duì)象模型,如下面示例:
- /**
- * 商戶操作倉(cāng)庫(kù)
- * 作者:棧長(zhǎng)
- * 來(lái)源公眾號(hào):Java技術(shù)棧
- */
- @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;
- // ...
- }
注解說(shuō)明:
- @Document: 將 Spring Data 模型映射到 Redis JSON 文檔;
- @Id: 使用 ULID 取代傳統(tǒng)的 UUID 主鍵生成策略,生成速度更快、更易用;
- @Searchable: 聲明全文搜索索引;
- @Indexable: 聲明索引;
定義倉(cāng)庫(kù)
Spring Data Redis 這里就不詳細(xì)介紹了,棧長(zhǎng)之前寫過(guò)一些,不會(huì)用的可以關(guān)注公眾號(hào):Java技術(shù)棧,在公眾號(hào)菜單欄中閱讀,棧長(zhǎng)都已經(jīng)整理好了。
使用 Repository 倉(cāng)庫(kù)也很簡(jiǎn)單,繼承 RedisDocumentRepository 就行了:
- /**
- * 商戶操作倉(cāng)庫(kù)
- * 作者:棧長(zhǎng)
- * 來(lái)源公眾號(hào):Java技術(shù)棧
- */
- public interface MerchantRepository extends RedisDocumentRepository<Merchant, String> {
- // 查找單個(gè)商戶
- Optional<Merchant> findMerchantByName(String name);
- }
使用倉(cāng)庫(kù)
先注入 MerchantRepo 倉(cāng)庫(kù):
- @Autowired
- MerchantRepository merchantRepo;
然后就可以持久化數(shù)據(jù)和查詢操作了。
數(shù)據(jù)持久化:
- /**
- * 持久化數(shù)據(jù)
- * 作者:棧長(zhǎng)
- * 來(lái)源公眾號(hào):Java技術(shù)棧
- */
- @Bean
- CommandLineRunner initData() {
- return args -> {
- // 清空數(shù)據(jù)
- 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"));
- // 持久化數(shù)據(jù)
- merchantRepo.save(javastack1);
- merchantRepo.save(javastack2);
- };
- }
數(shù)據(jù)查詢:
- /**
- * 查找單個(gè)商戶
- * 作者:棧長(zhǎng)
- * 來(lái)源公眾號(hào):Java技術(shù)棧
- */
- @GetMapping("name/{name}")
- Optional<Merchant> byName(@PathVariable("name") String name) {
- return merchantRepo.findMerchantByName(name);
- }
Redis OM 全程都是通過(guò)對(duì)象的方式,更好的面向?qū)ο缶幊痰乃枷?,不需要多余的?duì)象轉(zhuǎn)換操作了。
總結(jié)
Redis OM 對(duì)象映射只是擴(kuò)展了 Spring Data Redis,它不能脫離 Spring Data Redis,更不能脫離其他 Redis 客戶端,它只是一個(gè)更高層級(jí)的抽象庫(kù)而已,可以使我們更簡(jiǎn)單、方便的使用 Redis。
可以簡(jiǎn)單的說(shuō)它是 Redis 界的 Hibernate,真香!
現(xiàn)在還是預(yù)覽版,功能也不全,我們還是期待它的正式發(fā)布吧,棧長(zhǎng)會(huì)第一時(shí)間跟進(jìn)和體驗(yàn)分享。
更多的細(xì)節(jié)可以參考:
https://redis.com/blog/introducing-redis-om-client-libraries/
https://github.com/redis/redis-om-spring
好了,今天的分享就到這里了,后面棧長(zhǎng)會(huì)分享更多好玩的 Java 技術(shù)和最新的技術(shù)資訊,關(guān)注公眾號(hào)Java技術(shù)棧第一時(shí)間推送,我也將主流 Java 面試題和參考答案都整理好了,在公眾號(hào)后臺(tái)回復(fù)關(guān)鍵字 "面試" 進(jìn)行刷題。
本文轉(zhuǎn)載自微信公眾號(hào)「Java技術(shù)棧」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Java技術(shù)棧公眾號(hào)。