Redis面试大全

什么是 Redis?

Redis是一种基于内存的数据库,对数据的读写操作都是再内存中完成的,因此读写操作非常快,常用于缓存,消息队列,分布式锁等场景

redis支持String,list,hash,set,zset等数据类型,并对数据操作都是原子性的,因为执行命令由单线程负责,不存在并发竞争问题。此外redis还支持事务,持久化,lua脚本,多种集群方案(主从,哨兵,切片),发布/订阅模式,内存淘汰机制,过期删除策略等等。

Redis 数据结构

Redis 提供了丰富的数据类型,常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)

string的应用场景:缓存对象,分布式锁,共享token等

List的应用场景:消息队列

Hash的应用场景:缓存对象,购物车等

Set的应用场景:聚合计算(并集,交集,差集),比如点赞,共同关注等

ZSet的应用场景:比如说排行榜,电话、姓名等

Redis 线程模型

Redis 是单线程吗?

redis的单线程指的是 接受客户端请求->解析请求->进行数据读写等操作->发送数据给客户端 这个过程是由一个线程来完成的,这也是我们常说redis是单线程的原因。但是Redis程序并不是单线程,Redis再启动的时候是会启动后台线程BIO的,再2.6版本会启动2个后台线程,分别处理关闭文件和AOF刷盘两个任务,4.0版本后新增了一个用来异步释放Redis内存,也就是lazfree线程

为什么Redis是单线程还这么快?

1.因为Redis大部分操作都是再内存里面运行的

2.Redis采用的单线程模型可以便面多线程之间的竞争

3.Redis采用I/0多路复制机制处理了大量的客户端So'c'ket请求

Redis的持久化

一。RDB快照

将某一个时刻的内存数据,以二进制方式快到到硬盘

二。AOF日志 

每执行一条sql,就把该命令追加到AOF文件里面

三。混合持久化方式

集成了 AOF 和 RBD 的优点;

Redis集群

要想设计一个高可用的 Redis 服务,一定要从 Redis 的多服务节点来考虑,比如 Redis 的主从复制、哨兵模式、切片集群。

Redis 过期删除与内存淘汰

过期删除

1.惰性删除策略

2.定时删除策略

内存淘汰

Redis 内存淘汰策略共有八种,这八种策略大体分为「不进行数据淘汰」和「进行数据淘汰」两类策略

如何避免缓存雪崩、缓存击穿、缓存穿透

缓存雪崩

缓存雪崩实在某一个时间,设置缓存的键大面积失效的情况,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃,这就是缓存雪崩

对于缓存雪崩的情况我们一般又两种处理方案

1.将缓存时间随机打散

2.设置缓存不过期

缓存击穿

缓存击穿就是当一个热点数据,再大量访问缓存的时候,这个缓存失效了,大量请求直接打到数据库上,造成数据库压力过大的情况。

应对缓存己算我们一般有2种处理方案

1.不设置过期时间

2.互斥锁的设计。保证同一时间只有一个业务线程请求缓存,未能获取互斥锁的请求,要么等待锁释放后重新读取缓存,要么就返回空值或者默认值。

缓存穿透

当用户访问的数据,既不在缓存中,也不在数据库中,导致请求在访问缓存时,发现缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据,没办法构建缓存数据,来服务后续的请求。那么当有大量这样的请求到来时,数据库的压力骤增,这就是缓存穿透的问题。

应对缓存穿透的方案,常见的方案有三种。

1.非法请求限制

2.设置不正常数据的空值或者默认值

3.使用布隆过滤器判断数据是否再数据库存在,避免不曾存的数据打到数据库上面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值