Redis(五)—— Redis进阶部分
一、Redis配置文件详解
注意这是Redis服务本身的配置文件,相当于maven的settings.xml,而不是我们在springboot去配置Redis的那个application.yml。
========================核心部分======================include 引入其他redis配置文件,相当于spring的<import>bind 设置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:0>config get requirepass
1) "requirepass"
2) "CsiFlow!@#680"
二、持久化
PS :RBD类比~,AOF可以类比mysql的binlog去看
持久化的原因:
redis必须持久化吗?对啊!redis是内存数据库,不持久化的话断电即失!但“断电”这只是redis需要持久化的其中一个原因。一共有两个原因:
- 重用数据(比如重启机器、机器故障之后恢复数据)
- 或者是为了做数据同步(比如 Redis 集群的主从节点通过 RDB 文件同步数据)
3 种持久化方式:
Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持
- 快照(snapshotting,RDB)
- 只追加文件(append-only file, AOF)
- RDB 和 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,要么使用RDB+AOF,要么使用混合策略,就是不能单独使用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
五、宕机后手动配置主机
哨兵模式
缓存穿透和雪崩
相关文章:

Redis(五)—— Redis进阶部分
一、Redis配置文件详解 注意这是Redis服务本身的配置文件,相当于maven的settings.xml,而不是我们在springboot去配置Redis的那个application.yml。 核心部分include 引入其他redis配置文件,相当于spring的<import>bind 设置IP…...

Go Ethereum源码学习笔记000
Go Ethereum源码学习笔记 前言时代的弄潮儿: Blockchain为什么要研究以太坊& Go-Ethereum 的原理 前言 这个专栏的内容是免费的,因为自己这边都是基于开源库和开源内容整理的学习笔记,在这个过程中进行增删改查,将自己的理解融入其中&am…...

