Redis(概述、应用场景、线程模式、数据持久化、数据一致、事务、集群、哨兵、key过期策略、缓存穿透、击穿、雪崩)
目录
Redis概述
应用场景
Redis的线程模式
数据持久化
1.Rdb(Redis DataBase)
2.Aof(Append Only File)
mysql与redis保持数据一致
redis事务
主从复制(Redis集群)
哨兵模式
key过期策略
缓存穿透、击穿、雪崩
1.缓存穿透:缓存中没有,在mysql中也没有
2.缓存击穿:数据在数据库中存在,某个热点的key(秒杀、抢购)但是在Redis中过期了,此时有大量请求,查询mysql
3.缓存雪崩:访问量很大,大量key失效
Redis概述
非关系型数据库,以键值对的形式存储,读写速度快,数据持久化,支持多类型数据。
应用场景
1.缓存:
访问量大的(秒杀、点赞)
修改少的
存储验证码(定时删除)
2.计数器
3.排行榜(zset)
4.去重(set)
5.消息队列(list) 排号
6.分布式锁
Redis的线程模式
在6.0之前是客户端连接和读写数据上是单线程模式
在6.0之后在客户端连接上是多线程模式,但在数据读写上是单线程的。
为什么使用单线程速度还很快?
1.基于内存存储
2.底层存储数据结构为hash表o(1)
3.单线程模式避免了线程的切换,性能消耗少,并且单线程避免了死锁的发生。
数据持久化
因为数据存储在内存,存在数据丢失,以便在重启后恢复数据。
1.Rdb(Redis DataBase)
在指定的时间间隔下,将数据以二进制的形式写入磁盘,默认为保存在 dump.rdb,当符合一定条件时 Redis 会自动将内存中的数据进行快照并持久化到硬盘。
触发快照时期
save:用来配置触发 Redis 的 RDB 持久化条件,也就是什么时候将内存中的数据保存到硬盘。比如"save m n"。表示 m 秒内数据集存在 n 次 修改时,自动触发 bgsave。
save 900 1 :表示 900 秒钟内至少 1 个键被更改则进行快照。
save 300 10 :表示 300 秒内至少 10 个键被更改则进行快照。
save 60 10000 :表示 60 秒内至少 10000 个键被更改则进行快照。
若不持久化,可以注释掉save
2.Aof(Append Only File)
以日志的形式进行存储,将 Redis 执行过的所有指令记录下来(读操作不记录)。
appendon1y no #默认是不开启 yes 开启
appendfilename appendonly.aof #默认的文件名是 appendonly.aof,可以通过 appendfilename 参数修改。
AOF 同步机制
appendfsync always #每次修改都会 sync。消耗性能
appendfsync everysec #每秒执行一次 sync,可能会丢失这 1s 的数据(默认)
重启 redis 生效
mysql与redis保持数据一致
将mysql中的数据修改后,redis中的数据需要与mysql中的数据保持一致
解决方式:
1.先更新mysql中的数据,再更新redis中的数据,如果redis数据更新失败,也会导致数据不一致。
2.先删除redis中的数据,再更新mysql 中的数据,再次查询的时候将数据添加到缓存中,但是当redis中的数据删除后,mysql正进行更新,线程1进行查询,右将mysql中的老数据查询到了redis中。
3.延迟双删:先将redis中的数据进行删除,如果查询数据时,将mysql中的数据又存到redis中,如果没有查询,则mysql中的数据进行修改后,再将数据存放在redis中。
redis事务
是为了保证一组命令作为整体来连续执行,其他客户端不会打断执行。
Multi:开启事务
Exec:执行事务
java代码实现事务控制
redisTemplate.multi();//开启redis事务
//命令1
//命令2
//命令3
redisTemplate.exec();//提交redis事务
主从复制(Redis集群)
将一台 Redis 服务器的数据,复制到其他的 Redis 服务器前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。实现数据的备份,即使其中一台机器宕机,其他机器还可以正常运行,保证数据的完整。
写入命令都直接发送到主机执行,主机将数据会自动备份到从机,实现读写分离,分担redis服务的压力。
哨兵模式
在redis的集群中可以配置哨兵(进程),
哨兵定期会给每个redis服务发送命令,如果能接收到响应,说明redis服务正常
否则redis服务故障,
重点是监测主机,一旦主机宕机,哨兵机制会从从机中选举一个作为主机。
key过期策略
时间到了,到底是key用不了了还是直接删除
1.惰性删除:当过期后,标记为过期的状态,当下次使用时,进行删除
2.定期删除:在定时的时间,进行扫描过期的key,然后删除
缓存穿透、击穿、雪崩
1.缓存穿透:缓存中没有,在mysql中也没有
解决方式:(id= -1)在Redis中设置key,值为null
2.缓存击穿:数据在数据库中存在,某个热点的key(秒杀、抢购)但是在Redis中过期了,此时有大量请求,查询mysql
解决方式
1.热点key设置过期时间加长(避免在访问量大的时候过期)
2.在mysql查询时加锁:查一次,将结果存在Redis中,就不用在mysql中查询 了。
3.缓存雪崩:访问量很大,大量key失效
解决方式
1.随机设置key失效时间
2.集群
3.不设置失效时间
3. 定时任务,在缓存失效前刷进缓存
相关文章:

