前言
Hi~ 我是来自西部大嫖客杰西。 这篇文章主要是讲述如何使用 Spring Boot
快速搭建 Redis
。
说句题外话,这阵子可能会不断地发出一些 Spring Boot 整合各种组建的文章。其实整合的过程其实也是一个困难话,记录下来有利于以后自己能够快速的搭建起来(若不亲手去搭建,其实你可能会意识这是一件很简单的事)。
Redis
简单地介绍一下 Redis。从 Redis 的官网介绍,Redis 是一个高性能/先进/key-value 结构的内存缓存数据库。Redis 的存储数据类型比较丰富,可以是 strings (字符串)/list (列表)/sets (哈希表)/ordered sets (具有顺序的哈希表)。
有一点值得注意的是,Redis 对其所有数据类型的动作都是原子性的(或许你们会想起 64 位计算机环境下,Java 的 double float 数据类型的自增不是原子性的)。而 Spring Boot 提供了对 Redis 良好的配置方式,提供了对存储的底层和高层的抽象,使用户更加易操作。
搭建步骤
- 初始项目
- 导入依赖
- 安装 Redis
application.yml
添加Redis
配置- 编写封装 Redis 封装类
- 编写 controller 层
初始项目
初始化方法我一般用以下两种
- 通过 start.spring.io 自定义项目,然后下载/导入。
- 通过 IDEA 来新建
Spring Boot
项目。
然后项目目录基本以下
+- java
+- com.jc.jpa-demo
+- domain
+- repository
+- controller
+- resources
+- application.yml
导入依赖
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- lettuce pool -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
安装 Redis
因为我当前的开发环境为 window,所以会提供一下 window 版本的 Redis 的下载地址
Redis
下载后解压,然后直接点击 redis-server.exe
启动即可。
application.yml
添加 Redis
配置
在 application.yml
添加以下内容
spring:
redis:
database: 0 # Redis数据库索引(默认为0)
host: localhost # Redis服务器地址
port: 6379 # Redis服务器连接端口
password: # Redis服务器连接密码(默认为空)
lettuce:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-idle: 8 # 连接池中的最大空闲连接 默认 8
min-idle: 0 # 连接池中的最小空闲连接 默认 0
编写封装 Redis
封装类
编写 Redis 的接口
public interface RedisService {
void set(String key, String value);
String get(String key);
boolean isExpire(String key, long expire);
void remove(String key);
Long increment(String key, long delta);
}
编写实现类
/**
* redis 实现类
*/
@Service
public class RedisServiceImpl implements RedisService {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Override
public void set(String key, String value) {
stringRedisTemplate.opsForValue().set(key, value);
}
@Override
public String get(String key) {
return stringRedisTemplate.opsForValue().get(key);
}
@Override
public boolean isExpire(String key, long expire) {
return redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
@Override
public void remove(String key) {
stringRedisTemplate.delete(key);
}
@Override
public Long increment(String key, long delta) {
return stringRedisTemplate.opsForValue().increment(key, delta);
}
}
编写 service 层
编写 UserService 接口
public interface UserService {
public String login(String username, String password);
public String getLoginInfo(String username);
}
编写 UserService 实现
@Service
public class UserServiceImpl implements UserService {
@Autowired
private RedisService redisService;
/** 登录 */
@Override
public String login(String username, String password) {
if (username.equals("admin")) {
redisService.set(username, password);
return "success";
}else {
return "fail";
}
}
/** 检测 */
@Override
public String getLoginInfo(String username) {
String result = redisService.get(username);
return result == null ? "没登录" : result;
}
}
UserServiceImpl
做了以下几个简单的登录业务逻辑:
- 通过
login
方法进行登录,如果账号名是admin
,便使用Redis
继续缓存;反之则不缓存。 - 通过
getUserInfo
方法获取用户信息,如果缓存里面有用户信息,就登录成功。
编写 controller 层
编写 controller
@RestController
@RequestMapping("user")
public class UserContorller {
@Autowired
private UserService userService;
@PostMapping("login")
public String login(@RequestParam String username, @RequestParam String password) {
return userService.login(username, password);
}
@PostMapping("getLoginInfo")
public String getLoginInfo(@RequestParam String username) {
return userService.getLoginInfo(username);
}
}
启动测试
登录
关键字 | 值 |
---|---|
URL | http://localhost:8080/user/login |
请求方式 | POST |
参数(两组) | ① username=admin password=admin ② username=zhangsan/ password=zhangsan |
结果(两组) | ① success ② fail |
获取用户信息
关键字 | 值 |
---|---|
URL | http://localhost:8080/user/getLoginInfo |
请求方式 | POST |
参数(两组) | ① username=admin ② username=zhangsan |
结果(两组) | ① admin ② 没登录 |