1 有状态Session
2 无状态Session
3 Redis-Session
3.1 使用Redis-session的好处
- 用户认证信息存储到redis缓存中,形成无状态会话
- 便于扩展,当单体应用扩展为集群会相当方便
- 便于权限验证
3.2 Redis安装
链接:https://pan.baidu.com/s/1XXTH3zv3VKNSUuKPrx8vcg
提取码:kijo
tar -zxvf redis-4.0.11.tar.gz
yum -y install gcc-c++
make
make install PREFIX=/usr/local/redis
3.3 前台启动
cd /usr/local/redis/bin/
./redis-server
3.4 后他启动
cp redis.conf /usr/local/redis/bin/
bind 0.0.0.0
daemonize yes
port 6379
requirepass changeme
./redis-server redis.conf
4 Spring Boot 集成 Redis
4.1 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.7.RELEASE</version>
</dependency>
4.2 基本配置
############################################################
#
# REDIS 配置
#
############################################################
# Redis数据库索引(默认为0)
spring.redis.database=1
# Redis服务器地址
spring.redis.host=121.36.70.255
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=imooc
# 连接池最大连接数(使用负值表示没有限制)
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
4.3 工具类
package com.imooc.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 StringRedisTemplate redisTemplate;
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<String> keys(String pattern) {
return redisTemplate.keys(pattern);
}
public void del(String key) {
redisTemplate.delete(key);
}
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);
}
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<Object, Object> hgetall(String key) {
return redisTemplate.opsForHash().entries(key);
}
public long lpush(String key, String value) {
return redisTemplate.opsForList().leftPush(key, value);
}
public String lpop(String key) {
return (String)redisTemplate.opsForList().leftPop(key);
}
public long rpush(String key, String value) {
return redisTemplate.opsForList().rightPush(key, value);
}
}