Redis学习笔记1
不把信息存储在本地session中了,单机部署
使用了Redis,支持分布式部署(session从redis中查找获取数据看有没有)
一、安装
1.安装
采用的环境是腾讯云服务器,Centos 环境。同时顺便在本机上安装桌面远程连接(Another Redis Desktop Manager)
2.我这里使用的是XShell连接的云服务器,然后终端输入安装Redis命令。
yum -y install redis
看见下图证明安装成功!
3.启动Redis
redis-server /etc/redis.conf &
4.使用命令开始使用Redis
redis-cli
5.设置、获取值测试是否成功可行
6.退出直接使用exit即可
7.设置远程终端连接
需要知道的点:redis.conf配置文件默认是在etc目录下的,可以通过使用ls进行查看。
(1)进入ect目录下
(2)使用vim命令打开redis.conf配置文件,按i进入编辑模式
(3)修改redis.conf中的“bind 127.0.0.1”注释掉或者改为0.0.0.0
(4)修改”protected-mode yes“把yes改为no
(5)如果想要修改密码可以设置,也可以不设置(可选)
按住ESC键退出编辑模式——》按 “ / “进入查找模式——》输入requirepass可以查找到如下
(6)退出编辑模式,按” :wq “退出,然后使用命令先关闭redis服务,在使用命令开启服务
redis-cli shutdown ——————关闭redis服务
redis-server /etc/redis.conf & ————————启动redis服务
(7)去查看防火墙状态是关闭还是打开
这里的话如果自己可以设置的话就不用往下看我的这个了,我下面的是自己在弄的过程中出现的错误改正
可以看见是运行的,这里我们需要设置Redis的端口(默认6379)添加进去允许通过防火墙
上面这张图是我刚开始没有确认是不是已经开启了防火墙,就直接使用命令添加,发现防火墙是没有运行的,然后我在重新允许防火墙,也是不生效的,所以我使用了 sudo systemctl start firewalld
命令,再把添加防火墙命令加入,发现已经成功了。
同时去查看我们的端口是不是被添加进去,也是可以看到的
但是当我去远程连接时候会发现不生效,报的错误信息是连接超时。于是我就尝试了很多方法,主要原因是因为防火墙的问题。最后都尝试无果。然后我只能去重新删除重装。
二、完全卸载:
1.停止Redis服务
sudo systemctl stop redis
2.禁用Redis服务
sudo systemctl disable redis
3.卸载Redis软件包
sudo yum remove redis
4.删除Redis配置和数据文件
sudo rm /etc/redis.conf
sudo rm -r /var/lib/redis
5.清理Redis用户
sudo userdel redis
sudo groupdel redis
6.清理日志文件
sudo rm -r /var/log/redis/
7.清理启动脚本和服务文件
检查是否有残留的Redis启动脚本或服务文件,并删除它们。这些文件通常位于/etc/systemd/system/
或/usr/lib/systemd/system/
。
8.重新加载systemd管理器
sudo systemctl daemon-reload
重新安装完毕,再次设置,还是一样的效果。最后我回转到了云服务器控制台。进入防火墙设置,直接把这个6379端口添加进去允许就行了,远程也能连接上了。
然后去测试看是否可以,发现我测试它能否正常使用的时候有报了一个错误。
Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled
这个错误通常表示Redis已经配置了保存RDB快照(Redis数据库快照),但Redis当前无法将数据持久化到磁盘,导致Redis禁用了可能会修改数据集的命令。
如何解决呢?最后在网上看到了就使用了这个方法。
使用redis-cli
连接上redis
,然后执行命令就可以正常使用了。
config set stop-writes-on-bgsave-error no
三、Another Redis Desktop Manager远程连接
下载安装完成
可以看到已经远程连接成功了。
那如何在Spring Boot项目中使用呢?
四、使用Redis
首先一样的我们创建一个Spring Boot项目,添加依赖。
或者在pom.xml文件中添加如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
然后去到配置文件application.properties去配置Redis的连接信息
手动操作Redis
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeUnit;
/**
* 根据Redis API操作
*/
@RestController
@RequestMapping("/test")
public class TestController {
private static final String _REDIS_KEY = "myapplication_test";
// 注入Redis(spring boot 自动装配机制例子)
@Autowired
private RedisTemplate redisTemplate;
@RequestMapping("/setval")
public void setVal(String val) {
//常用5种数据类型 ——》得到操作Redis的类型(String)
redisTemplate.opsForValue().set(_REDIS_KEY,val,1000, TimeUnit.SECONDS); //后面还可以设置timeout过期时间 ,可以不设置那就不过期
}
@RequestMapping("/getval")
public String getval() {
// 因为返回的是对象,强转
return (String) redisTemplate.opsForValue().get(_REDIS_KEY);
}
}
关键点:
登录将登录信息保存到Redis中
(1)pom.xml依赖中添加
<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>
</dependency>
(2)application.properties
#redis配置
#设置Redis的连接相关信息
spring.redis.host=写自己的
spring.redis.port=6379
spring.redis.password=
#有16个库,不写的话就是第0个,这里用第一个
spring.redis.database=1
spring.session.store-type=redis
#session 过期时间
server.servlet.session.timeout=1800
spring.session.redis.flush-mode=on_save
spring.session.redis.namespace=spring:session
(3)因为我之前已经写好了用户登录信息保存到Session中的,所以这里的话就可以不用再去设置写了,直接就完成了。可以在客户端中查看
当我们把这里面的session删除后,那么去刷新页面就会发现当前用户处于未登录状态。