美文网首页
2020-01-02 SpringCloud微服务从入门到入土(

2020-01-02 SpringCloud微服务从入门到入土(

作者: NoelleMu | 来源:发表于2020-01-02 02:04 被阅读0次

Redis是一个非常常用的非关系型数据库,一般用来做缓存。但是现在我们想用它来实现SSO(单点登录),以后也有用作缓存的需求,就需要开发一个Redis缓存服务了。

Maven依赖

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>wendev-microservice</artifactId>
        <groupId>site.wendev.microservice</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>wendev-service-redis</artifactId>

    <dependencies>
        <dependency>
            <groupId>site.wendev.microservice</groupId>
            <artifactId>wendev-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!-- Spring Boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- End Spring Boot -->

        <!-- ZipKin -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>

        <!-- Nacos Discovery -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- Nacos Config -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!-- Netty -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>

        <!-- Dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.spring</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
    </dependencies>

</project>

Redis所使用的依赖是这两个:

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

配置Redis的连接信息

引入依赖后,还需要在application.yml中配置redis的连接信息:

application.yml

server:
  port: 8800

# Redis数据存储服务
spring:
  application:
    name: wendev-service-redis
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  zipkin:
    base-url: http://127.0.0.1:9411
  main:
    allow-bean-definition-overriding: true
  redis:
    lettuce:
      pool:
        max-active: 200
        max-idle: 200
        max-wait: -1
        min-idle: 0
    database: 0
    host: 127.0.0.1
    timeout: 1000
    port: 6379
    
# 单点检查
management:
  endpoints:
    web:
      exposure:
        include: "*"

dubbo:
  registry:
    address: nacos://127.0.0.1:8848
  scan:
    base-packages: site.wendev.microservice.service.redis
  protocol:
    name: dubbo
    port: -1

配置的主要是spring.redis下的一些节点。

公共API

因为我们使用Dubbo,所以需要在公共API中加上我们需要让这个Redis服务提供的服务。

Redis是key-value型数据库,所以主要操作有两个:根据key取得value,和将k-v对存入数据库,这也就对应两个方法:getput

RedisService.java

public interface RedisService {
    /**
     * 插入一条记录
     *
     * @param key 键
     * @param value 值
     * @param expire 超时时间
     */
    public int put(String key, String value, Long expire);

    /**
     * 取出一条记录
     *
     * @param key 要取出的记录的key
     */
    public Object get(String key);
}

因为取出的数据是什么类型的暂时无法确定,所以get方法的返回值类型是Object。

服务实现

Redis相关的操作其实并不难实现——Spring已经为我们封装好了一个强大的工具类:RedisTemplate。将它自动注入进来就可以很方便地对Redis进行操作了。

RedisServiceImpl.java

@Service
public class RedisServiceImpl implements RedisService {
    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Override
    public int put(String key, String value, Long expire) {
        redisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);

        return 0;
    }

    @Override
    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }
}

到这里,我们的Redis公共缓存服务就完成了,可以进行下一步——SSO单点登录服务的开发了。

相关文章

网友评论

      本文标题:2020-01-02 SpringCloud微服务从入门到入土(

      本文链接:https://www.haomeiwen.com/subject/smlnoctx.html