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. 定时任务,在缓存失效前刷进缓存

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剑指offer面试题5 从尾到头打印链表

考察点 链表知识点 数组和链表都属于线性表。线性表在计算机中有俩种存储方式,按照顺序存储的就是数组,按照链式存储的就是链表,二者最大的区别在于一个是顺序存储(地址空间连续)一个是链式存储(地址空间不连续)。因此数组元素只包含元素值…

iToF wiggling校正技术

iToF技术中,wiggling是一种校正处理方法。在iToF模组获取深度图后,会进行一系列的补偿和校正处理,wiggling校正就是其中之一。这样的校正处理有助于最终获得更准确的3D数据。 wiggling校正技术有哪些应用场景 wiggling校正技术主要应用在间接飞行时间测量(iToF)装置中,…

【大厂秘籍】 - Java多线程面试题

Java多线程面试题 友情提示,看完此文,在Java多线程这块,基本上可以吊打面试官了 线程和进程的区别 进程是资源分配的最小单位,线程是CPU调度的最小单位 线程是进程的子集,一个进程可以有很多线程,每条线…

分享八个常用的 JavaScript 库

今天给大家分享8个常用的 JavaScript 库,掌握这些 JavaScript 工具库,让你的项目看起来很棒。 专家与普通人的重要区别在于他们善于使用工具,留出更多的时间用于计划和思考。编写代码也是如此。有了合适的工具,你就有更多的时间来…

UDS 诊断通讯

UDS有哪些车型支持 UDS(统一诊断服务)协议被广泛应用于汽车行业中,支持多种车型。具体来说,UDS协议被用于汽车电子控制单元(ECU)之间的通讯,以实现故障诊断、标定、编程和监控等功能。 支持UDS协议的车型包括但不限于以下几种: 奥迪(Audi)车型:包括A3、A4、A5、A6…

239.【2023年华为OD机试真题(C卷)】求幸存者之和(模拟跳数-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-求幸存数之和二.解题思路三.题解代码Python题解…

剑指offer题解合集——Week3day7

文章目录 剑指offerWeek3周七:分行从上往下打印二叉树AC代码思路: 周日:之字形打印二叉树AC代码思路: 剑指offerWeek3 周七:分行从上往下打印二叉树 题目链接:分行从上往下打印二叉树 从上到下按层打印…

JDK8终将走进历史,Oracle宣布JDK继续免费

目录 前言Oracle 已免费提供 JDKOracle Java SE 产品最新动态 为什么业界中用JDK8那么多Java SE 8 公共更新结束总结 前言 今天想到上个月无意中听闻到的一句话:JDK8之后收费了,所以大家都用JDK8。当时只觉得这个话说得不对,但因为和说话的人…

Django数据库选移的preserve_default=False是什么意思?

有下面的迁移命令: migrations.AddField(model_namemovie,namemov_group,fieldmodels.CharField(defaultdjango.utils.timezone.now, max_length30),preserve_defaultFalse,),迁移命令中的preserve_defaultFalse是什么意思呢? 答:如果模型定…

点击随机红点的简单游戏(pygame)

import pygame import sys import random# 初始化 Pygame pygame.init()# 设置窗口大小 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("Click the Red Dot")# 定义颜色 black (0, 0, 0) red (255, 0, 0)…

Apache POI 导出Excel报表

大家好我是苏麟 , 今天聊聊Apache POI . Apache POI 介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下,POI 都是用于操作 E…

浅谈 Raft 分布式一致性协议|图解 Raft

前言 大家好,这里是白泽。本文是一年多前参加字节训练营针对 Raft 自我整理的笔记。 本篇文章将模拟一个KV数据读写服务,从提供单一节点读写服务,到结合分布式一致性协议(Raft)后,逐步扩展为一个分布式的…

2024年华为OD机试真题-手机App防沉迷系统-Java-OD统一考试(C卷)

题目描述: 智能手机方便了我们生活的同时,也侵占了我们不少的时间。“手机App防沉迷系统”能够让我们每天合理的规划手机App使用时间,在正确的时间做正确的事。 它的大概原理是这样的: 1、在一天24小时内,可注册每个Ap…

Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(3)

Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(3) 在 Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin&#…

python for...else用法,一个实例就能让你明白

直接上代码,很简单,不用讲解吧,看不懂的话,就需要补充下基础知识了。 def funct2():for i in range(4):try:assert i>2print("success")breakexcept Exception as e:print(error)continueelse:print(循环不合预期)d…

读写分离的手段——主从复制,解决读流量大大高于写流量的问题

应用场景 假设说有这么一种业务场景,读流量显著高于写流量,你要怎么优化呢。因为写是要加锁的,可能就会阻塞你读请求。而且其实读多写少的场景还很多见,比如电商平台,用户浏览n多个商品才会买一个。 大部分人的思路可…

List集合遍历过程中修改元素(有坑)

说来惭愧,学 java 2年了,对 “Java是值传递” 这句话还没有理解它的精髓,以至于编程的时候出现了一些错误,这里记录一下。 一.问题再现 1.1将List集合中的每个字符串更改为其他值 1.2将List集合中的对象更改为其他对象 二.问题分…

extern static 在linux 和 qt下差别

从五个点来说 1.p3.h 中 静态定义一个const的int 变量并且赋值 2.p5.h 声明函数test2的定义 3. 直接extern 引用声明 test1() 函数 而不是像p5.h一样 把函数声明写到头文件 在别的.c文件直接包含头文件 第二点和第三点 是引用声明函数的两种用法 4.main函数 中static静态定…

修改Echarts图表的标题和副标题的内容

直接上代码 var graphicConfig [ { type: "text", left: "center", top: "center", style: { text: "包日", // 初始化为空字符串 textAlign: "center", fill: "#000", fontSize: 14, fontWeight: "bold&qu…

光猫(无限路由器)插入可移动硬盘搭建简易版的NAS

1.场景分析 最近查询到了许多有关NAS的资料,用来替代百度云盘等确实有很多优势,尤其是具有不限速(速度看自己配置)、私密性好、一次投入后续只需要电费即可等优势。鉴于手上没有可以用的资源-cpu、机箱、内存等,查询到…