前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成

作者头像
愿天堂没有BUG
发布2022-10-28 15:39:44
6240
发布2022-10-28 15:39:44
举报
文章被收录于专栏:愿天堂没有BUG(公众号同名)

Spring Data与NoSQL的集成

下面介绍使用Spring Data集成MongoDB、Redis实现Spring Boot应用与NoSQL数据库的集成和开发。

Spring Boot集成MongoDB

● 方式一:使用MongoDB Repository使用Spring Data MongoDB Repository可以让你不用写相关的查询组合语句,只要按规定定义好接口名就可以。Repository接口是Spring Data的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法。

Repository提供了最基本的数据访问功能,其子接口扩展了一些功能,具体关系如下。

○ Repository:仅仅是一个标识,表明任何继承它的均为仓库接口类。

○ CrudRepository:继承Repository,实现了一组CRUD相关的方法。

○ PagingAndSortingRepository:继承CrudRepository,实现了分页排序相关的方法。

○ MongoRepository:继承 PagingAndSortingRepository,实现了一组MongoDB规范相关的方法。

○ 自定义的XxxxRepository:需要继承MongoRepository,这样XxxxRepository接口就具备了通用的数据访问控制层的能力(CURD的操作功能)。

● 方式二:使用MongoTemplate

MongoRepository的缺点是不够灵活,而MongoTemplate正好可以弥补MongoRepository的不足,下面是MongoTemplate的主要功能。

○ MongoTemplate实现了MongoOperations Interface。

○ MongoDB documents和domain classes之间的映射关系是通过实现MongoConverter这个interface的类来实现的。

○ MongoTemplate提供了很多操作MongoDB的API方法,都是线程安全的,可以在多线程的情况下使用。

○ MongoTemplate实现了MongoOperations接口,此接口定义了众多的操作方法,如find、findAndModify、findOne、insert、remove、save、update和updateMulti等。

○ MongoTemplate将domain object转换为DBObject,默认转换 类 为 MongoMappingConverter , 并 提 供 了 Query 、Criteria、Update等流式API。

MongoTemplate核心操作类包括Criteria和Query。Criteria类封装所有的语句,以方法的形式查询。Query类将语句进行封装或者添加排序之类的操作。

● MongoTemplate示例

首先,添加Maven依赖。

其次,配置文件如下。

然后,定义实体类,@Document注解中的参数Person代表MongDB中维护的文档对象。@Field注解代表一个字段,可以不加,默认以参数名为列名,如果加上@Field,可以给映射存储到MongDB的字段取别名。如下面实例中的age属性在MongDB中的列名为“Age”。

最后,使用MongoTemplate实现文档访问,代码如下。

Spring Boot集成Redis

Redis作为一种NoSQL数据库,提供了一种高效的缓存方案,Redis提供单点、主从、哨兵和集群等不同的配置和部署方式。

● 单点模式:又称单节点模式,是最简单的Redis模式,只有一个Redis实例。如果只是自己测试缓存或者小程序,数据量很小,仅仅做一个小型的Key/Value型数据库,完全足够。

● 主从模式:就是N个Redis实例,可以是1主N从,也可以是N主N从。(N主N从则不是严格意义上的主从模式了,后续的集群模式会说到,N主N从就是N+N个Redis实例。)

● 哨兵模式:又称Sentinel模式,Sentinel的中文含义是哨兵、守卫。也就是说,既然在主从模式中,Master节点挂了以后,Slave节点不能主动选举一个Master节点出来,那么我们就安排一个或多个Sentinel来做这件事;当Sentinel发现Master节点挂了时,Sentinel就会从Slave节点中重新选举一个Master节点。

● 集群模式:只需要将每个数据库节点的Cluster-Enable配置打开即可。每个集群中至少需要三个主数据库才能正常运行。

Redis不同的模式配置

首先,引入Maven依赖。

其次,添加配置如下。

然后,根据redis.type配置RedisConnectionFactory。

单点模式配置如下:

哨兵模式配置如下:

集群模式配置如下:

Redis序列化方案

下面使用封装好的RedisUtils操作Redis工具类。这个RedisUtils交给Spring容器实例化,使用时直接注解注入即可。

spring-data-redis的序列化类有下面几种。

● GenericToStringSerializer:可以将任何对象泛化为字符串并序列化。

● Jackson2JsonRedisSerializer:跟JacksonJsonRedisSerializer实际上是一样的。

● JacksonJsonRedisSerializer:序列化object对象为JSON字符串。

● JdkSerializationRedisSerializer:序列化Java对象(被序列化的对象必须实现Serializable接口),无法转义成对象。

● StringRedisSerializer:简单的字符串序列化。

● GenericToStringSerializer:类似StringRedisSerializer的字符串序列化。

● GenericJackson2JsonRedisSerializer:类似Jackson2JsonRedisSerializer,但使用时构造函数不使用特定的类,参考以上序列化,自定义序列化类。

本文给大家讲解的内容是微服务数据架构,数据分类及存储特性,Spring Data与NoSQL的集成

  1. 下篇文章给大家讲解的内容是微服务数据架构,事务管理理论
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!
  4. 本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 愿天堂没有BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring Data与NoSQL的集成
  • 本文给大家讲解的内容是微服务数据架构,数据分类及存储特性,Spring Data与NoSQL的集成
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档