redis的相关面试问题

redis教程:http://www.redis.net.cn/tutorial/3501.html

===============================================================================

1.redis如何实现高并发

redis通过一主多从,主节点负责写,从节点负责读,读写分离,从而实现高并发。

https://www.cnblogs.com/mengchunchen/p/10044603.html

===============================================================================

2.redis如何实现高可用

主备切换,哨兵集群,主节点宕机的情况下,自动选举出一个从节点变成主节点,从而保证了redis集群的高可用。

https://www.cnblogs.com/mengchunchen/p/10044840.html

===============================================================================

3.redis是单线程还是多线程?为什么单线程还能处理速度那么快?

  首先,redis是单进程单线程的k-v内存型可持久化数据库。

  单线程还能处理速度很快的原因:

    1》redis操作是基于内存的,内存的读写速度非常快

    2》正是由于redis的单线程模式,避免了线程上下文切换的损耗

    3》redis采用的IO多路复用技术,可以很好的解决多请求并发的问题。  多路代表多请求,复用代表多个请求重复使用同一个线程。epoll

  IO多路复用原理图如下:

===============================================================================

4.redis的应用场景

  1》key-value结构,内存存取,速度快,做缓存

  2》list或sort set 实现消息队列

  3》list的有序性,也可以做时间轴

  4》sort set的权重特性,可以做排行榜

  5》redis的原子性自增,可以实现计数器

  6》redis的set,实现好友关系的功能   A关注的人存放set   被谁关注存放set,B也同样存放两个set,A的关注的人set和B的关注的人set求交集,可以得到共同关注;A的关注的人set和A的被关注的set求交集,获取互相关注好友列表。

  7》分布式锁,可以设置过期时间,注意使用完成要delete掉

https://www.cnblogs.com/mengchunchen/p/9691021.html

===============================================================================

5.redis如何保证原子性,又是如何解决异步以及并发阻塞的?

  redis可以保证操作的原子性,是因为redis本身就是单进程单线程的。

  那既然是单进程的如何解决异步以及并发阻塞的?

  是通过IO多路复用技术解决的这个问题!

===============================================================================

6.redis 缓存穿透、缓存雪崩、缓存击穿

https://baijiahao.baidu.com/s?id=1619572269435584821&wfr=spider&for=pc

https://www.cnblogs.com/duanxz/p/3788366.html

https://www.cnblogs.com/dream-to-pku/p/9153999.html

这些问题的处理核心思想,就是尽可能的减小DB的访问压力!!

缓存穿透:无效ID,在redis缓存中查不到,去查询DB,造成DB压力增大。

解决方法:

  1》解决方法1:布隆过滤器,提供一个很大的Bit-Map,提供多个hash函数,分别对查询参数值【比如UUID】,进行求hash,然后分别对多个hash结果,在对应位置对比是否全为1或者某个位置为0,

          一旦有一个位置标识为0,表示本次查询UUID,不存在于缓存,再去查询DB.

    起到一个再过滤的效果。

  2》解决方法2:把无效的ID,也在redis缓存起来,并设置一个很短的超时时间。

缓存雪崩:缓存同一时间批量失效,导致大量的访问直接访问DB

解决方法:

  在做缓存时候,就做固定失效时间+随机时间段,保证所有的缓存不会同一时间失效

缓存击穿:在缓存失效的时候,会有高并发访问失效的缓存【热点数据】

解决方法:

  最简单的解决方法,就是将热点数据设置永不超时!

  第二个解决方法:对访问的Key加上互斥锁,请求的Key如果不存在,则加锁,去数据库取,新请求过来,如果相同KEy,则暂停10s再去缓存取值;如果Key不同,则直接去缓存取!

===============================================================================

7.redis的两种持久化策略  RDB和AOF 【深入一下,重启以后的备份恢复】

https://www.cnblogs.com/mengchunchen/p/10057485.html

===============================================================================

8.AOF的瘦身重写机制【实际应用才会碰到】

===============================================================================

9.Redis过期策略

===============================================================================

10.redis调用了flushdb 或者flushAll,之后,重启后数据还存在么

===============================================================================

11.redis中的lua脚本【涨姿势】

===============================================================================

===============================================================================

【面试 redis】【第十二篇】redis的相关面试问题的更多相关文章

  1. redis(十二):Redis 集合(Set)

    Redis 集合(Set) Redis 的 Set 是 String 类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中集合是通过哈希表实现的,所以添加,删除,查找 ...

  2. 【面试 SQL】【第十六篇】SQL相关面试

    =================================================================================== 1.一张表,姓名,科目,成绩,一 ...

  3. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

  4. 解剖SQLSERVER 第十二篇 OrcaMDF 行压缩支持(译)

    解剖SQLSERVER 第十二篇   OrcaMDF 行压缩支持(译) http://improve.dk/orcamdf-row-compression-support/ 在这两个月的断断续续的开发 ...

  5. 第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  6. 第十二篇 Integration Services:高级日志记录

    本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...

  7. Python之路【第十二篇】:JavaScrpt -暂无内容-待更新

    Python之路[第十二篇]:JavaScrpt -暂无内容-待更新

  8. 【译】第十二篇 Integration Services:高级日志记录

    本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...

  9. 【译】第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  10. 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

    SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...

随机推荐

  1. PHP替换指定字符串

    在PHP中,有两个函数可以实现字符串替换,strtr()和str_repalce()函数. 首先我们简单了解下strtr()函数的定义及语法. strtr:转换指定字符. 两个语法: 第一种语法: s ...

  2. 易错之for循环

    for i in range(3): print(i) print(i,"---") #Python的问题就在于,当循环结束以后,循环体中的临时变量i不会销毁,而是继续存在于执行环 ...

  3. python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)

     先来回顾一下昨天的内容 黏包现象粘包现象的成因 : tcp协议的特点 面向流的 为了保证可靠传输 所以有很多优化的机制 无边界 所有在连接建立的基础上传递的数据之间没有界限 收发消息很有可能不完全相 ...

  4. 《剑指offer》-数据流中的中位数

    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 最开始的思路 ...

  5. 《Java编程的逻辑》 - 文章列表

    <计算机程序的思维逻辑>系列文章已整理成书<Java编程的逻辑>,由机械工业出版社出版,2018年1月上市,各大网店有售,敬请关注! 京东自营链接:https://item.j ...

  6. python自动抢票

    # -*- coding: utf-8 -*- from splinter.browser import Browser from time import sleep import traceback ...

  7. 【BZOJ1135】[POI2009]Lyz

    题解: hall定理..第一次听说 思考了半小时无果 二分图匹配时间显然太大 但是有这个hall定理 二分图有完美匹配的充要条件是 对于左边任意一个集合(大小为|s|),其连边点构成的集合(大小为|s ...

  8. #14 [BZOJ2090/2089] [Poi2010]Monotonicity 2/Monotonicity

    题解: 首先想到了标算..然后证明了一发是错的(事实证明很智障) 先说正确性比较显然的O(n^2)算法 令f[i][j]表示前i个物品,匹配到第j个括号,最大值是多少 g[i][j]表示前i个物品,匹 ...

  9. centos安装autossh

    $ sudo yum install wget gcc make$ wget http://www.harding.motd.ca/autossh/autossh-1.4e.tgz$ tar -xf ...

  10. 【转载】和 Thrift 的一场美丽邂逅

    http://www.cnblogs.com/cyfonly/p/6059374.html 一. 与 Thrift 的初识 也许大多数人接触 Thrift 是从序列化开始的.每次搜索 “java序列化 ...