SpringCloud基础架构构建过程(三)__集成Redis以及MongoDB

目录

前述

依赖引入

Redis集成

 配置文件

Redis配置类

测试Redis

MongoDB 集成


前述

        前面的文章已经对关系型数据库进行了集成,那么本篇针对非关系型数据库进行一个集成。Redis和MongoDB是目前来说比较流行的非关系型数据库,在一般的系统中普遍承担日志记录、登录KEY记录、事务锁、缓存数据等的处理,在大型的WEB2系统中应用的会更加广泛也更加的深入,在本次的系统集成中,只针对基础的集成、存储和取值进行一个集成。

依赖引入

        

        <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- mongoDB -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

Redis集成

 配置文件

        依赖引入之后,需要在yml文件中进行配置,配置数据如下:

spring:
  redis:
    host: 127.0.0.1 # Redis服务器地址
    port: 6379 # Redis 服务器连接端口
    password: # 连接密码,有设置密码则必填,未设置则不填
    database: 6 # 使用的数据库索引
    jedis:
      pool:
        max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
        max-wait: -1  # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 0  # 连接池中的最小空闲连接
    timeout: 2000 # 连接超时时间(毫秒)

Redis配置类

        创建Redis配置类,RedisConfiguration.class,此配置类创建对象RedisTemplate 来对Redis进行各种操作,它支持所有的Redis的原生API。还有一种StringRedisTemplate也输入Redis的工具方法,但是StringRedisTemplate的局限性很大,作为RedisTemplate的子类,它仅支持Key和Value都是String的操作。

package com.dgh.micro.common.config.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @className RedisConfiguration
 * @Description TODO
 * @Date 2021/11/1 4:07 下午
 * @Author DGH DEMO
 * @Version 1.0
 **/
@Configuration
@EnableCaching
public class RedisConfiguration {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);

        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);

        template.setValueSerializer(serializer);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
}

测试Redis

        创建TestController.java用于web访问测试。通过@Resource注解自动注入RedisTemplate,在方法中直接使用  redisTemplate.opsForValue().set("key", "value");  进行数据的存储,使用 redisTemplate.opsForValue().get("key"); 进行数据的查询。

    @PostMapping("testRedisTemplate")
    @ApiOperation("测试redis")
    public void testRedisTemplate() {
        redisTemplate.opsForValue().set("key", "value>>1");
        Object redisValue = redisTemplate.opsForValue().get("key");
        log.info("redisTemplate取出的值为:{}", redisValue);
    }

         启动项目,通过PostMan或者swagger直接调用,接口,查看控制台的日志输出:

        通过控制台日志可以看到,存入的数据已经能够正常的读取了。

MongoDB 集成

配置文件

        在yml中进行MongoDB的基础配置【地址、端口、数据库、密码等】

spring:
  data:
    mongodb:
      host: 127.0.0.1  # MongoDB服务器地址
      port: 27017 # MongoDB服务器端口
      database: micro-demo # 数据库名称
      password: # 连接密码

测试MongoDB

        MongoDB在使用时不需要创建另外的配置类,直接使用注入MongoTemplate即可使用。

        创建测试类SysLog.java ,注意在创建MongoDB的实体类时需要使用注解 @Document("sys_log");  注明其是一个MongoDB的集合文件,在存储和查询时MongoDB也是通过此注解来定位具体存储到哪个集合下面。同时通过 @Id 注解来表示其数据主键也可以不创建主键字段,通过MongoDB自己生成;通过@Field(value = "") 注解标识字段别名。

package com.dgh.micro.model.vo.mongo;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

/**
 * 日志记录
 *
 * @author DGH DEMO
 * @date 2021-11-01
 */
@Data
@Document("sys_log")
public class SysLog {

    /**
     * 日志的名称,一般为业务名称
     */
    @Field(value = "logName")
    private String logName;

    /**
     * 日志记录的内容
     */
    @Field(value = "logContent")
    private String logContent;

    /**
     * 服务名称,一般为spring.application.name
     */
    @Field(value = "appName")
    private String appName;

    /**
     * 当前用户请求的url
     */
    @Field(value = "requestUrl")
    private String requestUrl;

    /**
     * http或方法的请求参数体
     */
    @Field(value = "requestParams")
    private String requestParams;

    /**
     * http或方法的请求结果
     */
    @Field(value = "requestResult")
    private String requestResult;

    /**
     * 当前服务器的ip
     */
    @Field(value = "serverIp")
    private String serverIp;

    /**
     * 客户端的ip
     */
    @Field(value = "clientIp")
    private String clientIp;

    /**
     * 用户id
     */
    @Field(value = "userId")
    private Long userId;

    /**
     * 请求http方法
     */
    @Field(value = "httpMethod")
    private String httpMethod;

    /**
     * 客户浏览器标识
     */
    @Field(value = "clientBrowser")
    private String clientBrowser;

    /**
     * 客户操作系统
     */
    @Field(value = "clientOs")
    private String clientOs;

}

        在TestController.java中编写方法 testMongoDBTemplate() mongoTemplate.insert(T); 进行数据的插入,通过 mongoTemplate.findOne(Query query, Class<T> entityClass); 进行查询。

    @Resource
    MongoTemplate mongoTemplate;

    @PostMapping("testMongoDBTemplate")
    @ApiOperation("测试mongo")
    public void testMongoDBTemplate() {
        String uuid = UUID.randomUUID().toString();
        SysLog sysLog = new SysLog();
        sysLog.setClientIp(uuid);
        mongoTemplate.insert(sysLog);
        log.info("生成的uuid为:{}", uuid);

        Query query = new Query();
        query.addCriteria(Criteria.where("clientIp").is(uuid));
        SysLog one = mongoTemplate.findOne(query, SysLog.class);
        log.info("mongoTemplate取出的值为:{}", JSONUtil.toJsonStr(one));
    }

        启动后通过PostMan或者swagger调试,会发现在控制台日志中会输出当前存入的数据。

        至此,Redis与MongoDB的简单集成结束,后续在实例会具体用到。下一章将集成RocketMq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值