注意这是Redis服务本身的配置文件,相当于maven的settings.xml,而不是我们在springboot去配置Redis的那个application.yml。
========================核心部分======================
include 引入其他redis配置文件,相当于spring的
bind 设置IP,默认是127.0.0.1
protected-mode yes 是否开启保护模式,默认开启
daemonize yes 是否以守护进程方式运行redis,默认是no,我们将其改为yes
pidfile /../../..pid 既然是守护进程,就指定这个守护进程的pid文件
loglevel 日志级别,有好多种日志级别
logfile 指定日志文件的位置
databases 16 默认数据库16个
always-show-logo yes 这个很有意思,就是开启redis服务的时候会不会打印图标(和springboot的那个图标一回事)
==============SNAPSHOP快照部分(用于RDB持久化的配置)===============
save 900 1
save 60 10000 设置多长时间、多少次修改持久化一次,60s内修改1万次进行一次持久化
stop-writes-on-bgsave-error yes 持久化出错后,是否继续工作
rdbcompression yes 是否要压缩rdb文件,默认是压缩
rdbchecksum yes 保存rdb文件的时候是否检查文件错误
dir ./ rdb文件和aof文件的保存目录(RDB和AOF保存在相同目录下,都通过dir指定)
===============REPLICATION主从复制用到的配置=======================
下次再讲
========================SECURITY安全配置========================
requirepass 123456 设置密码
=====================CLIENT 对客户端的限制(不用动,了解即可)=======
maxclients 10000 最多可以连接redis-server的客户端数量
maxmemory redis的最大运行内存
maxmemory-policy redis要超过最大运行内存了怎么办?同JUC的6个策略(1-6从谨慎到发疯)
# 1. noeviction 一个都不能删,直接返回redis运行内存不够了这个错误
# 2. volatile-lru 只对设置了过期时间的key进行LRU
# 3. allkeys-lru 对所有 key进行LRU
# 4. valatile-ttl 删除即将过期的key
# 5. volatile-random 随机删除即将过期的key
# 6. allkeys-random 随机删除key
=================APPEND ONLY AOF持久化配置================
appendoNly no 默认不开启AOF持久化,默认使用RDB方式持久化,因为RDB在大部分情况下就够用了
appendfilename AOF持久化文件名
appendfsync always/everysec/no # 每次修改都sync,消耗性能/每秒一次sync,可能会丢失这1s的数据/不执行sync,这个时候操作系统自己同步数据,速度最快
在redis中查看密码的命令:
cj:0>config get requirepass
1) "requirepass"
2) "CsiFlow!@#680"
PS :RBD类比~,AOF可以类比mysql的binlog去看
持久化的原因:
redis必须持久化吗?对啊!redis是内存数据库,不持久化的话断电即失!但“断电”这只是redis需要持久化的其中一个原因。一共有两个原因:
3 种持久化方式:
Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持
redis.conf
配置文件中默认有此下配置(不用改,默认的就很好用):save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,Redis就会自动触发bgsave命令创建快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,Redis就会自动触发bgsave命令创建快照。
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,Redis就会自动触发bgsave命令创建快照。
上面save设置了触发RDB的时机,但这并不是全部的时机。
redis是单线程的,但是在进行持久化的时候会fork一个子线程/子进程,专门进行持久化操作,主线程照样运行其他命令。
Redis 提供了两个命令来生成 RDB 快照文件:
save
: 同步保存操作,会阻塞 Redis 主线程;bgsave
: fork 出一个子进程/线程,子进程执行,不会阻塞 Redis 主线程,默认选项。appendonly
yes参数开启,其他配置都不用动能说出这仨点即可
aof文件是可以打开的,比如说我们打开文件以后,往里面随便敲点东西。那么下次redis开机会直接开不了
解决:调用redis提供的redis-check-aof工具修复aof文件。
综上:
所以,要么单独使用RDB,要么使用RDB+AOF,要么使用混合策略,就是不能单独使用AOF!
底层如何实现发布订阅逻辑:redis是用C语言写的,发布与订阅的功能在pubsub.c这个文件里,想看源码的可以去看。
三个命令:
应用场景:
redis的消息中间件功能只用于简单场景,复杂场景的话我们用rocketMQ,卡夫卡这种专业的消息中间件去做。
除了推送公众号这种显而易见的发布订阅,聊天室可以用redis实现吗?
可以!管理者(我自己瞎起的名字)作为发布者,所有聊天室的人作为订阅者。要想做到每一个发送的聊天信息都能被所有人收到,那就要先发给管理者,然后由管理者推送给所有订阅者。就是多了先“发给管理者”这一步而已
4.1 集群搭建
和docker“数据卷容器”实现多个容器之间的数据同步,“通过docker run --volumes-from docker01挂载了docker01,那么docker01就是docker02的父容器”的思想是一样的。
https://blog.csdn.net/qq_44886213/article/details/127844443https://blog.csdn.net/qq_44886213/article/details/127844443
五、宕机后手动配置主机
哨兵模式
缓存穿透和雪崩