还在用 RedisTemplate?试试 Redis 官方 ORM 框架吧,用起来够优雅

RedisOM简介

RedisOM是Redis官方推出的ORM框架,是对SpringDataRedis的扩展。由于Redis目前已经支持原生JSON对象的存储,之前使用RedisTemplate直接用字符串来存储JOSN对象的方式明显不够优雅。通过RedisOM我们不仅能够以对象的形式来操作Redis中的数据,而且可以实现搜索功能!

JDK11安装

首先下载JDK11,这里推荐去清华大学开源软件镜像站下载,下载地址:

下载压缩包版本即可,下载完成后解压到指定目录;

然后在IDEA的项目配置中,将对应模块的JDK依赖版本设置为JDK11即可。

使用

首先在中添加RedisOM相关依赖;

!--RedisOM相关依赖--/groupIdartifactIdredis-om-spring//version/depency

由于RedisOM目前只有快照版本,还需添加快照仓库;

repositoriesrepositoryidsnapshots-repo/idurl;/url/repository/repositories

然后在配置文件中添加Redis连接配置;

spring:redis:host:192.168.3.105Redis数据库索引(默认为0)port:6379Redis服务器连接密码(默认为空)timeout:3000ms#连接超时时间

之后在启动类上添加@EnableRedisDocumentRepositories注解启用RedisOM的文档仓库功能,并配置好文档仓库所在路径;

@SpringBootApplication@EnableRedisDocumentRepositories(basePackages="*")publicclassMallTinyApplication{publicstaticvoidmain(String[]args){(,args);}}

然后创建商品的文档对象,使用@Document注解标识其为文档对象,由于我们的搜索信息中包含中文,我们需要设置语言为chinese;

/***商品实体类*Createdbymacroon2021/10/12.*/@Data@EqualsAndHashCode(callSuper=false)@Document(language="chinese")publicclassProduct{@IdprivateLongid;@IndexedprivateStringproductSn;@SearchableprivateStringname;@SearchableprivateStringsubTitle;@IndexedprivateStringbrandName;@IndexedprivateIntegerprice;@IndexedprivateIntegercount;}

分别介绍下代码中几个注解的作用;

@Id:声明主键,RedisOM将会通过全类名:ID这样的键来存储数据;

@Indexed:声明索引,通常用在非文本类型上;

@Searchable:声明可以搜索的索引,通常用在文本类型上。

接下来创建一个文档仓库接口,继承RedisDocumentRepository接口;

/***商品管理Repository*Createdbymacroon2022/3/1.*/publicinterfaceProductRepositoryextsRedisDocumentRepositoryProduct,Long{}

创建测试用的Controller,通过Repository实现对Redis中数据的创建、删除、查询及分页功能;

/***使用RedisOM管理商品*Createdbymacroon2022/3/1.*/@RestController@Api(tags="ProductController",description="使用RedisOM管理商品")@RequestMapping("/product")publicclassProductController{@AutowiredprivateProductRepositoryproductRepository;@ApiOperation("导入商品")@PostMapping("/import")publicCommonResultimportList(){();ListProductproductList=("json/",);for(Productproduct:productList){(product);}(null);}@ApiOperation("创建商品")@PostMapping("/create")publicCommonResultcreate(@RequestBodyProductentity){(entity);(null);}@ApiOperation("删除")@PostMapping("/delete/{id}")publicCommonResultdelete(@PathVariableLongid){(id);(null);}@ApiOperation("查询单个")@GetMapping("/detail/{id}")publicCommonResultProductdetail(@PathVariableLongid){OptionalProductresult=(id);((null));}@ApiOperation("分页查询")@GetMapping("/page")publicCommonResultListProductpage(@RequestParam(defaultValue="1")IntegerpageNum,@RequestParam(defaultValue="5")IntegerpageSize){Pageablepageable=(pageNum-1,pageSize);PageProductpageResult=(pageable);(());}}

当我们启动项目时,可以发现RedisOM会自动为文档建立索引;

接下来我们访问Swagger进行测试,先使用导入商品接口导入数据,访问地址:http://localhost:8088/swagger-ui/

导入成功后我们可以发现RedisOM已经向Redis中插入了原生JSON数据,以全类名:ID的形式命名了键,同时将全部的ID存储到了一个SET集合中去了;

我们可以通过ID来查询商品信息;

当然RedisOM也是支持衍生查询的,通过我们创建的方法名称就可以自动实现查询逻辑,比如根据品牌名称查询商品,根据名称和副标题关键字来搜索商品;

/***商品管理Repository*Createdbymacroon2022/3/1.*/publicinterfaceProductRepositoryextsRedisDocumentRepositoryProduct,Long{/***根据品牌名称查询*/ListProductfindByBrandName(StringbrandName);/***根据名称或副标题搜索*/ListProductfindByNameOrSubTitle(Stringname,StringsubTitle);}

在Controller中可以添加如下接口进行测试;

/***使用RedisOM管理商品*Createdbymacroon2022/3/1.*/@RestController@Api(tags="ProductController",description="使用RedisOM管理商品")@RequestMapping("/product")publicclassProductController{@AutowiredprivateProductRepositoryproductRepository;@ApiOperation("根据品牌查询")@GetMapping("/getByBrandName")publicCommonResultListProductgetByBrandName(StringbrandName){ListProductresultList=(brandName);(resultList);}@ApiOperation("根据名称或副标题搜索")@GetMapping("/search")publicCommonResultListProductsearch(Stringkeyword){ListProductresultList=(keyword,keyword);(resultList);}}

我们可以通过品牌名称来查询商品;

也可以通过关键字来搜索商品;

这类根据方法名称自动实现查询逻辑的衍生查询有什么规则呢,具体可以参考下表。

总结

今天体验了一把RedisOM,用起来确实够优雅,和使用SpringData来操作MongoDB和ES的方式差不多。不过目前RedisOM只发布了快照版本,期待Release版本的发布,而且Release版本据说会支持JDK8的!

作者:梦想de星空

版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。

相关推荐