天天看点

Redis面试知识点总结v1

1. Meincache 和 Redis的区别

meincache: 支持简单数据类型 ,不支持持久化、不支持主从同步、不支持分片
Redis: 支持丰富的数据类型, 支持数据持久化存储   支持分片 支持主从同步
           

2. Redis为什么能这么快

完全基于内存,绝大多数请求是内存操作,执行效率高
      数据结构简单,对数据的操作也简单
      读取时不进行磁盘IO,采用了多路复用io阻塞机制
      单线程没有线程上下文切换,且单线程也能处理高并发请求
           

3.Redis的数据结构

String: 基本数据类型,以键值对方式存储
Hash: String元素组成的字典,类似于表结构,一般存储json格式的javaBean对象
List: 存储有序的String类型元素
set: 存储无序且数据不可重复的String类型元素
shored set: 存储有序且不可重复的数据,分数值来确定排列顺序
HyperLoglog: 主要适用场景是海量数据的计算。特点是速度快。占用空间小。
Geo: 储存用户给定的地理位置信息
           

4.如何从海量key中查询某一固定前缀的key

使用keys和SCAN 
一次keys指令返回所有匹配键的数据,如果数据量过大将时很耗时的
SCAN: 基于游标的迭代器,根据上一次的游标来迭代数据,可以设置大小,但返回的数量不可控只能大概率符合count参数,会出现重复数据,需要去重。SCAN整体加起来的耗时大于keys
           

5.如何通过Redis实现分布式锁

分布式锁是访问不同系统或redis系统共享资源的锁的实现
解决问题:互斥性、安全性、死锁、容错
实现:
1. 利用setnx+expire命令 (错误的做法)
Redis的SETNX命令,setnx key value,将key设置为value,当键不存在时,才能成功,若键存在,什么也不做,成功返回1,失败返回0 。 					SETNX实际上就是SET IF NOT Exists的缩写
3. 使用 set key value [EX seconds][PX milliseconds][NX|XX] 命令 (正确做法)
EX seconds: 设定过期时间,单位为秒
PX milliseconds: 设定过期时间,单位为毫秒
NX: 仅当key不存在时设置值
XX: 仅当key存在时设置值
           

6.大量key同时过期的注意事项

集中过期,由于消除大量的key很耗时,会使reids卡顿
解决:在key过期时间上加入时间戳
           

7.如何使用Redis做异步队列

使用List作为队列, Rposh 生产消息   Lpop 消费消息
缺点:没有等待队列有值就直接消费
可在应用层使用sleep机制去调用Lpop,BLpop阻塞等待
pub/sub :发布订阅模式 ,一端发布,多端监听
缺点:无状态,无法保证消息可达 ,使用Kafka、RabbitMQ消息队列来解决
           

8.Reids持久化

RDB(快照)持久化: 保存某个时间点的全量数据快照
实现:
		SAVE:阻塞Redis的服务器进程直到RDB文件创建完成
		BGSAVE:Fork出一个子进程来创建RDB文件,不阻塞服务器进程
AOF持久化: 保存写状态,	记录除了查询以外所有变更数据库的状态的指令
		以append的形式追加到AOF文件中
RDB-AOF 混合持久化方式:RDB做全量储存,AOF做追加存储![在这里插入图片描述](https://img-blog.csdnimg.cn/20200711162633394.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDIxMDM3Mw==,size_16,color_FFFFFF,t_70)
           
Redis面试知识点总结v1
Redis面试知识点总结v1

长期更新,有问题烦劳各位指出!!!

继续阅读