Redis(概述、应用场景、线程模式、数据持久化、数据一致、事务、集群、哨兵、key过期策略、缓存穿透、击穿、雪崩)
目录 Redis概述 应用场景 Redis的线程模式 数据持久化 1.Rdb(Redis DataBase) 2.Aof(Append Only File) mysql与redis保持数据一致 redis事务 主从复制(Redis集群) 哨兵模式 key过期策略 缓存穿透、击穿、…...

ospf-gre隧道小练习
全网可达,R5路由表没有其他路由器的路由条目 注:每个路由器都添加了自己的环回,如R1就是1.1.1.1 R1可以分别ping通与R2,R3,R4之间的隧道 R1路由表上有所有路由器环回的路由条目 R5路由表上没有其他路由器的路由条目 实现代码: 首先将各个接口IP配好 边上3个路由器:[R6][R7][R…...

C++入门【29-C++ 把引用作为返回值】
通过使用引用来替代指针,会使 C 程序更容易阅读和维护。C 函数可以返回一个引用,方式与返回一个指针类似。 当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。例如,请看下面…...

基于Java SSM框架实现企业车辆管理系统项目【项目源码】
基于java的SSM框架实现企业车辆管理系统演示 JSP技术 JSP技术本身是一种脚本语言,但它的功能是十分强大的,因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时,它可以使显示逻辑和内容分开,这就极大的方便了运动员的需求…...

MyBatis的配置及简单使用
1.配置myBatis 1.myBatis的作用 MyBatis 是一个开源的持久层框架,它的主要作用是简化数据库操作,使得开发者能够更方便地与数据库进行交互。 MyBatis 允许开发者使用简单的 XML 或注解配置 SQL 映射,从而实现数据库操作,而不需要…...

【UE Niagara学习笔记】07 - 火焰的热变形效果
目录 效果 步骤 一、创建热变形材质 二、添加新的发射器 2.1 设置粒子材质 2.2 设置粒子初始大小 2.3 设置粒子持续生成 三、修改材质 四、设置粒子效果 在上一篇博客(【UE Niagara学习笔记】06 - 制作火焰喷射过程中飞舞的火星)的基础上继续…...

深度学习模型中 argparse 模块Python 脚本的部分参数解读
尤其注意下面这句中的action"store_true"的作用解析: --resume_ckpt 是一个标志参数,它不需要附加值。如果将该参数作为命令行参数传递给脚本,则 resume_ckpt 的值将被设置为 True。action"store_true" 意味着如果在命令…...

在win10和Linux上配置SSH 无密码登录
文章目录 一、用途二、在本地机器上使用ssh-keygen产生公钥私钥对1)在Linux (或macOS) 上产生SSH公私钥的方法2)在win10上产生SSH公私钥的方法a)检查windows 本地是否安装有sshb)在本地生成SSH密钥对(公钥和私钥&#…...

【VUE】无法加载文件 \node\vue.ps1,因为在此系统上禁止运行脚本。问题解决
问题描述 在VS Code中输入vue create -p dcloudio/uni-preset-vue uniapp-demo命令时报错 无法加载文件 D:\address\node\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Executi…...

C //练习 4-12 运用printd函数的设计思想编写一个递归版本的itoa函数,即通过递归调用把整数转换为字符串。
C程序设计语言 (第二版) 练习 4-12 练习 4-12 运用printd函数的设计思想编写一个递归版本的itoa函数,即通过递归调用把整数转换为字符串。 注意:代码在win32控制台运行,在不同的IDE环境下,有部分可能需要…...

【python playwright 安装及验证】
python playwright pip install playwright pip install playwright -i http://mirrors.aliyun.com/pypi/simple/ playwright codegen -o script.py -b chromium --ignore-https-errors --viewport-size “2560,1440” --proxy-server “http://100.8.64.8:60497” https://w…...

极简云源码已经开源
源码介绍 极简云已经开源 解绑卡密 查询卡密 总体来说还是很完善的 对接例子网盘里有 用户注册需要配置邮箱 上网页QQ邮箱标准版开启SMTP 然后生成授权码 后台发信邮箱里填就对了 实在不会配置邮箱的 可以下载网盘里的reg.php 把reg.php上传源码里的user目录 之后注册就不需要…...

Shell中cp和mv命令说明
在Shell(如Bash)中,cp 和 mv 是两个常用的命令,用于处理文件和目录。它们的用法和作用如下: cp 命令 作用:cp(copy的缩写)用于复制文件或目录。基本用法:cp [选项] 源文…...

cssip 第11章 : 安全网络架构和保护网络组件
11.1 OSI模型 协议:定义数据如何通过网络介质传输。 11.1.1 OSI模型的历史 开发 OSI 协议是为给所有计算机系统建立通用的通信结构或标准。 OSI模型表示:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。 11.1.3 封装/解…...

ITSS申报条件以及评审方式
01、四级申报基本条件: (1)具有独立法人地位; (2)已按照《运维服务能力成熟度》四级特征和关键指标建立了运维服务能力体系,且已有效运行三个月以上; (3)能…...

Qt中QByteArray之元素访问
访问QByteArray类对象中的某个元素主要有4种方式,分别为[]、at()、 data[]和constData[]。其中,[]和data]]方式为可读可写,at()和constData[]方式仅为可读。如果只是进行读操作,则通过at()和constData[]方式的访问速度最快,因为避…...

