全文参考(https://blog.youkuaiyun.com/hjm4702192/article/details/80518856)
1、什么是redis?
非关系型数据库:与关系型数据库作区分(not only sql),例如:MongDB与redis;
关系型数据库:基于关系型数据模型的数据库,由多张能相互关联的二维的行列的表格组成的数据库,如Oracle、MySQL;
开发底层:用c语言开发的,部署在linux上的软件;
2、为什么使用redis?
性能:存放执行耗时久且,结果不频繁变动的sql,使得请求能够快速响应;
并发:在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常,redis此时就起一个缓冲作用,让请求先访问redis,而不是访问数据库;
3、redis为什么这么快?
纯内存的操作;
单线程操作,避免了上下文切换;
采用了非阻塞的I/O多路复用(重点);
4、redis支持的数据类型?
五种:String、列表(list)、集合set 、hash(value存放的是结构化的对象,可以操作能够其中的某个字段PS:单点登录)、sortedSet(排序集合,多了一个权重参数score,集合中的元素能够按照score进行排列Ps:排行、榜单)
5、什么是jedis?
类似于jdbc一样,连接redis的一个工具
6、redis的缺点?
总结:关系型数据库的优点就是非关系型数据库的缺点、关系型数据库的缺点就是非关系型数据库的优点;
(1)缓存与数据库双写一致性的问题;
分布式常见问题,一致性分为最终一致性和强一致性:数据库与缓存双写,必然存在不一致的问题;
如果是强一致性则不能放在缓存,我们最终的目的是为了最终的一致性,且所做的一切只能降低可能,不能完全避免;
首先更新数据库在删除缓存,其次可能存在缓存删除失败的问题,提供一个补偿机制,例如消息队列;
(2)缓存雪蹦、缓存穿透:
缓存雪蹦:缓存同时间大面积的实效,此时又来了一波的请求,导致请求全部怼到数据库,导致数据库连接异常;
缓存穿透:黑客故意请求缓存中不存在的数据,导致所有请求在数据库,导致数据库连接异常
(解决方案记得写)
7、redis的过期策略
采用的是定时删除+惰性删除
8、redis与mysql结合
应用redis实现数据的读写,同时利用队列处理器定时将数据写入mysql;
同时应当注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,王redis中写数据时,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键;
9、redis消耗的物理资源?
内存,redis将所有的数据全部放到内存中,目的是为了最快的读写速度,将数据都读取到内存中,并通过异步的方式将数据写入磁盘,若不放到内存中,磁盘IO速度严重影响reids的性能;
10、redis的部署方式?
(1)单节点部署;
(2)主从模式;
(3)哨兵模式(升级版的主从模式);
11、redis持久化的方式?
rdb持久化、aof持久化;
rdb:redis调用fork()方法,产生一个子进程,子进程把数据写到一个临时的RDB文件;当子进程生成新的RDB文件后会将酒店的文件删除;
Redis面试题
最新推荐文章于 2024-11-05 09:15:00 发布