一、memcached与redis的区别?

1.存储方式不同。memcached把数据全部存在内存之中,断电之后会挂掉,而redis虽然也用到了内存,但是会有部分数据存在硬盘中,保证数据持久性。

2.数据支持类型不同。memcached对数据支持比较简单,而redis支持数据类型较丰富,如string、list、set、sorted set、hash。

3.底层实现不同。一般调用系统函数,会消耗比较多的时间去请求,redis自己构建了vm,速度会更快。

二、redis数据的淘汰策略?

1.volatile-lru:从已经设置过期时间的数据集中,挑选最近最少使用的数据淘汰。

2.volatile-ttl:从已经设置过期时间的数据集中,挑选即将要过期的数据淘汰。

3.volatile-random:从已经设置过期时间的数据集中,随机挑选数据淘汰。

4.allkeys-lru:从所有的数据集中,挑选最近最少使用的数据淘汰。

5.allkeys-random:从所有的数据集中,随机挑选数据淘汰。

6。no-enviction:禁止淘汰数据。

三、为什么redis把所有数据都放到内存中?

redis为了达到最快的读写速度,将数据都读到内存中,并通过异步的方式将数据写入磁盘。如果不将数据放在内存中,磁盘IO速度会严重影响redis的性能。

四、redis的并发竞争问题如何解决?

首先redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。redis本身时没有锁的概念的,redis对多个客户端连接并不存在竞争,但是在Jedis客户端对redis进行并发访问时会产生一系列问题,这些问题时由于客户端连接混乱造成的。有两种方案解决。

1.在客户端,对连接进行池化,同时对客户端读写redis操作采用内部锁synchronized。

2.在服务器角度,利用setnx实现锁。

五、redis过期键的删除策略?

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

对内存友好,但是对cpu时间不友好,有较多过期键的而情况下,删除过期键会占用相当一部分cpu时间。

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

对cpu时间友好,程序只会在取出键的时候才会对键进行过期检查,这不会在删除其他无关过期键上花费任何cpu时间,但是如果一个键已经过期,而这个键又保留在数据库中,那么只要这个过期键不被删除,他所占用的内存就不会释放,对内存不友好。

3.定期删除:每隔一段时间就对数据库进行一次检查,删除里面的过期键。(主动删除)

采用对内存和cpu时间折中的方法,每个一段时间执行一次删除过期键操作,并通过限制操作执行的时长和频率来减少对cpu时间的影响。难点在于,选择一个好的策略来设置删除操作的时长和执行频率。

六、redis与一般db的同步过程?

有两种方式。

第一种,先去redis中判断数据是否存在,如果存在,则直接返回缓存好的数据,如果不存在,去db中读取数据,并把数据缓存一份到redis中。适用与数据里比较大,但是不经常更新的情况,如用户排行。

