面试题——Redis

1.简述一下缓存穿透,缓存击穿,缓存雪崩 ?

缓存穿透:大量恶意请求一个不存在的数据,使得压力绕过Redis缓存层打到数据库,造成数据库瘫痪

处理:设置黑名单,维护一个可能存在也可能不存在的黑名单数据列表,对请求进行过滤(简单高效)

布隆过滤器,会出现误删,且相对麻烦(不存在一定不存在,存在可能存在[即误判])

缓存击穿:缓存在某一时刻key过期,恰巧有大量对这个key的请求打过来,大并发会把数据库压垮

处理:提前预热,用Xxl-job,在秒杀开始前每十分钟扫描一次,如果过期,就发送查询请求,让Redis去数据库拿数据写到Redis中

缓存雪崩:在Redis设置了相同的TTL(过期时间),导致在同一时刻大量的Key同时失效

处理:错峰:用随机生成数设置TTL,使每个Key的过期时间都不一样,避免集体失效


2.为什么用Redis?(优点)

1.内存型数据库,效率快

2.工作单线程worker,串行化原子操作(IO线程是多线程)-避免上下文切换

3.IO模型,支持高并发

4.KV模型,V具有类型结构

5.具有本地方法,计算向数据移动

6.二进制安全,Value最大512M


3.如何保证缓存及数据库一致性

一般我们采取延迟双删,即先删除缓存再更新数据库数据,搁3~5秒再删除缓存数据.但极端情况下也会出现某线程速度慢,运行耗时超过了双删的时间,所以延迟双删也不能绝对保证一致性.

所以我们采取了阿里的Canal,用Canal监听数据库的变化,发生变化时用一个消费者更新Redis的缓存,最终保持一致性.


4.Redis数据结构应用场景

1.字符串(String): 储存字符串,整数,浮点数等类型值。 (计数器:访问量统计,销量统计)

2.列表(List): 按照插入顺序储存一组字符串

3.集合(Set):无序储存一组字符串,支持集合运算。(交集并集)

4.有序集合(ZSet):有序储存一组字符串,每个字符串关联一个分数,(排行榜,统计排名)

5.哈希表(Hash):储存键值对,其中键值都是字符串类型


5.Redis是单线程还是多线程?

总结:Redis5是单线程         Redis6后是单线程+多线程(即工作线程单线程,IO线程多线程)


6.Redis的持久化?

RDB:存储数据结果,关注点在数据(快照)

AOF:存储操作过程,关注点在数据的操作过程(命令)

优点:

RDB:恢复数据快 ; 不额外占用空间

AOF:不易丢失数据,安全性高 ; 保存所有写操作,可读性高

 缺点:

RDB:快照有间隔,丢失数据多 ; 数据集庞大时fork()非常耗时,可能造成服务器停止处理客户端

AOF:恢复数据速度慢 ; 占用空间大


7.在百万keys的Redis里面,如何模糊查找某个key. 

使用Scan:每次调用scan 命令都会返回一个新的游标和一批键名,可以分批查找 ,这样就不会造成线程的阻塞,提高了查询效率。


8.Redis的Key过期策略?

我们一般采取

惰性删除:当用户查询某个Key时,会检查这个Key是否已经过期,如果没过期则返回用户,如果过期则删除。

定期删除:定期删除是在Redis内部有一个定时任务,会定期删除一些过期的key。

两种策略都无法保证过期Kye一定删除,当内存不足时,Redis还会做内存回收,我们采取的是allkeys-lru,在内存不足时,会移除最近最少使用的key。


9.Redis集群模式

1.哨兵模式    2.主从复制    3.Redis官方的Cluster集群模式


10.为什么使用redis分布式锁?

为什么要用分布式锁? 保证一个方法在高并发情况下的同一时间只能被同一个线程执行。

相较于mysql分布式锁,redis分布式锁性能上更好,提供了原子操作,功能上更加丰富.设置一个ttl过期时间,通过Redis分布式锁的看门狗机制,会自动检查线程是否执行完毕,若没有执行完毕则给线程续命,继续延长着任务ttl

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

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

相关文章

Day03 链表概念与单向不循环链表的实现

目录 1、顺序表的优缺点 2、链式存储的线性表 3、单向不循环链表实现 1、顺序表的优缺点 顺序表的优点是: 由于顺序表数据元素的内存地址都是连续的,所以可以实现随机访问,而且不需要多余的信息来描述相关的数据,所以存储密度高。 顺序表的缺点是: 顺序表的数据在进行…

http穿透怎么做?

众所周知http协议的默认端口是80,由于国家工信部要求,域名必须备案才给开放80端口,而备案需要固定公网IP,这就使得开放http80端口的费用成本和时间成本变的很高。那么能不能利用内网穿透技术做http穿透呢?下面我就给大…

git回滚项目至指定版本

用过两种方式 1.使用git命令 进入到项目目录地址,使用git log查看提交版本信息 按q退出 若非对应分支,使用git checkout 分支名 切换分支 这里回退至上一个版本 git reset --hard 版本号 再次推送即可 这里需要使用-f命令 强行推送 2.在pycharm中…

