Redis安装与spring boot使用redis实现session共享
1.Redis在Linux系统安装
Redis 官方网站:http://redis.io
Redis中文官方网站:http://redis.cn/
1.1、安装版本
版本选择:https://download.redis.io/releases/redis-6.2.7.tar.gz
1.2、安装步骤
- 安装wget命令 & lszrz 命令
yum -y install wget
# 使用wget下载单个文件
## 从网络下载一个文件并保存在当前目录
wget https://download.redis.io/releases/redis-6.2.7.tar.gz
## 使用wget-o下载并以不同的文件名保存
wget -O redis627.tar.gz https://download.redis.io/releases/redis-6.2.7.tar.gz
## 使用wget -limit -rate 限速下载(执行wget时,默认会占用全部可能的带宽下载,当准备下载一个大文件,而你还需要下载其他文件时就有必要限速了)
wget --limit-rate=300K https://download.redis.io/releases/redis-6.2.7.tar.gz
# ----------------------------------
yum install -y lrzsz
- 安装C语言的编译环境
yum -y install gcc gcc-c++ kernel-devel
- 测试gcc版本
gcc --version
#gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4)
#Copyright (C) 2018 Free Software Foundation, Inc.
#This is free software; see the source for copying conditions. There is NO
#warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- 将下载的redis-6.2.7.tar.gz方/opt目录
- 解压上传的包或wget命令直接下载
tar -xzvf redis-6.2.7.tar.gz
- 进入解压的目录
cd redis-6.2.7/
- 执行make命令编译
make
cd src && make all
make[1]: Entering directory '/opt/redis-6.2.7/src'
CC Makefile.dep
前台启动
(注:不推荐,因为前台启动,命令行窗口不能关闭,否则服务停止)
./redis-server
后台启动
- 拷贝一份redis.conf 到其他目录,如/myredis
[root@iZ2zeizrxxn52st7yye6vuZ /]# cp /opt/redis-6.2.7/redis.conf /myredis/
- 修改redis.conf(259行)文件将里面的daemonize no 改成 yes,让服务在后台启动
- Redis启动(注:安装目录是/usr/local/bin/,所以在/usr/local/bin/下执行下面的命令)
./redis-server /myredis/redis.conf
- 用客户端连接访问
./redis-cli
- 指定端口访问
./redis-cli -p 6379
- 测试验证
127.0.0.1:6379> ping
PONG
- Redis关闭
# 第一种进入终端后关闭
shutdown
# 第二种查找出进程后杀死进程
ps -ef|grep redis
kill -9 [查找出的进程号]
2、spring boot使用redis实现session共享
-
依旧进入redis的配置文件里(redis.conf)
把bind 127.0.0.1 -::1注掉(默认情况bind=127.0.0.1只能接受本机的访问请求)
不写的情况下无限制接受任何ip的访问 -
把protected-mode yes 改为 no(yes表示只支持本机访问,no表示支持远程访问)
-
设置密码
-
上面的改完之后重新启动redis,也就是把进程结束后,再次启动redis服务。
-
关闭防火墙,或者把端口加进去,使端口能够正常接受远程访问
java里的代码
- 所需依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- properties配置文件
#Redis的IP地址和端口号
spring.redis.host=
spring.redis.port=
#Redis的密码
spring.redis.password=
- 第二个同理,只需要在spring boot里新建一个模块,在配置里改一下端口号即可
(例:server.port=9090) - 测试
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@RestController
public class UserHandler {
@RequestMapping(value = "/first", method = RequestMethod.GET)
public Map<String, Object> firstResp (HttpServletRequest request){
Map<String, Object> map = new HashMap<>();
request.getSession().setAttribute("request Url", request.getRequestURL());
map.put("request Url", request.getRequestURL());
return map;
}
@RequestMapping(value = "/sessions", method = RequestMethod.GET)
public Object sessions (HttpServletRequest request){
Map<String, Object> map = new HashMap<>();
map.put("sessionId", request.getSession().getId());
map.put("message", request.getSession().getAttribute("map"));
return map;
}
}
- 第二个模块里同上
测试结果
可以看到两个连接的sessionId是同样的