Redis(五)—— Redis进阶部分

一、Redis配置文件详解

 

        注意这是Redis服务本身的配置文件,相当于maven的settings.xml,而不是我们在springboot去配置Redis的那个application.yml。

========================核心部分======================

include 引入其他redis配置文件,相当于spring的<import>

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需要持久化的其中一个原因。一共有两个原因:

  • 重用数据(比如重启机器、机器故障之后恢复数据)
  • 或者是为了做数据同步(比如 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的时机,但这并不是全部的时机。

  1. flushdb、flushall命令会自动触发RDB
  2. 满足上面save规定
  3. 关掉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/127844443icon-default.png?t=N6B9https://blog.csdn.net/qq_44886213/article/details/127844443

 

五、宕机后手动配置主机

哨兵模式

缓存穿透和雪崩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/52203.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring MVC学习笔记,包含mvc架构使用,过滤器、拦截器、执行流程等等

&#x1f600;&#x1f600;&#x1f600;创作不易&#xff0c;各位看官点赞收藏. 文章目录 Spring MVC 习笔记1、Spring MVC demo2、Spring MVC 中常见注解3、数据处理3.1、请求参数处理3.2、响应数据处理 4、RESTFul 风格5、静态资源处理6、HttpMessageConverter 转换器7、过…

在周末,找回属于自己的时间~

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f466;&#x1f3fb;个人主页 &#xff1a; 点击这里 &#x1f4bb;推荐专栏1&#xff1a;PHP面试题专区&#xff08;2023&#xff09; PHP入门基…

词典项目练习

思维导图 客户端 #include "head.h" //用户提示界面 void help_info1() {printf("\t-----------------------------------------------\n");printf("\t| HENRY 在线辞典 |\n");printf("\t|版本:0.0.1 …

Xamarin.Android实现加载中的效果

目录 1、说明2、代码如下2.1 图1的代码2.1.1、创建一个Activity或者Fragment&#xff0c;如下&#xff1a;2.1.2、创建Layout2.1.3、如何使用 2.2 图2的代码 4、其他补充4.1 C#与Java中的匿名类4.2 、其他知识点 5、参考资料 1、说明 在实际使用过程中&#xff0c;常常会用到点…

python和c加加有什么区别,c和c++和python先学哪个

本篇文章给大家谈谈c加加编程和python编程有什么区别&#xff0c;以及python和c加加有什么区别&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 1、python和c学哪个好 学C好。 C通常比Python更快&#xff0c;因为C是一种编译型语言&#xff0c;而Python则是…

批量插入数据、MVC三层分离

八、批量插入数据 1、使用Statement&#xff08;&#xff09; 2、使用PreparedStatement() 3、使用批量操作API 4、优化 九、MVC三层分离

JDBC Some Templates

JDBCTemplate 是Spring对JDBC的封装&#xff0c;使用JDBCTemplate方便实现对数据的操作。 <!-- orm:Object relationship mapping m对象 关系 映射-->引入依赖 <!-- 基于Maven依赖的传递性&#xff0c;导入spring-content依赖即可导入当前所需的所有…

Java语言跨平台执行的核心JVM

本文重点 在前面的课程中,我们介绍了java中的三层JDK->JRE->JVM,其中JVM称为Java的虚拟机,只是用来执行的,JRE是运行环境,要想在操作系统中运行,除了JVM还需要类库,JDK=JRE+开发的包和工具。本文就将介绍一下JVM究竟为何物? JVM 有的人会认为JVM是java中的东西…

【业务功能篇59】Springboot + Spring Security 权限管理 【下篇】

UserDetails接口定义了以下方法&#xff1a; getAuthorities(): 返回用户被授予的权限集合。这个方法返回的是一个集合类型&#xff0c;其中每个元素都是一个GrantedAuthority对象&#xff0c;表示用户被授予的权限。getPassword(): 返回用户的密码。这个方法返回的是一个字符…

❤️创意网页:炫酷的网页 - 创造华丽粒子动画

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

【雕爷学编程】MicroPython动手做(19)——掌控板之蜂鸣器与音乐2

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

IntelliJ IDEA 2023.2 新版本,拥抱 AI

IntelliJ IDEA 近期连续发布多个EAP版本&#xff0c;官方在对用户体验不断优化的同时&#xff0c;也新增了一些不错的功能&#xff0c;尤其是人工智能助手补充&#xff0c;AI Assistant&#xff0c;相信在后续IDEA使用中&#xff0c;会对开发者工作效率带来不错的提升。 以下是…

eda、gnm、anm究竟是个啥?

安装prody pip install prody -i https://pypi.tuna.tsinghua.edu.cn/simpleeda、anm、gnm eda(essential dynamics analysis) 另一个名字PCA(Principal Component Analysis) 或 NMA(Normal Mode Analysis)。 eda分析可以帮助人们理解生物大分子基本的运动模式和构象变化。…

211. 添加与搜索单词 - 数据结构设计---------------字典树

211. 添加与搜索单词 - 数据结构设计 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 211. 添加与搜索单词 - 数据结构设计 https://leetcode.cn/problems/design-add-and-search-words-data-structure/descriptio…

平板光波导中导模的(注意不是泄露模)传播常数β的matlab计算(验证了是对的)

参照的是导波光学_王建(清华大学)的公式(3-1-2、3-1-3)&#xff0c;算的参数是这本书的图3-3的。 function []PropagationConstantsMain() clear;clc;close all lambda01.55;%真空或空气中的入射波长&#xff0c;单位um k02*pi/lambda0; m3;%导模阶数(需要人为指定) n11.62;%芯…

【Qt】利用Tool Button控件创建下拉菜单按钮

功能描述 利用qt进行界面设计和开发&#xff0c;创建下拉按钮。 详细实现 1、在qt侧工具栏利用设计打开.ui文件 2、创建按钮 创建一个Tool Button按钮&#xff0c;并在属性窗口中的QToolButton栏中选中MenuButtonPopup属性。 3、创建action 在Action编辑器创建对应的ac…

HTML不常用但是好用的标签

sub sup <p>这个文本包含 <sub>111</sub>文本。</p> <p>这个文本包含 <sup>上标</sup> 文本。</p>下标文本将会显示在当前文本流中字符高度的一半为基准线的下方&#xff0c;但是与当前文本流中文字的字体和字号都是一样的。…

科技项目验收测试:验证软件产品功能与性能的有效手段

科技项目验收测试是验证软件产品功能与性能的重要手段&#xff0c;在项目开发中起到了至关重要的作用。本文将从产品质量、需求验证、性能测试等方面&#xff0c;探讨科技项目验收测试的有效手段。 1、产品质量保证是验收测试的核心 科技项目验收测试的核心目标是验证软件产品…

Linux CentOS监控系统的运行情况工具 - top/htop/glances/sar/nmon

在CentOS系统中&#xff0c;您可以使用以下工具来监控系统的运行情况&#xff1a; 1. top&#xff1a; top 是一个命令行工具&#xff0c;用于实时监控系统的进程、CPU、内存和负载情况。您可以使用以下命令来启动 top&#xff1a; top 输出 2. htop&#xff1a; htop 是一…

github token使用方法

git remote set-url origin https://<githubtoken>github.com/<username>/<repositoryname>.git 在私有仓库的HTTPS的url上加入<githubtoken>即为token url&#xff0c;可以免ssh key登录
最新文章