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对存入数据库,这也就对应两个方法:get
和put
。
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单点登录服务的开发了。
网友评论