首页 > 数据库 >redis面试题

redis面试题

时间:2023-03-23 16:47:51浏览次数:46  
标签:AOF 面试题 持久 过期 redis Redis RDB 数据

redis面试题

1.什么是Redis?

  Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许 可)高性能非关系型(NoSQL)的键值对数据库。

2.Redis有哪些优缺点

优点   1.读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。   2.支持数据持久化,支持AOF和RDB两种持久化方式。   3.支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。   4.数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。   5.支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。 缺点   1.数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis   2.适合的场景主要局限在较小数据量的高性能操作和运算上。   3.Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。   4.主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。   5.Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的 浪费。

3.为什么要用 Redis 而不用 map/guava 做缓存?

  缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map 或者 guava实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁 而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。   使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached 服务的高可用,整个程序架构上较为复杂。

4.Redis为什么这么快

  1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是O(1);   2、数据结构简单,对数据操作也简单,Redis 中的数据结构是专门进行设计的;   3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁 操作,没有因为可能出现死锁而导致的性能消耗;   4、使用多路 I/O 复用模型,非阻塞 IO;   5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的 话,会浪费一定的时间去移动和请求;

5.Redis有哪些数据类型

Redis主要有5种数据类型,包括String,List,Set,Zset,Hash,满足大部分的使用要求     STRING:字符串、整数或者浮点数对整个字符串或者字符串的其中一部分执行操作,对整数和浮点数执行自增或者自减操作,做简单的键值对缓存   LIST:列表从两端压入或者弹出元素对单个或者多个元素进行修剪,只保留一个范围内的元素存储一些列表型的数据结构,类似粉丝列表、文章的评论列表之类的数据   SET:无序集合   HASH:包含键值对的无序散列表   ZSET:有序集合  

6.什么是Redis持久化?

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

7.Redis 的持久化机制是什么?各自的优缺点?

Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制:   RDB:是Redis DataBase缩写快照   RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的save参数来 定义快照的周期。
  RDB优点:     1、只有一个文件 dump.rdb,方便持久化。     2、容灾性好,一个文件可以保存到安全的磁盘。     3、性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是IO 最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了   redis 的高性能     4.相对于数据集大时,比 AOF 的启动效率更高。   RDB缺点:     1、数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候)     2、AOF(Append-only file)持久化方式: 是指所有的命令行记录以 redis 命令请 求协议的格式完全持久化存储)保存为 aof 文件。   AOF:持久化   AOF持久化(即Append Only File持久化),则是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。 当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。     AOF优点:       1、数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次 命令操作就记录到 aof 文件中一次。       2、通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof 工具解决数据一致性问题。       3、AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令 进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))     AOF缺点:       1、AOF 文件比 RDB 文件大,且恢复速度慢。       2、数据集大的时候,比 rdb 启动效率低。

8.如何选择合适的持久化方式

  1.一般来说, 如果想达到足以媲美PostgreSQL的数据安全性,你应该同时使用两种持久化功能。在这种情况下,当 Redis 重启的时候会优先载 入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。   2.如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失,那么你可以只使用RDB持久化。   3.有很多用户都只使用AOF持久化,但并不推荐这种方式,因为定时生成RDB快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据 集的速度也要比AOF恢复的速度要快,除此之外,使用RDB还可以避免AOF程序的bug。   4.如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式。

9.Redis的过期键的删除策略

过期策略通常有以下三种:   定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资 源去处理过期的数据,从而影响缓存的响应时间和吞吐量。   惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的 过期key没有再次被访问,从而不会被清除,占用大量内存。定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数 量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达 到最优的平衡效果。   Redis中同时使用了惰性过期和定期过期两种过期策略。                  

标签:AOF,面试题,持久,过期,redis,Redis,RDB,数据
From: https://www.cnblogs.com/yangyanga/p/17128739.html

相关文章

  • 面试题积累_03
    1const关键字与宏定义的区别是什么?答:const常量具有类型,编译器可以进行安全检查,一旦出现bug,在编译阶段就可以发现。而宏定义发生在预处理阶段,它只是进行简单的字符串替......
  • redis
     10.0.1使用Redis有哪些好处?参考答案:(1)速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)(2)支持丰富数据类型,支持st......
  • python redis keepalive 保活
     https://dxian.github.io/2016/07/21/python-redis-subscribe-tcp-keepalive/ https://github.com/opennumber/opennumber/blob/bab590c29ab227bbcf1c301cf454c0e668......
  • 当你对 redis 说你中意的女孩是 Mia
    作者:京东科技周新智一、Redis众所周知,Redis=RemoteDictionaryServer,即远程字典服务。是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、......
  • 【数据库】Redis(7)--SpringBoot&SSM&集成Redis
    本篇主要简单说明一下基于Springboot+SSM+Redis+Swagger集成项目。1.具体实现1.1.在pom.xml整合SSM+Redis+Swagger相关依赖<dependency><groupId>org.springframe......
  • 面试题4
    在面试Netty时,面试官可能会问以下问题:Netty是什么?它的主要特点是什么?Netty支持哪些传输协议?你最熟悉哪种协议?Netty的线程模型是什么?它的优点是什么?Netty的ByteB......
  • SpringBoot中如何解决Redis的缓存穿透、缓存击穿、缓存雪崩?
    本文正在参加「金石计划」大家好,我是飘渺!今天给大家介绍一下如何在SpringBoot中解决Redis的缓存穿透、缓存击穿、缓存雪崩的问题。缓存穿透什么是缓存穿透缓存穿透指的......
  • redis支持的数据类型有哪些
    前言Redis之所以被广泛使用,不只是因为它快,还因为它除了支持最简单的字符串(String)类型外,它还支持好几种数据类型:哈希(Hash)列表(List)集合(Set)有序集合(SortedSet)位图......
  • #yyds干货盘点# LeetCode面试题:合并区间
    1.简述:以数组intervals表示若干个区间的集合,其中单个区间为intervals[i]=[starti,endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入......
  • linux学习-配置redis密码以及主从配置
    配置redis密码查找redis.conf,搜索requirepass关键字,如下图:去掉注释,增加密码配置,重启服务器即可#重启服务systemctlrestartredis#测试连接redis-cli-h127.0.0.1-p......