第二种,先去redis中判断数据是否存在,如果存在,则直接更新对应数据(这一步会记录下更新的key,并把更新后的数据返回给页面,如果不存在,先去数据库中更新内容,然后把数据保存一份到redis中。再往后,后台会进行一系列操作,把redis中更新的key读取出来,找到数据库中对应的数据,并更新数据库。这种方式是把redis当作数据库使用,适合大数据的频繁变动。但是对redis的依赖很大,要做好挂掉之后的数据备份。

七、简述redis的哨兵模式

哨兵是对redis进行实时的监控,主要有两个功能。

1.监测主数据库和从数据库是否正常运行。2.当主数据库出现故障的时候,可以自动将一个从数据库转换为主数据库,实现自动切换。

八、redis的哨兵的监控机制是怎样的?

哨兵监控也是有集群的,会有多个哨兵进行监控,当判断发生故障的哨兵达到一定数量的时候才进行修复。一个健壮的部署至少需要三个哨兵实例。

每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令

2.如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。

3.如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。

4.当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线

5.在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令

6.当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次

7.若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。想要学习Java开发的同学,可以参考成都Java培训班提供的学习大纲;

Redis常见的八道面试题相关推荐

  1. Python 常见的 170 道面试题全解析:2022 版

    Python 常见的 170 道面试题全解析:2019 版 语言特性 1.谈谈对 Python 和其他语言的区别 答:Python 是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第 ...

  2. 腾讯整理最常见的78道面试题:面试必备(含答案)

    这78道面试题是腾讯面试官这三年面试时问的比较多的面试题,在这里分享给大家,希望都能顺利通过面试,拿下高薪.赶紧拿去吧~~文末有答案领取方式! 78道高频面试题: Q1.什么是兼容性测试?兼容性测试侧 ...

  3. 【番外篇】2W字诚意满满的新活:常见接口测试69道面试题,附带答案

    最近发现面试题热度 挺好的,不过大家博客都只有面试题,从来都不带答案,顺手就码了点收集到的博客问题的答案 共69道,2W字,耗时两天(疯狂暗示)欢迎催更吹水,来一个人就是一份催更动力点击并输入暗号:C ...

  4. Java后端面试必问:四十八道面试题及答案最新整理(速看速藏)

    在本篇文章里小编给大家整理了一篇关于Java后端面试题最新整理内容,需要的朋友们可以参考下. 我们学习java知识,除了要做基础的程序运行外,不可避免的要在面试中遇到一些理论的考察.有些小伙伴程序做的 ...

  5. Python 最常见的 170 道面试题解析

    Python 今年还是很火,不仅是编程语言排行榜前二,更成为互联网公司最火热的招聘职位之一.伴随而来的则是面试题目越来越全面和深入化.有的时候不是你不会,而是触及到你的工作边缘,并没有更多的使用,可是 ...

  6. 深度学习计算机视觉常见的29道面试题及解析

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 作者丨我要鼓励娜扎@知乎 来源丨https://zhuanlan.zhihu.com/p/89 ...

  7. python中处理日期和时间的标准模块是-2019python常见的170道面试题解析

    语言特性 1.谈谈对 Python 和其他语言的区别 2.简述解释型和编译型编程语言 3.Python 的解释器种类以及相关特点? 4.说说你知道的Python3 和 Python2 之间的区别? 5 ...

  8. 数据结构算法常见的 100 道面试题全解析:2019 版

    最近由于工作需要接触了不少关于数据结构算法的面试题目,从中总结了一些知识,也从网上筛过一些面试题,但是不是无法运行就是版本过低,让大家很是懊恼.所以我借此机会对大多数的数据结构算法的题目进行了一次总结 ...

  9. C语言-八道笔试题由浅入深玩转指针

    前言:本文章将带你刷8道比较有意思的指针笔试题,笔者将由深入浅出解析这些题目!必要的题目,作者已经加上内存布局图!希望本文对你有所帮助! 目录 一.笔试题1 -指针与一维数组的关系-值 二.笔试题2- ...

最新文章

  1. Google和微软分别提出分布式深度学习训练新框架:GPipe PipeDream
  2. BAT都在悄悄“拆”中台,“碎片化中台” 时代已来!
  3. LeetCode 207. Course Schedule--有向图找环--面试算法题--DFS递归,拓扑排序迭代--Python
  4. PowerShell在Exchange2010下快速开启邮箱
  5. c语言char数字转int补位,关于char强制转换成int到底是用0还是用1补位的猜想与检验...
  6. 服务器上的hdfs的配置文件中,namenode不能设置成127.0.0.1或者localhost,要设置ip或者映射别名
  7. log4j日志的基本使用方法(1)——概述、配置文件
  8. 解决Chrome浏览器高版本无法拖拽离线安装CRX格式插件的问题
  9. CentOS 设置服务开机启动的方法
  10. 鹦鹉助手模拟器 梦幻西游 找不到服务器,模拟器玩梦幻 17173鹦鹉助手模拟器上线...
  11. 语言用符号打印出落叶的图案_世界上最好玩的6种表情符号编程语言
  12. Bailian4021 最大乘积【序列处理】
  13. Js/jQuery实时监听input输入框值变化
  14. 数学建模(五)系泊系统设计(16年国赛A题)
  15. 复变函数思维导图梳理
  16. echarts地图实现部分地区高亮
  17. mysql三表联合查询_求三表联合查询的SQL查询语句
  18. 经纬度坐标转为上海地方坐标代码(js代码)
  19. 关于在JS中引入JS文件的JQ方法
  20. 微信群活码的原理及其作用,以及活码怎么使用

热门文章

  1. 中国科学院大学计算机学科评估,中国科学院大学学科评估结果排名
  2. 《JAVA 中的 -> 是什么意思?》
  3. 计算机专业扬大vs兰州大学,复试奇怪景象:兰州大学初试前五(400+)都被刷!扬州大学唯一上线也被刷!...
  4. 软件架构设计七大原则
  5. 2020读书笔记 《丘吉尔传记》
  6. L3-008 喊山PTA(BFS)
  7. Sintavia再从EOS GmbH购买两台M400-4打印机
  8. 企业邮箱外发被退信的处理过程
  9. php写商城,小白学习使用Thinkphp5写一个商城项目
  10. 斐讯K2无法运行KCPTUN占用CPU特别高的问题