分布式会话实现(Springboot+redis)
安装
- 服务器上安装redis
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
chmod -R 777 redis-5.0.5.tar.gz
tar -xvzf redis-5.0.5.tar.gz
- 进入redis目录,使用make指令编译redis,使用make install命令安装redis
cd redis-5.0.5
make
make install
- 进入src目录,看到redis-server进程,执行./redis-server启动
./redis-server &
- 使用./redis-cli默认连接本地端口6379的redis
./redis-cli
set key name
get key
配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
@Component
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
public class RedisConfig {
}
#配置springboot对redis的依赖
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.database=10
#spring.redis.password=
#设置jedis连接池
spring.redis.jedis.pool.max-active=50
spring.redis.jedis.pool.min-idle=20
- 报错DefaultSerializer requires a Serializable payload but received an object of type
redis使用的序列化方式就是jdk默认的Serializable,因此要实现Serializable接口。
更好的方式是使用JSON的序列化方式。
- 服务器端redis目录下redis.conf修改配置,在#bind 127.0.0.1 ::1下增加
bind *ip*
redis应用
@Autowired
private RedisTemplate redisTemplate;
//修改成若用户登录验证成功后将对应的登录信息和登录凭证一起存入redis中
//生成登录凭证token, UUID
String uuidToken = UUID.randomUUID().toString();
uuidToken = uuidToken.replace("-","");
//建立token和用户登录态之间的联系
redisTemplate.opsForValue().set(uuidToken,userModel);
redisTemplate.expire(uuidToken,1, TimeUnit.HOURS);
var token = data.data;
window.localStorage["token"] = token;
String token = httpServletRequest.getParameterMap().get("token")[0];
if(StringUtils.isEmpty(token)){
throw new BusinessException(EmBusinessError.USER_NOT_LOGIN, "用户还未登陆不能下单");
}
UserModel userModel = (UserModel) redisTemplate.opsForValue().get(token);
网友评论