当前位置: 首页 > news >正文

Redis面试

1、redis是什么?

2、redis的优缺点

3、为什么要使用缓存/为什么要使用redis

高性能

高并发

4、为什么使用redis,而不是map作为缓存

1)自带的map不能进行持久化,当服务宕机时,会导致数据的丢失
2)每个服务实例都会有自己的一个map,缓存不一致
3)redis可以做主从服务,提高服务的可用性,map不可以

5、Redis为什么这么快

6、Redis有哪些数据类型

7、Redis的使用场景

总结一
1)计数器:可以对String进行自增自减运算,从而实现计数器功能。Redis这种内存数据库的读写性能非常高,适合频繁读写的计数量

2)热点缓存
将热点数据缓存到redis中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率

3)会话缓存
使用redis做SpringSession来存储会话信息,一个用户可以访问多台应用服务器

4)全页缓存

5)查找表

6)消息队列(发布订阅功能)
List是一个双向链表,可以通过lpush和rpop写入和读取消息

7)分布式锁
在分布式场景下,无法使用单机中的锁来对多个节点上的进程进行同步。可以使用Redis来做分布式锁

8、什么是Redis持久化

持久化指的是将内存中的数据持久化到磁盘上,保证服务宕机后数据的恢复

9、Redis的持久化机制

Redis提供了两种持久化机制 RDB 和 AOF

RDB:Redis DataBase缩写
RDB是Redis默认的持久化 方式,按照一定的时间将内存中的数据以快照的形式保存到硬盘中,对用产生的数据文件为 dump.rdb。通过配置文件中的save参数来定义快照的周期
在这里插入图片描述

RDB的优点和缺点
1、只有一个文件 dump.rdb,方便持久化
2、性能最大化,fork子进程来完成写操作,主进程继续处理命令,所以是IO最大化。使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能
3、相对于数据集大时,比AOF的启动效率更高

缺点:
1、数据安全性低:RDB是间隔一段时间进行持久化,如果持久化之间 redis发生故障,会发生数据丢失,所以这种持久化方式适合数据要求不严谨的时候

AOF:Append Only File
是将Redis执行的每次写命令记录到单独的日志文件中,当重启redis时,会执行日志文件中命令已达到恢复数据的效果
在这里插入图片描述
AOF的优点
1、数据安全,aof持久化可以配置appendfsync 属性,当配置为always,每进行一次命令操作就会记录到aof文件中
2、通过append模式写文件,即使中途服务器宕机,可以通过 redis-check-aof解决数据一致性问题

缺点:
1、aof比rdb文件大,且恢复速度慢
2、数据集大的时候,比rdb启动效率低

如何选择合适的持久化机制

10、Redis的动态扩容,缩容

11、Redis过期键的删除策略

Redis过期策略就是指当Redis中缓存的key过期了,Redis该如何处理

过期策略通常有以下三种:

  • 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好,但是会占用大量的cpu资源去处理过期的数据,从而影响缓存的响应时间和吞吐量

  • 惰性过期

  • 定期过期

Redis中同时使用了惰性过期和定期过期两种过期策略

内存相关

12、MySQL中有2000w数据,redis中只存20w数据,如何保证redis中的数据都是热点数据

redis内存数据集上升到一定大小的时候,就会实行数据淘汰策略

13、Redis的内存淘汰策略有哪些?

【总结】
Redis的内存淘汰策略的选取 并不会影响过期key的处理。内存淘汰策略用于处理内存不足时需要删除的数据。
过期策略用于处理过期的缓存数据

14、Redis主要消耗什么物理资源

内存

15、Redis的内存用完了会发生什么

如果内存使用完了,Redis的写命令会返回错误信息(但是读命令还是可以正常返回)。或者你可以配置内存的淘汰机制,当Redis达到内存上限时会删除掉旧的key

16、Redis如何过内存优化

可以好好的利用 Hash、list 、set 、sorted set 等集合类型的数据,因为通常情况下很多小的key-value可以使用更紧凑的方式放在一起。

线程模型

17、Redis的线程模型

相关文章:

  • python正则表达式(三)
  • 雷达信号处理算法:静态杂波滤除(附MATLAB代码和数据)
  • Doing It in User Space
  • Vue2:网易云播放音乐并实现同步一次显示一行歌词
  • 这四个问题处理好,无人机集群编队研究会有新突破
  • 【JavaSE】之JVM入门(上)
  • 《计算机视觉基础知识蓝皮书》第7篇 模型优化方法及思路
  • java毕业设计牙科诊所管理系统Mybatis+系统+数据库+调试部署
  • 蓝桥杯2022年(本科c++b组)
  • pytorch :OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading 【已解决】
  • 【BData12】Hadoop HDFSMapReduse
  • 阿里MySQL应用实战与性能调优手册惨遭泄漏,GitHub下载量超23K+
  • 软件测试简历包装我们会了,但测试人的自我“包装”呢?HR自我介绍包装小技巧【建议收藏】
  • Spring 注解开发下的依赖注入(自动装配)(引用类型)(普通类型)(加载properties文件)
  • 机器学习之决策树
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 〔开发系列〕一次关于小程序开发的深度总结
  • JS实现简单的MVC模式开发小游戏
  • mysql外键的使用
  • passportjs 源码分析
  • PHP面试之三:MySQL数据库
  • Rancher-k8s加速安装文档
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SSH 免密登录
  • 第2章 网络文档
  • 前端工程化(Gulp、Webpack)-webpack
  • 通过npm或yarn自动生成vue组件
  • 携程小程序初体验
  • 再谈express与koa的对比
  • 找一份好的前端工作,起点很重要
  • 带你开发类似Pokemon Go的AR游戏
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​第20课 在Android Native开发中加入新的C++类
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #git 撤消对文件的更改
  • #include到底该写在哪
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (附源码)计算机毕业设计大学生兼职系统
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)RocketMQ初步认识
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .gitignore文件_Git:.gitignore
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET DataGridView数据绑定说明
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET命名规范和开发约定
  • .net项目IIS、VS 附加进程调试