【面试 redis】【第十二篇】redis的相关面试问题
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的相关面试问题的更多相关文章
- redis(十二):Redis 集合(Set)
Redis 集合(Set) Redis 的 Set 是 String 类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中集合是通过哈希表实现的,所以添加,删除,查找 ...
- 【面试 SQL】【第十六篇】SQL相关面试
=================================================================================== 1.一张表,姓名,科目,成绩,一 ...
- Python开发【第二十二篇】:Web框架之Django【进阶】
Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...
- 解剖SQLSERVER 第十二篇 OrcaMDF 行压缩支持(译)
解剖SQLSERVER 第十二篇 OrcaMDF 行压缩支持(译) http://improve.dk/orcamdf-row-compression-support/ 在这两个月的断断续续的开发 ...
- 第十二篇 SQL Server代理多服务器管理
本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...
- 第十二篇 Integration Services:高级日志记录
本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...
- Python之路【第十二篇】:JavaScrpt -暂无内容-待更新
Python之路[第十二篇]:JavaScrpt -暂无内容-待更新
- 【译】第十二篇 Integration Services:高级日志记录
本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...
- 【译】第十二篇 SQL Server代理多服务器管理
本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...
- 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探
SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...
随机推荐
- jquery里面的$.each()方法
$.each可以迭代jquery对象和数组 $(selector).each()专注于jquery对象的遍历
- pytorch实现花朵数据集读取
import os from PIL import Image from torch.utils import data import numpy as np from torchvision imp ...
- Ext.js入门(二)
ExtJs OOP基础 一:ExtJs中的面向对象 1.ExtJs中命名空间的定义 Ext中的命名空间类似于C#中的namespace和java中的包,用来对工程中的类进行更好的 ...
- 【C++ Primer 第10章】再探迭代器
反向迭代器 • 反向迭代器就是在容器中从尾元素向首元素反向移动的迭代器.对于反向迭代器,递增(以及递减)操作的含义会颠倒过来. • 递增一个反向迭代器(++it)会移动到前一个元素:递减一迭代器(-- ...
- php 代码中的箭头“ ->”是什么意思
类是一个复杂数据类型,这个类型的数据主要有属性.方法两种东西. 属性其实是一些变量,可以存放数据,存放的数据可以是整数.字符串,也可以是数组,甚至是类. 方法实际上是一些函数,用来完成某些功能. 引用 ...
- 【Java】 剑指offer(3) 二维数组中的查找
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上 ...
- mongodb的几种启动方法
1 mongodb的几种启动方法 启动Mongodb服务有两种方式,前台启动或者Daemon方式启动,前者启动会需要保持当前Session不能被关闭,后者可以作为系统的fork进程执行,下文中的p ...
- web漏洞扫描工具AWVS使用
AWVS AWVS简介:Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞,如交叉站点脚 ...
- PHP如何支持CURL字符串证书传输
背景 最近在对接微信支付的时候,需要在退款处用到证书,由于我们是SAAS平台,要支持多方多渠道支付,如果把所有证书文件保存在应用服务器会受到SLB的影响,会导致某台机器文件不同步而阻碍退款流程,但把文 ...
- HTML的lang属性的作用
今天翻了一下<css权威指南>选择器章节,看到伪类选择器,也叫语言选择器:lang(language),顾名思义它会根据html设置的语言应用对应样式,如: *:lang(en){ col ...