R shinny网站开发,科技与生活,阿里云备案后 增加网站,广告宣传片一、Redis配置文件详解 注意这是Redis服务本身的配置文件#xff0c;相当于maven的settings.xml#xff0c;而不是我们在springboot去配置Redis的那个application.yml。
核心部分include 引入其他redis配置文件#xff0c;相当于spring的importbind 设置IP#xf…一、Redis配置文件详解 注意这是Redis服务本身的配置文件相当于maven的settings.xml而不是我们在springboot去配置Redis的那个application.yml。
核心部分include 引入其他redis配置文件相当于spring的importbind 设置IP默认是127.0.0.1protected-mode yes 是否开启保护模式默认开启daemonize yes 是否以守护进程方式运行redis默认是no我们将其改为yespidfile /../../..pid 既然是守护进程就指定这个守护进程的pid文件loglevel 日志级别有好多种日志级别logfile 指定日志文件的位置databases 16 默认数据库16个always-show-logo yes 这个很有意思就是开启redis服务的时候会不会打印图标和springboot的那个图标一回事SNAPSHOP快照部分用于RDB持久化的配置
save 900 1save 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:0config get requirepass
1) requirepass
2) CsiFlow!#680 二、持久化 PS :RBD类比~AOF可以类比mysql的binlog去看 持久化的原因 redis必须持久化吗对啊redis是内存数据库不持久化的话断电即失但“断电”这只是redis需要持久化的其中一个原因。一共有两个原因
重用数据比如重启机器、机器故障之后恢复数据或者是为了做数据同步比如 Redis 集群的主从节点通过 RDB 文件同步数据
3 种持久化方式:
Redis 不同于 Memcached 的很重要一点就是Redis 支持持久化而且支持
快照snapshottingRDB只追加文件append-only file, AOFRDB 和 AOF 的混合持久化(Redis 4.0 新增)
2.1 RDB 持久化
Redis 可以通过创建快照来获得存储在内存里面的数据在 某个时间点上的副本。Redis 创建快照之后可以 将快照复制到主从结构其他服务器从而创建具有相同数据的服务器副本将快照留在原地以便重启服务器的时候使用。RDB持久化的过程跟浏览器下载文件的过程一样 先在dir指定的路径下创建一个dump.rdb文件往里写入数据写完后替换上次的dump.rdb文件。持久化了以后怎么用全自动的只要dump.rdb文件放在redis开启目录下redis每次开启时都会开机自检核对数据持久化是 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命令创建快照。1、触发RDB的时机 上面save设置了触发RDB的时机但这并不是全部的时机。
flushdb、flushall命令会自动触发RDB满足上面save规定关掉redis时
2、RDB 创建快照时会阻塞主线程吗 redis是单线程的但是在进行持久化的时候会fork一个子线程/子进程专门进行持久化操作主线程照样运行其他命令。
Redis 提供了两个命令来生成 RDB 快照文件
save : 同步保存操作会阻塞 Redis 主线程bgsave : fork 出一个子进程/线程子进程执行不会阻塞 Redis 主线程默认选项。 2.2 AOF 持久化
只记录写命令不记录读命令和binlog一样。恢复数据的时候把所有命令都执行一遍过 appendonly yes参数开启其他配置都不用动文件名appendonly.aof
2.3 二者的选择与比较
能说出这仨点即可
RDB运行效率更高所以RDB是redis默认开启的AOF默认不开启AOF的安全性更高。但是效率是牺牲数据的实时性带来的AOF可以用sync命令去设置每次修改都同步或者每秒同步但是RDB只能用save命令设置多少秒同步不能精确到每一条命令。试想我们设置一个save 60 10000,60s内发生一万次修改的时候持久化到硬盘但是如果还没到60s发生第9999次修改后宕机了那这9999次修改就丢失了。但AOF也不是完全安全的哦因为AOF默认开始的是每秒同步但是如果这1秒没来及同步就宕机了就会丢失这1秒的数据。当然如果你开启每条命令同步那就是绝对安全的了。RDB恢复速度更快。RDB存储的是数据库快照而AOF就和mysql的binlog一样存储的是一条条执行过的命令。如果要恢复大规模数据RDB直接拷贝快照但是AOF要一条条执行命令你想想哪个快
2.4 rdb或aof文件被破坏怎么办
aof文件是可以打开的比如说我们打开文件以后往里面随便敲点东西。那么下次redis开机会直接开不了
解决调用redis提供的redis-check-aof工具修复aof文件。
综上
如果Redis 保存的数据丢失一些也没什么影响的话可以选择使用 只用RDB。不建议单独使用 AOF因为RDB确实牛哇时不时地创建一个 RDB 快照可以进行数据库备份、更快的重启以及解决 AOF 引擎错误。如果企业对保存的数据要求安全性比较高的话建议同时开启 RDB 和 AOF 持久化或者开启 RDB 和 AOF 混合持久化
所以要么单独使用RDB要么使用RDBAOF要么使用混合策略就是不能单独使用AOF 三、Redis发布订阅 底层如何实现发布订阅逻辑redis是用C语言写的发布与订阅的功能在pubsub.c这个文件里想看源码的可以去看。 三个命令
subscribe 频道名publish 频道名unsubscribe 频道名 应用场景 redis的消息中间件功能只用于简单场景复杂场景的话我们用rocketMQ卡夫卡这种专业的消息中间件去做。 除了推送公众号这种显而易见的发布订阅聊天室可以用redis实现吗
可以管理者我自己瞎起的名字作为发布者所有聊天室的人作为订阅者。要想做到每一个发送的聊天信息都能被所有人收到那就要先发给管理者然后由管理者推送给所有订阅者。就是多了先“发给管理者”这一步而已 四、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 五、宕机后手动配置主机
哨兵模式
缓存穿透和雪崩