首页 > 数据库 >Redis面试题扩展

Redis面试题扩展

时间:2024-10-26 08:48:51浏览次数:3  
标签:面试题 缓存 过期 Redis 扩展 线程 服务器 数据

一、redis特性

1、内存数据快,快,很快...

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

3、IO模型(epoll), 天生支撑高并发

4、kv模型,v具有类型结构

5、具有本地方法,计算向数据移动。(a,b) => 交集

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

二、Redis是单线程还是多线程

6.0之前是单线程(IO线程、工作线程、单线程)

6.0之后是多线程:6.0之后IO线程起一个线程池专门处理IO流的操作(读、写),但真正计算的还是工作线程{好处:避免了上下文的切换,减少冲突}

三、Redis 的持久化机制

1、RDB(Redis DataBase)

将数据集中写入磁盘中,也称快照,数据恢复是将快照中的文件直接读取到内存中

单独创建子线程进行持久化,将数据写入一个临时文件中

RDB触发模式:

手动触发:通过手动生成快照

自动触发:通过配置参数的设置触发自动生成快照

优点:1、恢复数据比较快

2、备份的文件就是原始内存数据大小,不会额外增加数据占用

缺点:1、快照恢复有间隔,不能进行实时备份,丢失的数据会比较多

2、开启子线程备份数据,在数据集比较庞大时,fork() 可能会非常耗时,造成服务器在一定时间内停止处理客户端

2、AOF(Append Only File)

客户端写操作命令以日志的方式记录下来

在redis服务器重启时,会加载aof文件中的所有命令,达到数据恢复的目的

AOF触发模式:

手动触发:通过 bgrewriteAOF 命令,重新AOF持久化生成aof文件(触发重写)

自动触发:默认情况下是没有开启AOF(默认使用RDB持久化),需要通过配置文件开启

优点:1、 数据安全性高,不易丢数据

2、AOF文件有序保存了所有写操作,可读性强

缺点:1、AOF方式生成文件体积变大

2、 数据恢复速度比RDB慢

四、在百万keys的Redis里面,如何模糊查找某个(几个)key

可以使用 KEYS 命令或 SCAN 命令配合 MATCH 参数。

KEYS :是查找所有的 key, 在大型数据集上可能会导致性能问题,因为它查 找某一个 key 时是对全表进行扫描,会阻塞 Redis服务器并可能消耗大量资源 ,尤其是在高并发环境中

SCAN 是通过迭代的方式逐步扫描数据库中的 key,每次只查一部分结果,如果查一部分数据里面没有想要的结果,再接着 cursos (游标)返回的值接着往下查,直到 cursos 返回的结果为 0

五、Redis 的数据类型和它的应用场景

六、Redis 缓存穿透、缓存击穿、缓存雪崩的区别和解决方案

缓存穿透:两边的数据都不存在, (使用布隆过滤器来判断某个数据是否存在,如果布隆过滤器判定数据不存在,则直接返回,不再查询数据库)(黑名单)【如果存在,不一定存在。如果不存在,一定不存在】

