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

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”。

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成_第1张图片

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

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成_第2张图片

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成_第3张图片

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依赖。

其次,添加配置如下。

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成_第4张图片

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

 

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成_第5张图片

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成_第6张图片

单点模式配置如下:

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成_第7张图片

哨兵模式配置如下:

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成_第8张图片

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成_第9张图片

编辑切换为居中

添加图片注释,不超过 140 字(可选)

集群模式配置如下:

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成_第10张图片

Redis序列化方案

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

微服务数据架构,数据分类及存储特性,SpringData与NoSQL的集成_第11张图片

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

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

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

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

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

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

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

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

你可能感兴趣的:(大数据)