Redis面试相关

1,什么是redis

Redis是一个开源的,先进的key-value持久化产品。它通常被称为数据结构服务器

2,redis有哪些数据结构?

有五种,分别是String,list,hash,set,zset(有序集合)

3,redis为什么那么快?

(1)纯内存操作(2)单线程,省去线程切换,CPU上下文切换,锁竞争的开销

(3)使用非阻塞IO模型

4,介绍一下缓存失效/穿透/雪崩/并发?

(1)缓存失效:大量的缓存在同一时间点失效,数据库压力瞬时增大。造成原因是,所有key过期时间都设成一样了,解决方法:key过期时间引入随机因素

(2)缓存穿透:查询一条数据库和缓存都没有的数据,就会一直查询数据库,DB压力增大,解决方式:缓存空对象,布隆过滤器

(3)缓存雪崩:某一个时间段内,缓存集中失效,无数请求绕开缓存直达数据库。原因:redis宕机,大部分缓存失效。解决方法:搭建集群,防止单节点redis宕机和设置不同的过期时间

(4)缓存并发:一个缓存若失效,可能出现多线程同时查询db,同时设置缓存的情况。解决方法:查DB时加锁,若key不存在,就加锁,然后查DB存入缓存。

5,redis里面的热key如何处理?

(1),对热key进行分散处理,加上不同前后缀缓存多个key,让各个key分配到不同节点上

(2),使用多级缓存

6,redis中大key如何处理?

将大key分片处理,例如大set分成多个小set

7,如何用redis统计UV

(1)用bitmap,存的是uid计算的时候做下bitcount就行

(2)用布隆过滤器

8,redis事务有哪些特性?

没有隔离级别的概念,批量操作在EXEC命令发送前被放入队列缓存,不会实际执行。

不能保证原子性,redis中当条命令可以保证原子性,但事务不保证原子性,不会回滚,任意命令失败余下指令依然会被执行。

事务三个阶段:开始事务,命令入队,执行事务

相关命令:watch,监视一个或多个key,若监控的key被改变则失误被打断

multi:开始事务,exec:执行事务(一旦执行后,所有watch监控都被取消)

discard:取消事务。unwatch:取消对所有key的监控

9,redis什么时候会发生key的回收

(1)定时清理(2)执行命令时内存超过maxmemory

10,redis持久化有什么方法?

(1)RDB:将数据库快照以二进制方式保存在磁盘中

(2)AOF:将所有操作命令写入到文件中

11,redis集群中如何查到key对应的具体节点?

使用CRC16算法对key进行哈希。将hash值对16384取模,得到对应slot。根据节点与slot的映射信息,找到具体节点地址。去具体节点找key,如果key不在这个节点上,则会返回moved指令,加上新的节点与slot映射关系,客户端同时刷新。

12,如何用redis做延时队列?

使用zset,member是任务描述,score是执行时间,然后用定时器去扫描,一旦有执行时间小于或等于当前时间的任务,就立刻执行

13,redis集群有哪些方法可以实现?

(1)codis(常用)(2)redis cluster

14,redis集群什么情况下会导致集群整体不可用?

A,B,C三个节点的集群,在没有复制模型的前提下,如果节点B失败,整个集群则会因为缺少5000-11000范围的slot而不可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nathaniel333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值