缓存击穿:一个或多个热点的key失效了(Redis 有,数据库没有),这时大量的并发请求直接到达数据库。 (提前预热

缓存雪崩: 指在某一时刻,大量key同时失效,导致大量请求到达数据库,数据库压力骤增。 (错峰)

七、Redis 过期键的删除策略

1、惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。

2、定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。

八、Redis 的内存删除策略有哪些

八种淘汰策略

LRU:淘汰最近最少使用的

LFU:淘汰一直使用最少的

淘汰策略名称

策略含义

白话说法

默认策略

noeviction 【ɪˈvɪkʃn】:驱逐;驱赶

不淘汰数据:写不进去返回错误

不删除任意数据,这时如果内存不够时,会直接返回错误。

只针对过期的 keys

volatile-lru

根据 LRU 算法挑选数据淘汰

从设置了过期时间的数据集中,选择最近最久未使用的数据释放

volatile-lfu

根据 LFU 算法挑选数据淘汰(4.0及以上用)

淘汰掉设置了过期时间的key过去被访问次数最少的数据

volatile-random

随机挑选数据淘汰

从设置了过期时间的数据集中,随机挑选数据进行淘汰

volatile-ttl

挑选越早过期的数据进行删除

从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作

所有keys

allkeys-lru

根据 LRU 算法挑选数据淘汰

从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最久未使用的数据释放

allkeys-random

随机挑选数据淘汰

随机选择一个数据进行释放;

allkeys-lfu

LFU 算法挑选数据淘汰(4.0及以上版本可用)

淘汰掉过去被访问次数最少的一条数据

九、Redis 的主从同步机制

步骤如下:(全量-增量)

1、从服务器向主服务器发送同步命令 sync;

2、主服务器接收到同步命令后,会执行 bgsave(后台进程) 命令,在后台生成一个 rdb 文件,并使用一个缓冲区记录从现在开始执行的所有写命令

3、当主服务器执行完 bgsave 命令后,主服务器会将 bgsave 命令生成的 rdb 文件发送给从服务器;

4、从服务器接收到这个 rdb 文件,然后加载到内存 ;之后主服务器会把刚刚在缓存区的命令同步过来,从服务器就会执行这些命名。(两边就一致了

5、以上处理完之后,之后主数据库每执行一个写命令,都会将写命令发送给从服务器。

十、如何保证 Redis 和 mysql 数据库数据保持一致性

延迟双删、Canal

延迟双删:在请求数据时线程先删除缓存-->再更新数据库(这时数据库中的数据就是新数据)延迟 3-5 秒 【时间一般要大于SQL执行时间+线程切换执行时间100ms足够】后再删除缓存,这时候的数据就一致了。但不能排除有一些极端情况,在请求查询时事务延迟了 5 秒以上时,缓存的数据还会是会不一致 ,所有延迟双删也不一定能保证缓存及数据一致。

十一、Redis 的集群方式有哪些

  1. 主从复制(Master-Slave)模式
    1. 在此模式下,有一个主节点负责处理写入请求,而从节点则复制主节点的数据并提供读取服务。
    2. 优点:实现简单,能实现数据冗余,通过读写分离提高系统性能。
    3. 缺点:需要手动进行故障转移,无法自动处理主节点故障;不支持自动的数据分区(sharding),难以做到水平扩展。
  1. 哨兵(Sentinel)模式
    1. Sentinel是Redis提供的一个高可用性解决方案,它能监控主从节点状态,并在主节点出现故障时自动完成故障转移。
    2. 优点:解决了主从模式下手动故障转移的问题,提供了自动化监控和故障恢复机制。【会监控我们所有的节点,如果主服务器挂掉之后它会从从服务器选择一个数据最完整的作为主服务器,】
    3. 缺点:虽然比主从模式增加了自动化,但仍不支持自动的数据分区,且随着节点数量增加,管理和配置的复杂性也会增大。
  1. Redis Cluster模式
    1. Redis Cluster是官方正式支持的分布式解决方案,它采用了数据分片(sharding)技术,将数据分散在多个节点上。
    2. 优点:真正实现了分布式存储,每个节点都可以处理读写请求,具备良好的水平扩展能力;内置了数据自动分割、故障检测与转移功能。
    3. 缺点:相比其他模式更复杂,需要更多的网络资源和配置管理;客户端需要支持集群特性;跨slot的数据操作可能涉及多个节点,有一定复杂度。

标签:面试题,缓存,过期,Redis,扩展,线程,服务器,数据
From: https://blog.csdn.net/x737510/article/details/143168304

相关文章

  • Redis基础知识(学习笔记1--五种基础数据结构)
    Redis,Remote Dictionary Server,远程字典服务。Redis的性能极高:其读的速度可以达到11W/s,写的速度可以到达8W/s。高性能的原因(1)操作在内存中发生;(2)C语言开发;(3)源码简单精细(集性能与优雅于一身),早期版本源码只有2W行左右,从3.0版本(开始支持cluster),代码变成了5W左右。Redis有5种......
  • 苍穹外卖 将菜品缓存到Redis
        CategoryController,用户端查询分类id及其分类下对应的菜品,假如是第一次查询,那么就从数据库中查询并加入redis缓存中,若不是第一次查询,那么直接从redis中查询,不再查询数据库。//redis缓存菜品,减少数据库的查询//在数据库中查找属于IO,假如有很多用户同时访问,那么......
  • Redis 安装部署与基础学习
    Redis安装部署与学习一、简介Redis(RemoteDictionaryServer)是一个开源的内存数据库,遵守BSD协议,它提供了一个高性能的键值(key-value)存储系统,常用于缓存、消息队列、会话存储等应用场景。也就是说redis数据库与我们之前学的MySQL,ClickHouse都不一样,是一个非关系型数据库。总......
  • 如何在AWS上自动扩展Web应用
    摘要:AWS的自动扩展可以帮助您的Web应用根据实际使用量动态调整计算资源。这包括:1、监控流量及性能指标、2、设定弹性策略、3、配置启动模板、4、利用负载均衡器分配流量。其中,监控流量及性能指标是自动扩展的关键部分,AWS提供的CloudWatch服务能够实时监控应用程序的多个性能指标,这......
  • 扩展欧几里得算法公式快速推导
    主要是写在这里供自己以后复习查阅所用。求特解由辗转相除法(欧几里得算法)可得\(\gcd(a,b)=\gcd(b,a\bmodb)\)由裴蜀定理,存在\(x,y\)使得\(xa+yb=\gcd(a,b)\),存在\(x',y'\)使得\(x'b+y'(a\bmodb)=\gcd(b,a\bmodb)\)所以\(xa+yb=x'b+y'(a\bmodb)\)又因......
  • redis安装与部署
    一、下载1、华为镜像站下载https://mirrors.huaweicloud.com/redis/2、将下载的资料包上传到Linux中3、解压缩文件tar-zxvfredis-7.0.10.tar.gz4、安装gcc,和tclyuminstall-ygccyuminstall-ytcl5、进入解压目录执行下面的命令makeMALLOC=libc6、......
  • 易考八股文之Redis在你项目中怎么用,如果Redis宕机,应用服务还会响应吗?会造成哪些问题,如
    在项目中,Redis可以用于多种用途,例如:缓存数据:将经常访问的数据存储在Redis中,减少对后端数据库的查询压力,提高应用的响应速度。会话管理:存储用户会话信息,方便在分布式系统中管理用户登录状态等。如果Redis宕机,应用服务可能仍然会响应,但会面临一些问题:数据丢失:如果没有配置持久......
  • Redis高并发超时问题
     StackExchange.Redis驱动有个超时问题,并发比较高的时候就会出现类似以下错误,比如开3000个线程: StackExchange.Redis.RedisConnectionException:Itwasnotpossibletoconnecttotheredisserver(s).Errorconnectingrightnow.Toallowthismultiplexertocontin......
  • Redis
    常见面试题:Redis简介为什么要用Redis?Redis的优点Redis的应用场景LinuxCentos7安装Redis与Window10安装RedisRedis客户端介绍与使用Redis核心配置文件详解RedisKey命名规范Redis最常用的5种数据类型及其对应的命令Redis的性能测1什么是Redis?Redis是一个由C语言编......
  • actix_web操作redis
    tomlactix-web="4"redis={version="0.21.4",features=["r2d2"]}r2d2="0.8.9"r2d2_redis="0.14.0"uuid={version="0.8",features=["v4"]}with_r2d2.rsuseredis::Comm......