一使用
1、linux
**一、首先 关闭linux的防火墙**
该方法使用后在**重启系统后防火墙会自动开启**
1.首先使用命令:systemctl status firewalld.service 来查看防火墙的当前状态,如果当前状态为active则当前防火墙为运行状态。
2.第二步使用命令:systemctl stop firewalld.service 来关闭防火墙。
3.第三步再次使用:systemctl status firewalld.service 命令来查看防火墙的状态。 状态为dead则表明防火墙已经关闭
**二、检查配置文件**
2.1默认的bind 接口是127.0.0.1,也就是本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接,
这样可以避免将redis服务暴露于危险的网络环境中,防止一些不安全的人随随便便通过远程
连接到redis服务。
如果bind选项为空的话,那会接受所有来自于可用网络接口的连接。等价于把**bind设置成0.0.0.0**
2.2修改redis.conf配置文件实现(非必须),即把protected-mode yes修改成**protected-mode no**
**三 redis-server & redis.conf** **一定一定一定指定配置文件后台启动** 即使默认的配置文件叫redis.conf 也不会按照它来
6、启动redis服务:
1)前台启动:在任何目录下执行 redis-server
2)**后台启动**:在任何目录下执行 redis-server &
3)**启动redis服务时,指定配置文件**:redis-server redis.conf & 这种**用的最多**
7、关闭redis服务:
1)、通过kill命令:
ps -ef|grep redis查看pid
kill -9 pid
2)、**通过redis-cli命令关闭:**
redis-cli shutdown
8、redis的**客户端:用来连接redis服务,向redis服务端发送命令,并且显示redis服务处理结果。**
redis-cli:是redis自带客户端,**使用命令redis-cli就可以启动redis的客户端程序。**
./mysql -uroot -p
redis-cli:**默认连接127.0.0.1(本机)的6379端口上的redis服务。**
redis-cli -p 端口号:连接127.0.0.1(本机)的指定端口上的redis服务。
redis-cli -h ip地址 -p 端口:**连接指定ip主机上的指定端口的redis服务**。
9、退出客户端:在客户端执行命令:exit或者quit
配置文件
13、redis的配置文件:在redis根目录下提供redis.conf配置文件;
可以配置一些redis服务端运行时的一些参数;
如果不使用配置文件,那么redis会按照默认的参数运行;
如果使用配置文件,在启动redis服务时必须指定所使用的配置文件。
1)、redis配置文件中**关于网络的配置**:
port:指定redis服务所使用的端口,默认使用6379。
bind: 配置客户端连接redis服务时,所能使用的ip地址, **默认情况下**,**不配置bind**,客户端连接redis服务时,通过服务器上任何一个ip都能连接到redis服务;一旦配置了bind,客户端就只能通过bind指定的ip地址连接redis服务。
一般情况下,bind都是配置服务器上某一个真实ip。
**如果配置了port和bind**,则**客户端连接/关闭redis服务**时,**必须指定端口和ip**:
redis-cli :默认连接127.0.0.1本机上的6379端口服务
redis-cli -h 192.168.11.128 -p 6380
redis-cli -h 192.168.11.128 -p 6380 shutdown
2)、**常规配置**:
loglevel:配置**日志级别**,开发阶段配置debug,上线阶段配置notice或者warning.
logfile:指定**日志文件**。redis在运行过程中,会输出一些日志信息;默认情况下,这些日志信息会输出到控制台;我们可以使用logfile配置日志文件,使redis**把日志信息输出到指定文件中**。
databases:**配置redis服务默认创建的数据库实例个数**,默认值是16。
3)、**安全配置**:(**不常用 要求高速 所以安全性没那么高**)
requirepass:**设置访问redis服务时所使用的密码**;**默认不使用**。
此参数必须在protected-mode=yes时才起作用。
一旦设置了密码验证,客户端连接redis服务时,必须使用密码连接:redis-cli -h ip -p port -a pwd
2. windows
Redis-x64-3.2.100.rar 解压缩到一个 非中文 的目录
redis-server.exe:服务端, **启动**后,不要关闭
在D:\java动力节点\SpringBoot\动力节点-王鹤老师SpringBoot\工具\Redis-x64-3.2.100 **目录下执行**Redis-x64-3.2.100>(cmd: redis-server.exe redis.windows.conf
redis-cli.exe:客户端, 访问redis中的数据
实际应用
IPO和Fortune
瑞吉外卖(还没做)
学习springsecurity中实际用到了redis
用户登录认证通过时
// userid作为key 完整的用户信息存入redis
//key是userid 虽然登陆一次就有一个token 但是存 只会存一个 无序不可重复!
redisCache.setCacheObject("login:"+id,loginUser);
用户退出时
redisCache.deleteObject("login:"+id);
JwtAuthenticationTokenFilter
//去redis中获取用户信息 能执行到这里 说明肯定拿到了userid 否则被异常处理了
LoginUser cacheObject = redisCache.getCacheObject("login:" + userid);
当数据库里的数据修改以后怎么和redis缓存进行同步?
思考:拿springsecurity举例(虽然没有做用户修改密码功能) 当用户修改了密码 redis却无法感知。我想解决办法就像现在的app 修改密码以后强制你重新登录
做缓存的前提是数据不保持实时一致,如果需要实时一致的数据,那就失去了为MySQL做缓存的意义,还不如直接在redis里实现业务。
逻辑上是这样:
注意:以下才是使用redis缓存的实际逻辑: (上面的springsecurity提前把数据查出来放进缓存 是个例)每当你查询数据,会先从redis里查询,发现没有这条数据再去Mysql里查询,并把结果写入redis同时设置生存时间。
结合java代码理解
public Object getObjectInclNullById(Integer id) {
// 从缓存中获取数据
Object cacheValue = cache.get(id);
// 缓存为空
if (cacheValue == null) {
// 从数据库中获取
Object storageValue = storage.get(key);
// 缓存空对象
cache.set(key, storageValue);
// 如果存储数据为空,需要设置一个过期时间(300秒)
if (storageValue == null) {
// 必须设置过期时间,否则有被攻击的风险
cache.expire(key, 60 * 5);
}
return storageValue;
}
return cacheValue;
}
------
著作权归所有
原文链接:https://javaguide.cn/database/redis/redis-questions-02.html
当对Mysql进行修改和新增操作后,redis并不会修改。只有当key过期下次查询时才会更新数据。