java实现教务管理系统
git地址:https://gitee.com/myshort-term/school-management 1.系统简介 开发教务管理系统程序,设计了ems(EMSApp)、dao(AssignmentDAO、CourseDAO、DeptDAO、ScoreDAO、UserDAO、EmailDAO)、domain&#…...

NPS配置https访问web管理页面
因为NPS默认也支持http的访问,所以在部署完后就一直没在意这个事情。 因为服务器是暴露在公网内的,所以还是要安全一点才行。不然一旦远控的机器被破解了就很危险了 一、使用nginx反向代理访问 1、首先在nps的配置文件里关闭使用https选项,…...

nginx和CDN应用
一、代理的工作机制 1.代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。 2.将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速响应。 二、代理服务器的…...

Keil5如何生成反汇编文件
Keil5如何生成反汇编文件 在Keil5界面下点击选项,选择“User”,勾选“After Build/Rebuild”中“RUN #1”,复制fromelf --text -a -c --outputxxx.dis xxx.axf 在Linker栏中找到“Linker Control string”里最后-o后的.axf文件,将…...

网络地图服务(WMS)详解
文章目录 1.概述2.GetCapabilities3.GetMap4.GetFeatureInfo 阅读本文之前可参考前文:《地图服务器GeoServer的安装与配置》与《GeoServer发布地图服务(WMS、WFS)》。 1.概述 经过前文的介绍,相信我们对WMS/WFS服务已经有了一个非…...

【排序篇3】快速排序、归并排序
目录 一、快速排序1.1 递归1.2 非递归 二、归并排序2.1 递归2.2 非递归 一、快速排序 1.1 递归 快速排序的递归采用二叉树的前序遍历的思路,单趟排序先确定好一个元素的位置,然后往后递归再确定其他子区域内的某个元素的位置,直到只有一个元…...

Python中的@property
在 Python 中,property 是一种装饰器,用于将一个方法转换成只读属性。通过使用 property 装饰器,你可以定义一个类的方法,使其在访问时可以像访问属性一样,而不是通过方法调用。 下面是一个简单的例子来说明 property …...

二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)
讲了这么多数据结构相关的知识(可以看我的数据结构文章专栏): 抓紧刷题巩固一下了 目录 1.单值二叉树 题目描述 思路1 代码1 思路2 代码2 2.相同的树 题目描述 思路 代码 3.二叉树的前序遍历 代码 思路 1.单值二叉树 965. 单值二叉树 - 力扣(LeetCod…...

自动化创建ETX用户帐号
在芯片设计行业,ETX是常见的远程访问环境。用户在通过ETX访问远程环境前必须首先加入ETX系统,然后通过profile分配相关的环境的访问权限。 通常这些操作在ETX WEB页面手工操作,如果我们期望实现用户帐号注册全自动化,就需要将以上…...

Android 实现集合去重的方法
方法一:使用HashSet 将集合转换为HashSet。 Set<String> set new HashSet<>(list);将HashSet转换回List。 List<String> uniqueList new ArrayList<>(set);方法二:使用Java 8的Stream API 将列表转换为Stream。 Stream&l…...

【Vue3】2-12 : 【案例】搜索关键词加筛选条件的综合
本书目录:点击进入 一、【案例】搜索关键词加筛选条件的综合 1.1、逻辑 1.2、效果 1.3、json数据 - 02-data.json 1.4、代码 一、【案例】搜索关键词加筛选条件的综合 1.1、逻辑 计算属性 - 绑定list,并过滤 input 双向绑定 - 当input改变时&…...

unity小程序websocket:nginx配置https (wss)转http (ws)及其他问题解决
目录 前言 实际运用场景 处理流程如下 nginx配置ssl和wss 配置过程中遇到的问题 1、无法连接服务器 2、通过IP可以访问,域名却不行 问题描述 解决 3、如何判断该域名是否备案了 前言 为了服务器网络的通用性,我们在实现移动端的游戏转微信小程序…...

MySql数据库对接Orcal数据库,需要考虑的前提问题
1.主表 从表的表关系;主键id 的关联问题; 2.字段类型的一致性问题(备注:像varchar类型的一点要谨防数据过长抛错); 3.实体类字段两表一致性问题; 4.入表不为空问题,判空尽量在实体…...

K8S的存储卷---数据卷
容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的。delete,K8S用控制器创建的pod,delete相当于重启,容器的状态也会恢复到初始状态。一旦回到初始状态,所有的后天编辑的文件都会消失 容器和节点之间创建一个…...