springboot-wx增加配置接下来我们需要在我们的项目里面配置下,我们的redis的配置。源码:https://github.com/limingios/wxProgram.git 中的wx-springboot 和 No.15
common 增加一个pom.xml的redis依赖
org.springframework.boot spring-boot-starter-data-redisredis.clients jedis2.9.0 org.springframework.data spring-data-redis1.8.7.RELEASE
common 增加工具类RedisOperator
>操作redis的工具类
package com.idig8.utils;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class RedisOperator {
// @Autowired
// private RedisTemplate redisTemplate;
@Autowired
private StringRedisTemplate redisTemplate;
// Key(键),简单的key-value操作
public long ttl(String key) {
return redisTemplate.getExpire(key);
}
public void expire(String key, long timeout) {
redisTemplate.expire(key, timeout, TimeUnit.SECONDS);
}
public long incr(String key, long delta) {
return redisTemplate.opsForValue().increment(key, delta);
}
public Set keys(String pattern) {
return redisTemplate.keys(pattern);
}
public void del(String key) {
redisTemplate.delete(key);
}
// String(字符串)
public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
public void set(String key, String value, long timeout) {
redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
}
public String get(String key) {
return (String)redisTemplate.opsForValue().get(key);
}
// Hash(哈希表)
public void hset(String key, String field, Object value) {
redisTemplate.opsForHash().put(key, field, value);
}
public String hget(String key, String field) {
return (String) redisTemplate.opsForHash().get(key, field);
}
public void hdel(String key, Object... fields) {
redisTemplate.opsForHash().delete(key, fields);
}
public Map api 项目 配置文件内增加内容application.properties
############################################################ # # REDIS 配置 # ############################################################ # Redis数据库索引(默认为0) spring.redis.database=1 # Redis服务器地址 spring.redis.host=47.98.XXX.XXX # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password=XXXX # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=1000 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=10 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=2 # 连接超时时间(毫秒) spring.redis.timeout=0
api 项目中增加基础的Controller
package com.idig8.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import com.idig8.utils.RedisOperator;
@RestController
public class BasicController {
@Autowired
public RedisOperator redis;
public static final String USERS_REDIS_SESSION = "user-redis-session";
public static final long USERS_REDIS_SESSION_TL = 1000*60*30;
}api 项目中增加RegistLoginController增加userToken
用户登录和注册后,redis内添加对应的userToken信息。
package com.idig8.controller;
import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.idig8.pojo.Users;
import com.idig8.pojo.vo.UsersVO;
import com.idig8.service.UserService;
import com.idig8.utils.JSONResult;
import com.idig8.utils.MD5Utils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@RestController
@Api(value="用户注册登录的接口",tags={"注册和登录的controller"})
public class RegistLoginController extends BasicController{
@Autowired
private UserService userService;
@ApiOperation(value="用户注册",notes="用户注册的接口")
@PostMapping("/regist")
public JSONResult regist(@RequestBody Users user) {
//1.判断用户名和密码不能为空
if(StringUtils.isBlank(user.getUsername())||StringUtils.isBlank(user.getPassword())) {
return JSONResult.errorMsg("用户名或密码不能为空");
}
//2.判断用户名是否存在
boolean usernameIsExist = userService.queryUsernameIsExist(user.getUsername());
if(!usernameIsExist) {
user.setNickname(user.getUsername());
try {
user.setPassword(MD5Utils.getMD5Str(user.getPassword()));
} catch (Exception e) {
return JSONResult.errorMsg(e.getMessage());
}
user.setFollowCounts(0);
user.setReceiveLikeCounts(0);
user.setFansCounts(0);
userService.saveUser(user);
}else {
return JSONResult.errorMsg("用户名或已经存在,请更换在试试!");
}
UsersVO userVO = setUserRedisSessionToken(user);
return JSONResult.ok(userVO);
}
@ApiOperation(value="用户登录",notes="用户登录的接口")
@PostMapping("/login")
public JSONResult login(@RequestBody Users user) {
//1.判断用户名和密码不能为空
if(StringUtils.isBlank(user.getUsername())||StringUtils.isBlank(user.getPassword())) {
return JSONResult.errorMsg("用户名或密码不能为空");
}
//2.判断用户名是否存在
Users userObject = userService.queryUserIsExist(user);
if(userObject==null){
return JSONResult.errorMsg("用户名或密码不存在!");
}
UsersVO userVO = setUserRedisSessionToken(userObject);
return JSONResult.ok(userVO);
}
public UsersVO setUserRedisSessionToken(Users userModel) {
String uniqueToken = UUID.randomUUID().toString();
redis.set(USERS_REDIS_SESSION + ":" + userModel.getId(), uniqueToken, USERS_REDIS_SESSION_TL);
UsersVO userVO = new UsersVO();
BeanUtils.copyProperties(userModel, userVO);
userVO.setUserToken(uniqueToken);
return userVO;
}
}启动小程序注册页面
输入要注册的用户名和密码查看返回
redis内容发生了增加
>redis里面的值和我们前端设置的userToken唯一的值维系了两个之间的关系,这就是一种无状态的session,
登录页面
>使用刚才注册的一个用户名,进行登录
输入要用户名和密码查看返回
进行分类,缓存到同一个文件夹方便查看数据。前面一个分类名称中间一个冒号,丢到缓存里面。
PS:这就是本次springboot的redis-session的使用。



