IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis的经典面试题 -> 正文阅读

[大数据]Redis的经典面试题

1.你用过Redis 吗? Redis是什么??

有用过redis 。Redis是基于内存的数据结构存储服务器。常用作数据库、缓存、消息队列。是目前最主流的nosql数据库之一。

2.我们常用的数据类型有哪些?你能说说分别在那些场景中使用?

reids中常用的数据类型有 String、list、set、hash、zset

(1)String类型:

redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,byte字节等,也就是string类型能存储任何数据,你可以用它存储序列化后的用户对象,json化的对象,甚至图片,视频等

????????使用场景:

可以用来做计数器、常用命令:set、get、incr、decr、incrby、decrby

(2)list类型:

可以存储一个字符串列表,按照数据加入的顺序排列,它非常方便的在列表头部和尾部添加元素。列表类型内部使用双向链表实现,所以向列表两端添加元素非常快, 但是如果尝试访问一个非常大的列表的中间元素,则速度会很慢

????????使用场景:

类似时间点的访问。每个时间点的重大事件存入list形成时间轴;例如好友动态、评论等;

常用命令:lpush、rpush;

记住最近的操作:往list列表头部放元素,取头部的几个元素即为最近记录,常用命令:lpush、ltrim

(3)Set类型:

无顺序的字符串集合,集合中每个元素都是不同的不允许有重复数据。其内部存储是一个值为空的散列表,所以增删速度也很快。

????????使用场景:

可以使用set做抽奖,把名单放入set、set不会重复,随机弹出元素。

(4)zset类型:

与set类似,也是一个无重复数据的集合,不同的是zset的每个元素会关联一个分数,这个分数用于对集合元素进行排序;(从小到达)zset中的元素是唯一的,但是每个元素的分数是可以重复的。

????????使用场景:

实时的数据排行,每次数据的更新会更新分数

(5)hash类型:

是一个string类型的field和value的映射表

使用场景:

hash用于存储对象、例如关注数、粉丝数等。

注:一个对象中的某一个属性是唯一的,对同一个属性进行操作会进行覆盖操作。

3.Redis可以设置过期吗?你能说说Redis的过期清理原理吗?

在Redis中提供了Expire命令设置一个键的过期时间,到期以后Redis会自动删除它。

(1)Redis删除过期key的方法主要有两种:

????????1.消极方法:

????????在key被访问时如果发现它已经失效,那么就删除它。

????????2.积极方法:

????????周期性地从设置了过期时间的key中选择一部分过期的key删除,对于那些从未被查询的key,即便它们已经过期,消极方式也无法清除,因此Redis会周期性地随机测试一些key,已过期的key将会被删掉。

扩充:Redis积极方法删除过期key

Redis每秒会进行10次操作,具体的流程:

1. 随机测试 20 个带有过期信息的key;

2. 删除其中已经过期的key;

3. 如果超过25%的key被删除,则重复执行步骤1;

这是一个简单的概率算法,基于假设我们随机抽取的key代表了全部的key空间。

4.缓存 有什么作用

缓存是解决系统性能问题的利器,通过缓存技术来降低后端服务器压力,提升系统整体性能,缩短响应时间。特别是在大流量高并发场景下,缓存可以说是解决大流量高并发,优化系统性能首要考虑的因素。

5.什么是缓存穿透?如何解决?

缓存穿透是指大量不存在的key请求,由于缓存没有,便开始查询数据库,但数据库也没有查到数据库比如一些恶意攻击,爬虫等造成大量空命中。

解决方案:

方案一:

缓存空结果,对数据库查询不存在的数据仍然记录在缓存中缓存一条数据,比如缓存一条空值unknow,这样能有效减少查询数据库的次数。

?方案二:布隆过滤器

布隆过滤器是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

6.什么是缓存击穿?如何解决?

高并发条件下,对于热点数据访问,在某个时刻数据失效了;或者刚开始时缓存中还没有对数据进行缓存,所有请求都被发送到数据库去查询,数据库被压垮。

解决方案:

方案一:

使用分布式锁,就是在访问数据库之前都先请求分布式锁,获得锁的那个线程才有资格去访问数据库,其他线程必须等待。整体思路:拿到锁的线程查询出来的数据结果会重新放入redis缓存,然后释放锁,这样当后面排队的人拿到锁的时候,再次进行缓存判断,这时缓存已经有数据了,那么直接不再对数据库进行操作。

方案二:

对即将过期的数据主动刷新,比如起一个后台定时任务轮询,主动跟新缓存数据,保证缓存不会全部失效。

7.什么是缓存雪崩?如何和解决?

缓存雪崩是指比如我们给所有的数据设置了同样的过期时间,然后在某一个历史性时刻,整个缓存的数据全部过期了,然后瞬间所有的请求都落到数据库,数据库被压垮。或者是缓存服务器发生故障,导致所有的请求都落入到数据库,数据库被压垮。

解决 方案:

事前:redis要高可用(搭建集群或者哨兵),避免redis不可用。

事中:本地ehcache缓存(mybatis二级缓存)+限流&降级,避免数据库被压垮。

事后:redis持久化,快速恢复缓存数据。

8.如何解决数据库与缓存的双写不一致问题?

1.为缓存设置过期时间

从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即可。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存。

一般情况下,我们是这样使用缓存:

缓存的读取操作:先判断是否有缓存,有缓存直接返回给前端,无缓存,从数据库查询数据,如果数据库查询结果为空,则直接返回给前端,如果数据库查询结果不为空,则将数据写入缓存再返回给前端;

缓存的更新操作:可以分为:

(1)先更新数据库,再更新缓存;(不行)

(2)先更新缓存,再更新数据库;(不行)

(3)先更新数据库,再删除缓存;

(4)先删除缓存,再更新数据库;(国内推荐

2.使用延迟双删策略

9.Redis中使用lua脚本的好处是什么?

10.Redis的淘汰机制策略你知道那些?

11.Redis的持久化有那些方法?有什么区别?

12.Redis的集群模式有那几种

13.Redis中查询大量的key要怎么办?

14.Redis为什么那么快?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:28:04  更:2021-11-10 12:29:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:03:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码