Ps:管理动作和动作组

◆ ◆ ◆ 管理动作 管理“动作” Actions面板中的动作以使其具有条理性,并仅提供项目所需的动作,可以重新排列、复制、删除、重命名和更改动作选项等。 1、重新排列动作中的命令 在“动作”面板中,将命令拖动到同一动作中或另一动作中的新位…

使用gtest做cpp的单元测试并可查看代码覆盖率

前言 由于工作需要,要使用googletest做单元测试,本文记录下搭建gtest单元测试环境,并查看代码覆盖率的方法,以备不时之需。 准备工作 编译gtest 克隆gtest源码: git clone https://github.com/google/googletest.g…

Vue44-创建vue脚手架

一、Vue脚手架的版本说明 vue cli:command line interface 命令行接口工具 用最新的脚手架,这样可以兼容vue3荷vue2版本。 二、通过vue脚手架创建项目 注意: 执行npm run serve 启动项目的时候,要进入到创建的vue项目里面&…

Java高级特性

引言 Java不仅提供了基础的编程功能,还包括了一系列强大的高级特性,这些特性能够显著提高代码的灵活性、可扩展性和性能。本文将详细介绍Java的几个高级特性,包括反射机制、注解与注释、泛型编程、以及Lambda表达式与Stream API,并…

KVM+GFS分布式存储系统构建高可用群集

KVMGFS 分布式存储系统构建 KVM 高可用群集 一:理论概述 1.1:Glusterfs 简介 Glusterfs 文件系统是由 Gluster 公司的创始人兼首席技术官 Anand Babu Periasamy编写。 一个可扩展的分布式文件系统, 用于大型的、 分布式的、 对大量数据进行访…

CrossOver 2024软件安装包下载

CrossOver不像Parallels或VMware的模拟器,而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏,而不需虚拟机。它为Windows软件提供所需的资源,以达到在Mac OS X系统上运行Windows程序的目的。 安 装…

OpenCV形态学

什么事形态学处理 基于图像形态进行处理的一些基本方法; 这些处理方法基本是对二进制图像进行处理; 卷积核决定着图像出来后的效果。 一 图像二值化 什么是二值化 将图像的每个像素变成两种值,如0,255. 全局二值化。 局部二值化。 thres…

【AIGC】MetaGPT原理以及应用

目录 MetaGPT原理 MetaGPT应用 MetaGPT和传统编程语言相比有什么优势和劣势 视频中的PPT 参考资料 MetaGPT原理 MetaGPT是一种多智能体框架,它结合了元编程技术,通过标准化操作程序(SOPs)来协调基于大语言模型的多智能体系统…

商品搬家到抖店

使用的工具为 张飞搬家,登录上去 张飞搬家 1 复制商品的网址 商品链接复制过去后,点击下面的开始批量复制 2 检查修改商品信息 价格啊、图片啊、各种商品属性啊,检查下,不合适的修改和补充 3 开始搬家 4 查看商品 打开抖店后…

数据库基础(一)

目录 一、一些基本概念 1. 四个事务隔离级别 Read Uncommitted(读取未提交内容) Read Committed(读取提交内容) Repeatable Read(可重读) Serializable(可串行化) 2. MVCC&am…

Windows运维:找到指定端口的服务

运维过windows的或多或少都遇到过需要找到一个端口对应的服务,或者是因为端口占用,或者是想看下对应的服务是哪个,那么如何操作呢?看看本文吧。 1、按照端口找到进程ID 例如想找8000端口的进程ID netstat -ano | findstr :8000 2…

大模型算法备案全网最详细说明(附附件)

本文要点:大模型备案最详细说明,大模型备案条件有哪些,《算法安全自评估报告》模板,大模型算法备案,大模型上线备案,生成式人工智能(大语言模型)安全评估要点,网信办大模型备案。 共分为以下几…

【Numpy】一文向您详细介绍 np.floor()

【Numpy】一文向您详细介绍 np.floor() 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕,…

【操作与配置】Pytorch环境搭建

安装显卡驱动 显卡驱动是一种软件程序,用于控制显卡硬件与操作系统之间的通信和交互。显卡驱动负责向操作系统提供有关显卡硬件的信息,以及使操作系统能够正确地控制和管理显卡的各种功能和性能。显卡驱动还包含了针对不同应用程序和游戏的优化&#xff…

python生成验证码图片,结合接口供前端调用

🌈所属专栏:【python】✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的…

海外仓系统如何让海外仓受益,WMS海外仓系统使用指南

随着跨境电商业务的快速发展,海外仓面临着需要更加高速运转的巨大挑战。 当海外仓出现因为手动作业导致效率低下,成本不断飙升或者出现库存管理问题的时候,意味着是时候引入一套合适的海外仓管理系统了。 对于寻求海外仓业务流程优化的企业…

2779. 数组的最大美丽值

简单翻译一下题目意思: 对于每个 nums[i] 都可以被替换成 [nums[i]-k, nums[i]k] 区间中的任何数,区间左右是闭的。在每个数字可以替换的前提下,返回数组中最多的重复数字的数量。 第一想法是用一个哈希表,Key 是可以被替换的数…