layui 设置选中时间为当天时间最大值23:59:59、laydate设置选中时间为当天时间最大值23:59:59
既是涨知识的一天,又是干前端的一天! laydate.render({ elem: #validityPeriod, //type: datetime,//类型要一定要相匹配 type: date, // 设置日期选择模式 trigger: click, format: yyyy-MM-dd HH:mm:ss, // 设置日期的显示格式 min: startDate, max: …...

HTML+CSS+JavaScript:验证码60秒倒计时按钮
一、需求 1、打开浏览器时,按钮禁用,按钮内容为60秒倒计时 2、倒计时结束时,按钮禁用被取消 二、应用场景 1、60秒内不得重新发送验证码 2、我已阅读用户协议(5s) 三、完整代码 <!DOCTYPE html> <html l…...

互联网医院系统开发:打造便捷高效的医疗服务平台
随着互联网技术的飞速发展,互联网医院系统的出现为医疗行业带来了许多新的机遇和优势。互联网医院系统是一种基于互联网技术的医疗服务平台,旨在提供便捷、高效、个性化的医疗服务。下面将介绍互联网医院系统开发的优势。 提供便捷的医疗服务&#x…...

章节5:SQL注入之WAF绕过
章节5:SQL注入之WAF绕过 5.1 SQL注入之WAF绕过上 WAF拦截原理:WAF从规则库中匹配敏感字符进行拦截。 5.2 SQL注入之WAF绕过下 (原理简单了解) 关键词大小写绕过 有的WAF因为规则设计的问题,只匹配纯大写或纯小写的…...

iphone卡在恢复模式怎么办?修复办法分享!
iPhone 卡在恢复屏幕问题是 iPhone 用户在软件更新或恢复期间的常见问题。如果你也遇到此问题,不要着急,接下来我们将探讨 iPhone 卡在恢复屏幕上的主要原因,以及如何轻松修复它。 iPhone卡在恢复屏幕问题上没有一个特别的原因,但…...

uniApp禁止遮罩弹窗下的页面滚动
文章目录 问题解决代码 问题 最近用uniApp开发一款软件,页面是可以滚动的长列表,自定义组件弹窗遮罩出来后,滑动屏幕,页面也跟着滚动。研究了网上的解决办法 在遮罩层的最外层的view元素中加入 touchmove.stop.prevent"moveH…...

【Huawei】WLAN实验(三层发现)
拓扑图如上,AP与S1在同一VLAN,S1与AC在同一VLAN,AP采用三层发现AC,AP与客户的DHCP由S1提供。 S1配置 vlan batch 10 20 30 dhcp enable ip pool apgateway-list 192.168.20.1network 192.168.20.0 mask 255.255.255.0option 43 sub-option …...

Windows 10 安装 PostgreSQL 12.x 报错 ‘psql‘ 不是内部或外部命令 由于找不到文件libintl-9.dll等问题
目录 序言一、问题总结问题 1 psql 不是内部或外部命令,也不是可运行的程序或批处理文件。问题 2 “由于找不到文件libintl-9.dll,无法继续执行代码,重新安装程序可能会解决此问题。“1、卸载2、安装3、安装 Stack Builder (这个可…...

在CSDN学Golang云原生(持续交付Argo)
一,Argo安装配置 Argo是一个基于Kubernetes的容器本地工作流引擎,可以帮助用户在Kubernetes上创建、运行和维护容器化应用程序。下面是Argo安装配置的步骤: 首先确保你已经安装了kubectl和helm添加chart仓库 $ helm repo add argo https:/…...

安全运维 -- splunk 集群配置归档
0x00 背景 splunk 集群索引服务器容量满了以后,为了防止数据丢失,需要对旧数据进行归档保存。 0x01 原理 指定一台大容量服务器,创建共享文件夹,并将集群里的所有indexer指向这个归档共享目录。 0x02 实施 集群的每个indexer都…...

使用kind在mac本地搭建k8s及istio
序 之前使用multipass装ubuntu,然后再用microk8s搭建k8s,这会直接用orbstack及kind在本地搭建k8s及istio 安装 orbstack 通过orbstack这个地址下载,主要是开销低,用来替代docker desktop 添加国内源 ~/.orbstack/config/dock…...

11、springboot项目启动时对容器中的bean进行延迟初始化
springboot项目启动时对容器中的bean进行延迟初始化 预初始化: Spring Boot在启动应用时,会启动Spring容器,当启动Spring容器时,Spring会自动初始化容器中所有的singleton Bean——这是默认行为 预初始化的好处: 1、项…...

树莓派镜像安装 + 设置 + 镜像批量化操作 - 自动化烧写SD Card (三)
简介 仍然强调所有的测试都是来自树莓派3B, 并使用手头上的绿联读卡器进行测试;实现方案: 如 《树莓派镜像安装 设置 镜像批量化操作 - USB boot (二)》中所写, 可以使用树莓派USB挂载方式, 编写自动化脚本, 当有对应的设备出现的时候,格式化 烧写镜…...

C++继承特性(4)——友元与静态
目录 一.继承与友元的关系 二.继承与静态成员的关系 先回顾一下静态成员变量: 运行TestPerson()函数: 测试案例2: 三.练习题: 一.继承与友元的关系 友元关系不能被继承,也就是说父类中的友元函数不能访问子类私…...

VR党建主题数字互动虚拟展馆软件开启党建铸魂育人新篇章
当今时代新媒体技术的发展对大学生的学习、生活等产生着深远的影响。高校作为党建育人的重要场所,充分借助VR技术的强大优势,合理运用到育人工作中,能够不断丰富教育内容。VR智慧党建展厅展馆结合VR技术营造的虚拟现实空间,将党的…...

单网卡实现 双IP 双网段(内外网)同时运行
前提是内外网是同一网线连接(双网线双网卡的具体可以自己搜索下。理论上都设置静态IP后把外网跃点设置小,内网跃点设置大,关闭自动跃点设置同一个接口跃点数,在通过命令提示符添加内网网址走内网网关就可以了)。 需要使…...

C# 委托2
一.委托 1.委托概述: (1)声明一个委托类型。委托声明看上去和方法声明相似,只是没有实现块。 (2)使用该委托类型声明一个委托变量 (3)创建委托类型的对象,把它赋值给委…...

【计算机网络】网络层协议 -- IP协议
文章目录 1. 网络层做了什么事2. IP协议的简介3. IP协议格式4. 分片与组装5. 网段划分6. 特殊的IP地址7. IP地址的数量限制8. 私网IP地址和公网IP地址9. 路由 1. 网络层做了什么事 保证数据可靠地从一台主机到另一台主机 当双方在进行基于TCP的网络通信时,要保证将数…...

记录浙政钉的消息通知的一次开发实战记录
先忍不住吐槽下钉钉的开发文档,实在是不敢恭维,首先每个术语描述都是不统一的,比如有些地方写“”群聊“”,有些地方写“会话”,有些地方写“钉消息”,总之他们自己想怎么写,怎么写,…...

详解主流的Hybrid App 技术框架与研发方案
移动操作系统在经历了诸神混战之后,BlackBerry OS、Symbian OS、Windows Phone等早期的移动操作系统逐渐因失去竞争力而退出。目前,市场上主要只剩下安卓和iOS两大阵营,使得iOS和安卓工程师成为抢手资源。然而,由于两者系统的差异…...

【软件测试】性能测试工具- LoadRunner的介绍和使用
目录 1. LoadRunner是什么2. LoadRunner环境搭建3. LoadRunner三大组件4. LoadRunner脚本录制4.1 WebTous项目介绍启动WebTous项目访问WebTous项目相关配置 4.2 脚本录制新建脚本录制脚本运行脚本 4.3 脚本加强插入事务插入集合点插入检查点插入日志字符串比较 1. LoadRunner是…...

react
react权威面试题 1.jsx转化过程2.fiber架构的理解,解决了什么问题?理解fiber是什么 3.react diff原理tree diffcomponent diffelement diff 4.如何提高组件渲染效率shouldComponentUpdatePureComponentReact.memo 5.react中render方法原理,触…...

AI入门:了解人工智能的基础知识
介绍 人工智能(Artificial Intelligence,简称AI)是一门研究如何使机器能够智能地模拟人类思维和行为的科学与技术领域。在过去几十年里,AI取得了显著的发展,并且在各个领域都产生了深远的影响。本文将引导您进入AI的世…...

ACL原理
ACL原理 ACL是一种用于控制网络设备访问权限的技术,可以通过配置ACL来限制特定用户、应用程序或网络设备对网络资源的访问。 1、ACL(Access Control List) 2、ACL是一种包过滤技术。 3、ACL基于IP包头的IP地址、四层TCP/UDP头部的端口号、…...

EP4CE6E22C8N Error: Can‘t recognize silicon ID for device 1
经过各种排查,发现是AS配置不对,仅供参考 工程 参考某处的工程画板配置的FPGA板子,用于学习入门FPGA。 烧录sof文件是正常的,并能正常运行。 但是烧录jic是failed,查看报错为:Error: Can’t recognize si…...

vue3-seamless-scroll无缝滚动
安装 npm install vue3-seamless-scroll --save 组件配置 list 无缝滚动列表数据,组件内部使用列表长度。 type: Array required: true v-model 通过v-model控制动画滚动与停止,默认开始滚动 type: Boolean, default: true, required: false dire…...

适配器模式——不兼容结构的协调
1、简介 1.1、概述 有的笔记本电脑的工作电压是20V,而我国的家庭用电是220V,如何让20V的笔记本电脑能够在220V的电压下工作?答案是引入一个电源适配器(AC Adapter),俗称充电器/变压器。有了这…...

【NVIDIA CUDA】2023 CUDA夏令营编程模型(一)
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...