栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis的常见面试题(全)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis的常见面试题(全)

目录
  • 前言
  • 1. 了解一下你认识的Redis
  • 2. Redis的线程机制
  • 3. Redis持久化机制
  • 4. Redis过期键的删除策略
  • 5. Redis的同步机制
  • 6. 了解过集群吗
  • 7. 什么情况会导致整个集群无法使用
  • 8. 设置Redis的密码
  • 9. Redis中slots的卡槽有了解吗
  • 10. 测试Redis的连通性
  • 11. 理解Redis的事务
  • 12. 降低Redis的内存使用情况
  • 13. 大量的 key 设置同一时间过期,需要注意什么
  • 14. 了解过 Redis 分布式锁吗
  • 15. 为什么要用Redis这种新的数据库
  • 16. 单线程的Redis为什么这么快
  • 17. MySQL有1000万数据,Redis作为中间缓存,取其中的10万,如何保证Redis中的数据都是热点数据?
  • 18. AOF重写了解吗?

前言

本文主要总结一下
之前学习的笔记知识点
Redis框架从入门到学精(全)
以及面试八股文中常见的题目

1. 了解一下你认识的Redis

高性能的 key-value

  • Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的候可以再次加载进行使用
  • key-value数据多种,不仅是string
  • Redis 有着更为复杂的数据结构并且提供对他们的原子性操作
  • 丰富的特性:可用于缓存,消息,按 key 设置过期时间,过期后将会自 动删除
2. Redis的线程机制

单线程模式
redis 利用队列技术将并发访问变为串行问,消除了传统数据库串行控制的开销

3. Redis持久化机制

两种持久化机制 RDB 和 AOF 机制

RDB:在指定的时间间隔内将内存中的数据集快照写入磁盘
写入一个临时文件,持久化结束后,用这个临时文件替换上持久化的文件,达到数据恢复

优点:

  • 节省磁盘空间
  • 可以安全保存到磁盘
  • 性能最大化,用单独子进程进程持久化

缺点:

数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失

AOF:
以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件

优点:

  • 数据安全,每一次命令操作就可以追加到后面,即使宕机,也可以通过redis-check-aof来修复

缺点:

文件过大,恢复速度慢

数据集大的时候,比RDB要慢

4. Redis过期键的删除策略

(1) 定时删除:在设置键的过期时间的同时,创建一个定时器 timer). 让定时
器在键的过期时间来临时,立即执行对键的删除操作。

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

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

5. Redis的同步机制

从机主动发送

  • Slave启动成功连接到master后,从机slave会发送一个sync命令
  • Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步

全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。(刚开始从机连接主机,主机一次给)
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步 (主机修改了数据会给予从机修改的数据同步,叫做增量复制)

断开之后重新连接,只要是重新连接master,一次完全同步(全量复制)将被自动执行,rdb的数据就会给从机。
主机负责写,从机负责读

6. 了解过集群吗

Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。
Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求

具体的原理:

  • 哨兵机制 Sentinal 着眼于高可用,在 master 宕机时会自动将 slave 提升 为 master,继续提供服务
  • 集群分片,Cluster 着眼于扩展性,在单个 redis 内存不足时,使用Cluster 进行分片存储
7. 什么情况会导致整个集群无法使用
  • cluster-require-full-coverage
    为yes ,那么 ,整个集群都挂掉
    为no ,那么,该插槽数据全都不能使用,也无法存储
8. 设置Redis的密码

通过启动界面后
在内部输入该命令set requirepass 123456,启动之后通过auth 123456
也可以在配置文件直接修改,变成永久密码

9. Redis中slots的卡槽有了解吗

一个 Redis 集群包含 16384 个插槽(hash slot)
也就是使用的是哈希槽

集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽

10. 测试Redis的连通性

通过ping命令

11. 理解Redis的事务

具体的命令有这么几个MULTI、EXEC、DISCARD、WATCH

具体Redis的事务特性有:

  • 单独的隔离操作(不会被打断)
  • 没有隔离级别
  • 不保证原子性

事务中的所有命令都会序列化、按顺序地执行

12. 降低Redis的内存使用情况

通过使用比较小key-value,可以更加好的紧凑在一起
好好利用 Hash,list,sorte,set,set 等集合类型数据

13. 大量的 key 设置同一时间过期,需要注意什么

redis可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时分散一些

14. 了解过 Redis 分布式锁吗

Redis 的并发竞争Key

先拿 setnx 来争抢锁,抢到之后,再用 expire 给锁加一个过期时间防止锁忘 记了释放
但是如果setnx之后系统维护了,就不能给锁加时间

正确的应该是同时把 setnx 和 expire 合成一条指令来用的

补充基于zookeeper:
基于zookeeper临时有序节点可以实现的分布式锁。大致思想为:每个客户端对某个方法加锁时,在
zookeeper上的 与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点。 判断是否获取锁的
方式很简单,只需要判断有 序节点中序号最小的一个。 当释放锁的时候,只需将这个瞬时节点删除即
可。同时,其可以避免服务宕机导致的锁 无法释放,而产生的死锁问题。完成业务流程后,删除对应的
子节点释放锁

15. 为什么要用Redis这种新的数据库

主要是因为 Redis 具备高性能和高并发两种特性。

  • 高性能:假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将
    该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作
    缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相
    应的数据即可!
  • 高并发:直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中
    的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。
16. 单线程的Redis为什么这么快

主要是有三个原因:

1、Redis的全部操作都是纯内存的操作;

2、Redis采用单线程,有效避免了频繁上下文切换;

3,采用了非阻塞I/O多路复用机制

17. MySQL有1000万数据,Redis作为中间缓存,取其中的10万,如何保证Redis中的数据都是热点数据?

可以使用Redis的数据淘汰策略,Redis 内存数据集大小上升到一定大小的时候,就会施行这种策略。具
体说来,主要有 6种内存淘汰策略:

  • voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  • allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  • no-enviction(驱逐):禁止驱逐数据
18. AOF重写了解吗?

AOF重写可以产生一个新的AOF文件,这个新的AOF文件和原有的AOF文件所保存的数据库状态一样,
但体积更小。

在执行 BGREWRITEAOF 命令时,Redis 服务器会维护一个 AOF 重写缓冲区,该缓冲区会在子进程创
建新AOF文件期间,记录服务器执行的所有写命令。当子进程完成创建新AOF文件的工作之后,服务器
会将重写缓冲区中的所有内容 追加到新AOF文件的末尾,使得新旧两个AOF文件所保存的数据库状态
一致。最后,服务器用新的AOF文件替换旧的 AOF文件,以此来完成AOF文件重写操作。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666188.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号