<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          重磅發(fā)布:Redis 對(duì)象映射框架來了,操作大大簡(jiǎn)化!

          共 4468字,需瀏覽 9分鐘

           ·

          2022-01-22 21:10



          1

          前言


          最近,Redis 官方博客宣布推出四個(gè)用于 Redis 的客戶端工具庫(kù):Redis OM(對(duì)象映射庫(kù),Object Mapping),目標(biāo)是讓應(yīng)用程序盡可能地容易使用 Redis 和 Redis 模塊。


          四個(gè)客戶端工具庫(kù)分別對(duì)應(yīng)四種編程語言


          • Redis OM for .NET:.Net 平臺(tái)的 Redis OM,依賴 StackExchange.Redis 實(shí)現(xiàn)。借助 Redis OM .NET 可以實(shí)現(xiàn)對(duì)象操作的方式操作 Redis 數(shù)據(jù),脫離 key/value 的操作方式。查詢支持大部分.Neter 最愛的 LINQ。

          • Redis OM for Node.js:為 TypeScript 和 JavaScript 提供一級(jí)支持

          • Redis OM for Python:原生集成流行的 FastAPI 框架,將 FastAPI 與 Redis 結(jié)合可構(gòu)建高性能 Web 服務(wù)。Redis OM Python 庫(kù)還支持同步和異步使用

          • Redis OM for Spring:原生集成 Spring,擴(kuò)展了 Spring Data Redis(提供熟悉的界面),添加了對(duì) RedisBloo 的部分支持。


          換言之,在之后的開發(fā)中,開發(fā)者可以通過 Redis OM 庫(kù)直觀地將域?qū)ο?(domain objects) 保存在 Redis,然后使用流暢的、以語言為中心的 API 進(jìn)行查詢。


          ?

          2

          Redis OM for Spring

          作為一枚java開發(fā),我們重點(diǎn)了解一下 Redis OM for Spring。



          3

          簡(jiǎn)介

          ?

          Redis OM for Spring提供了強(qiáng)大的存儲(chǔ)庫(kù)和基于強(qiáng)大的 Spring Data Redis (SDR) 框架構(gòu)建的自定義對(duì)象映射抽象。


          • @Document 將 Spring Data 模型映射到 Redis JSON 文檔的注釋

          • @RedisHash通過以下方式增強(qiáng) SDR @EnableRedisEnhancedRepositories:

          • 使用 Redis 的原生搜索引擎 (RediSearch) 進(jìn)行二級(jí)索引

          • 將ULID用于帶@Id注釋的字段

          • RedisDocumentRepository 自動(dòng)實(shí)現(xiàn)存儲(chǔ)庫(kù)接口以實(shí)現(xiàn)復(fù)雜的查詢功能,使用 @EnableRedisDocumentRepositories

          • 聲明性搜索索引通過 @Indexable

          • 全文檢索索引通過 @Searchable

          • @Bloom 注釋可以非??焖俚卮_定一個(gè)值是否在集合中。



          4

          實(shí)踐


          我們通過案例來了解一下Redis OM for Spring的具體用法


          相關(guān)依賴


          目前快照地址


          <repositories>
          ??<repository>
          ????<id>snapshots-repoid>

          ????<url>https://s01.oss.sonatype.org/content/repositories/snapshots/url>
          ??repository>
          repositories>


          pom文件



          ??com.redis.om
          ??redis-om-spring
          ??${version}version
          >


          SpringBoot配置


          @SpringBootApplication
          @Configuration
          @EnableRedisDocumentRepositories(basePackages = "com.redis.om.documents.*")
          public?class?RomsDocumentsApplication?{

          ??@Autowired
          ??CompanyRepository companyRepo;

          ??@Bean
          ??CommandLineRunner loadTestData()?{
          ????return?args -> {
          ??????companyRepo.deleteAll();

          ??????// 創(chuàng)建兩組實(shí)體域 redis & microsoft
          ??????Company redis = Company.of(
          ????????"Redis", "https://redis.com", new?Point(-122.066540, 37.377690), 526, 2011?
          ??????);
          ??????redis.setTags(Set.of("fast", "scalable", "reliable"));

          ??????Company microsoft = Company.of(
          ????????"Microsoft", "https://microsoft.com", new?Point(-122.124500, 47.640160), 182268, 1975?
          ??????);
          ??????microsoft.setTags(Set.of("innovative", "reliable"));

          ??????// 將創(chuàng)建的兩組實(shí)體域持久化
          ??????companyRepo.save(redis);
          ??????companyRepo.save(microsoft);
          ????};
          ??}

          ??public?static?void?main(String[] args)?{
          ????SpringApplication.run(RomsDocumentsApplication.class, args);
          ??}
          }


          整體使用上非常清晰,重點(diǎn)是類上開啟@EnableRedisDocumentRepositories注解,就可以注入可用于 CRUD 操作和自定義查詢的@Document存儲(chǔ)庫(kù) bean。


          實(shí)體對(duì)象映射


          這個(gè)我們使用SpringBoot非常熟悉,Redis OM Spring 也提供@Document注釋來為我們將模型保存為 JSON 文檔


          @Data
          @RequiredArgsConstructor(staticName = "of")
          @AllArgsConstructor(access = AccessLevel.PROTECTED)
          @Document
          public class Company {
          ??@Id?private String id;
          ??@Searchable?private String name;
          ??@Indexed?private Point location;
          ??@Indexed?private Set tags = new HashSet();
          ??@Indexed?private Integer numberOfEmployees;
          ??@Indexed?private Integer yearFounded;
          ??private?String?url;
          ??private?boolean?publiclyListed;

          ??// ...
          }


          添加@Document注釋即可,定義格式省去了自己做轉(zhuǎn)換,Redis OM 庫(kù)直觀地將域?qū)ο?(domain objects) 保存在 Redis上。


          接口使用


          可以使用流暢的、以語言為中心的 API 進(jìn)行查詢,更符合我們平常的編寫習(xí)慣,看一組官方給的實(shí)現(xiàn)案例:


          public?interface?CompanyRepository?extends?RedisDocumentRepository<Company, String> {
          ??// find one by property
          ??Optional findOneByName(String name);

          ??// geospatial query
          ??Iterable findByLocationNear(Point point, Distance distance);

          ??// find by tag field, using JRediSearch "native" annotation
          ??@Query("@tags:{$tags}")
          ??Iterable findByTags(@Param("tags")?Set tags);

          ??// find by numeric property
          ??Iterable findByNumberOfEmployees(int?noe);

          ??// find by numeric property range
          ??Iterable findByNumberOfEmployeesBetween(int?noeGT, int?noeLT);

          ??// starting with/ending with
          ??Iterable findByNameStartingWith(String prefix);
          }

          ?

          5

          總結(jié)

          ?

          整體上,Redis OM Spring為我們節(jié)省了很多項(xiàng)目中整合Redis的步驟,可以更好的面向?qū)ο缶幊?,省去不少?shù)據(jù)格式的轉(zhuǎn)換,同時(shí)也提供了我們更熟悉的API接口,大大的贊,不過這輪操作下來,Redis更像一個(gè)數(shù)據(jù)庫(kù)了。


          注意:Redis OM Spring 目前僅適用于 Jedis,同時(shí) Redis OM 的一些高級(jí)特性依賴于兩個(gè)可用 Redis 模塊的核心特性:RediSearch和RedisJSON。


          你對(duì)這個(gè)Redis 對(duì)象映射庫(kù)期待嗎?


          GitHub地址:https://github.com/redis/redis-om-spring



          往期推薦



          SpringBoot 三大開發(fā)工具,你都用過么?

          面試官:如何合理的配置線程數(shù)?越多越好嗎?

          MySQL 數(shù)據(jù)查詢太多會(huì)導(dǎo)致OOM嗎?

          JDK8 到 JDK17 各個(gè)版本的重要特性一覽

          使用MySQL的JSON數(shù)據(jù)類型,事半功倍!

          不要再封裝各種 Util 工具類了,這款開源項(xiàng)目,真的很好用!




          瀏覽 23
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  俺来俺也去www色在线观看 | 亚洲最大的成人网址 | 天天肏在线| 少妇一区二区三区 | 国产麻豆成人A |