【Redis面试点总结】
1、缓存
1.1、穿透
查询一个空数据,mysql也查不到也不会写入缓存可能导致多次请求数据库
方案一:缓存设空即可(可能发生数据不一致就是这条数据有了但此时缓存是空,消耗内存)
方案二:布隆过滤器(实现复杂,容易产生误判)
1.2、击穿
一个key缓存过期重建过程中来了大量请求,缓存无数据全来到了数据库
方案一:互斥锁(强一致、性能差、一个线程进来其他线程都得等待)
方案二:逻辑过期(高可用、性能优、不能保证数据一致性)
添加逻辑过期expire字段:
1.3、雪崩
同一时段大量key失效或redis宕机,导致大量请求来到数据库
方案一:给不同的key的TTL添加随机值
方案二:利用redis集群提高可用性(哨兵模式、集群模式)
方案三:缓存业务添加降级限流策略(nginx、gateway)
方案四:给添加多级缓存(Guava或Caffeine)
1.4、双写一致(mysql数据与redis同步)
当修改了数据库的数据,同时也要更新缓存的数据,缓存要与数据库数据保持一致
读操作:缓存命中直接返回、未命中查询数据库写入缓存设置超时时间
写操作:延时双删(删除缓存–>修改数据库–>删除缓存)(双删防止脏数据、延时为了让主从模式把数据同步到从节点,延时过程中可能出现脏数据不能保证强一致性)
分布式锁(强一致性):
- 共享锁:读锁readLock,加锁过后其他线程共享读操作
- 排他锁:独占锁writeLock,加锁过后阻塞其他线程读写操作,底层setnx保证同一时刻只能一个线程操作锁住的方法
1.5、持久化
1.5.1、RDB
Redis Database Backup file(redis数据备份文件、数据快照)把内存所有数据存到磁盘,当redis故障重启后从磁盘快速读取快照文件恢复数据:命令1、save2、bgsave(子进程),redis.config也可设置自动备份策略(bgsave)
1.5.2、AOF
Append Only File(追加文件)redis处理的每一个写命令都会记录在AOF文件,可以看作命令日志文件,AOF默认关闭,在redis.config配置文件把appendonly
的值改为yes
也可修改AOF文件的名称
由于AOF是记录命令,文件要比RDB大得多。且AOF会记录同一个key的多次写操作,但实际上只有最后一次才有意义。通过bgrewriteaof命令重写。也可在配置文件设置重写阈值。
对比:
1.6、数据过期策略
- 惰性删除:该key过期后不管它,当需要该key后检查是否过期,若过期就删掉,反之返回该key(对cpu友好,对内存不友好存在大量用不到的key一直占内存)
- 定期删除:每隔一段时间检查一定量的key,删除其中过期的key(SLOW、FAST)
==》redis默认两种策略配合使用
1.7、淘汰策略
当redis的内存不够用,此时再添加key那么redis会按照某一逻辑将内存中的数据删除掉
面试:数据库1000万数据,redis只能存20万,如何保证redis的数据都是热点数据?(LRU)
2、集群
2.1、主从
- 主从全量同步:
- 主从增量同步:
2.2、哨兵
实现主从集群的自动故障修复(监控、恢复、通知)
1秒一个ping,哨兵选主(slave-priority越小优先级越高,offset越大,优先级越高)
脑裂:由于网络波动,发现ping不了master,之后选了个slave作为master,这就出现了两个master,但client还是向老master写数据,老master网络恢复后,无新增数据的新master把自个数据同步到老master,那么就丢失了此段时间的数据。更改配置文件解决:
2.3、分片集群
多个master集群,每个master数据不同,一个master有多个slave,master之间通过ping相互心跳检测
解决海量数据存储问题、高并发写的问题
redis分片引入了哈希槽的概念,redis集群有16384个哈希槽,每个key通过 CRC16 hash校验后对16384取模来决定放置在那个槽,集群每个节点负责一部分hash槽
3、分布式锁
本地锁只对本地起作用,因为jvm限制
3.1、setnx
添加锁:SET lock value NX EX 10(过期时间防止死锁业务超时或服务宕机会自动释放锁)
释放锁:DEL key
控制锁时长:1.根据业务执行时间预估(不推荐)2.给锁续期(redisson)
3.2、redisson
执行流程,新特性重试机制高并发下增加分布式锁的使用性能
基于Lua脚本保证命令执行原子性
可重入:跟据线程id判断,add1与add2属于同一线程所以add2会获取到锁
利用hash结构记录线程id和重入次数
主从一致性:当获取锁业务没结束后突然redis主节点(写、改、删数据)宕机,数据没来得及同步到子节点(读数据),那么集群默认选出一个子节点当作主节点替换掉宕机的,当另一个请求获取锁也是能够获取成功的这样两个线程公用一把锁就丧失了锁的互斥性,可能出现脏数据,方案:RedLock(红锁)(复杂、性能差)
相关文章:

【Redis面试点总结】
1、缓存 1.1、穿透 查询一个空数据,mysql也查不到也不会写入缓存可能导致多次请求数据库 方案一:缓存设空即可(可能发生数据不一致就是这条数据有了但此时缓存是空,消耗内存) 方案二:布隆过滤器&#x…...

打卡智能中国(五):博士都去哪儿了?
《打卡智能中国》系列更新了几期,有读者表示,很爱看这类接地气的真实故事,也有读者反映,不是电工,就是文员、农民、治沙人,人工智能不是高精尖学科吗?那些学历很高的博士都去哪儿了?…...

[Nacos] Nacos Client获取调用服务的提供者列表 (四)
文章目录 1.Nacos Client获取调用服务的提供者列表1.1 从Ribbon的负载均衡入手到Nacos Client获取调用服务的提高者列表1.2 getServers方法返回分析1.3 通过selectInstances方法查找Instances实例1.4 获取到要调用服务的serviceInfo Nacos Client 从Ribbon负载均衡调用服务。 …...
gcc编译一个程序的步骤(嵌入式学习)
1.预处理(Preprocessing): 在这个步骤中,预处理器将处理与#相关的代码,包括展开头文件、删除无用定义和替换宏定义。预处理器会生成一个经过宏替换和条件编译处理的中间文件。 gcc -E xxx.c -o xxx.i2.编译࿰…...

邹检验,结构变化识别及其R语言实现
在描述多维数据的维度关系时,线性模型无疑应用最多。然而某些情况下,我们关心随着时间变化或随着样本分组,线性关系的具体参数是否发生了变化,即是否发生结构变化Structural break。邹检验Chow test提供了最基本的一种结构变化显著…...

腾讯云,物联网开发平台产品,动态注册步骤
1. 下载后解压,qcloud_iot_mqtt_sign-master.zip GitHub - tencentyun/qcloud_iot_mqtt_signContribute to tencentyun/qcloud_iot_mqtt_sign development by creating an account on GitHub.https://github.com/tencentyun/qcloud_iot_mqtt_sign 2. 按照readme文…...

Padding, Spacer, Initializer 的使用
1. Padding 的使用 1.1 样式一 1) 实现 func testText1()-> some View{Text("Hello, World!").background(Color.yellow) // 背景颜色//.padding() // 默认间距.padding(.all, 10) // 所有的间距.padding(.leading, 20) // 开始的间距.ba…...

少儿编程 中国电子学会图形化编程等级考试Scratch编程四级真题解析(判断题)2023年3月
2023年3月scratch编程等级考试四级真题 判断题(共10题,每题2分,共20分) 11、在使用自定义积木时,不可以传递布尔型参数 答案:错 考点分析:考查自定义积木的使用,使用自定义积木的时候可以传递数字、文本和布尔型参数,所以错误 12、执行如下图程序后,输出的结果为“…...
Makefile学习笔记
目录 一、概述 1.1 Makefile 介绍 1.2规则 1.3核心 1.4示例 1.5定义命令 1.6 make是如何工作的 1.7、makefile中使用变量 1.8让make自动推导 1.9、另类风格的makefile 1.10、清空目标文件的规则 二、Makefile 总述 2.1、Makefile里有什么? 2.2、 mak…...
C++ 函数模板基础
文章目录 一、什么是函数模板二、函数模板的优点1、代码重用2、类型安全3、可读性4、泛型编程5、性能优化6、库开发 三、函数模板的使用场景1、通用操作2、数据结构与容器操作3、排序与查找算法4、数学与统计函数5、类型转换器6、自定义函数对象 四、模板参数的声明(…...
CUDA torch reinstall 与杂谈
一 实用技巧 1 从cuda11升级到12 apt-get --purge remove "cuda*" wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run sh cuda_12.1.1_530.30.02_linux.run vim ~/.bashrc export PATH/usr/local…...
[230530] 托福TPO口语真题| TPO66~TPO72|XPO|Task1|20:30~21:00
目录 真题 预测题 真题 66. Do you agree or disagree with the following statement? Some people believe that a person needs a college education in order to have a successful career. Others believe that a college education is not necessary for…...

【FMC201】基于FMC标准的1路CameraLink Full 输入 子卡模块
产品概述 FMC201是一款CameraLink信号输入(采集)FMC子卡模块,该模块支持2路CameraLink Base模式或者1路CameraLink Full模式的图像信号输入。板卡具有2个CameraLink端口(SDR26),可以作为采集卡使用。 技术指…...

C语言_VS系列编译器写C语言或C++代码产生的一些错误与警告的解决方法(VS2010/VS2019)
本次来分享在用VS系列编译(VS2010/VS2019)写C语言或C代码时会遇到的一些警告和错误,提供博主的一些解决方法,若有更好的解决方法,大家也可以在评论区发表自己的意见噢,话不多说,开始上菜: 此博主在CSDN发布…...
从零实现一个数据库(DataBase) Go语言实现版 0.介绍
英文源地址 数据库实现步骤细分 1.持久化(Persistence) 我们为什么需要数据库?为什么不是直接把数据dump进文件中. 第一个话题就是持久化. 我们将讨论如果写入文件的过程中程序崩溃了, 或者电源断电了, 文件的状态会是什么样的呢? 文件是否只是丢失了最后一次写操作?或者…...

操作系统-X18 linux日志审计
Linux日志审计 在unix/类unix(Linux)系统中,日志是内核(内存)的一部分。 用于记录系统、程序运行中发生的各种事件 通过阅读日志,有助于诊断和解决系统故障 日志文件的分类 ①内核及系统日志 由系统sysl…...
【Vue工程】011-Axios
【Vue工程】011-Axios 文章目录 【Vue工程】011-Axios一、概述1、简介2、官网3、訾博其他相关博客【axios】001-axios概述、特点、文档说明【axios】002-axios发起请求axios封装 二、基本使用1、安装2、创建一个 token 状态3、axios 封装4、使用示例设置 baseURL请求调用拦截器…...

Cy7 NHS ester水溶性七甲川花菁染料标记活性脂477908-53-5
Sulfo-CY7 NHS ester是一种荧光标记试剂,可用于生物分子的荧光标记。它是一种水溶性的N-羟基琥珀酰亚胺酯化合物,具有强烈的荧光信号和高度稳定性。Sulfo-CY7 NHS ester的化学结构为C43H48N3NaO16S2,分子量约为968.98 g/mol。Sulfo-CY7 NHS e…...

利用CX-ONE搭建omron PLC仿真环境
目录 1 安装参考 2 CX-Simulator 2.1 打开软件 2.2 选择PLC配置文件存放位置 2.3 选择PLC类型 2.4 PLC Unit全部选择 2.5 设置FINS通讯 2.6 设置串口通讯 2.7 建立连接 3 CX-Programmer 3.1 新建工程 3.2 设置PLC型号 3.3 设置网络类型 3.4 设置串口通讯 3.5 设…...

webpack Plugin Loader
本文作者为 360 奇舞团前端开发工程师 webpack是Javascript工具链的关键部分。webpack是个用于现代JavaScript应用程序的静态模块打包工具。它不仅可以支持ESM和CommonJS模块化编程,而且还可以支持或扩展支持许多不同的静态资源,例如:Files,I…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...