redis知识点整理(自用)

目录

一、常见问题

1、Redis的数据持久化策略有哪些

2、什么是缓存穿透,怎么解决

3、什么是布隆过滤器

4、什么是缓存击穿,怎么解决

5、什么是缓存雪崩,怎么解决

6、redis双写问题

7、Redis分布式锁如何实现

8、Redis实现分布式锁如何合理的控制锁的有效时长

9、Redis的数据过期策略有哪些

10、Redis的数据淘汰策略有哪些

二、其他问题

1、Redis集群有哪些方案,知道嘛

2、什么是Redis主从同步

3、你们使用Redis是单点还是集群?哪种集群

4、Redis分片集群中数据是怎么存储和读取的

5、redis集群脑裂

6、怎么保证redis的高并发高可用

7、你们用过Redis的事务吗?事务的命令有哪些

8、Redis是单线程的,但是为什么还那么快?


一、常见问题

1、Redis的数据持久化策略有哪些

rdb和aof两种方式。

1)其中rdb为数据快照,将内存中的数据拷贝到磁盘中(存为快照文件),通过save或bgsave命令触发rdb存储。当故障重启后,通过读取快照文件,快速恢复数据存储。

2)aof存储方式为追加文件存储,文件中记录redis写命令。

配置文件触发策略:apendfsync always / apendfsync everysec (将写命令存储到aof缓冲区,每隔一秒将缓冲区的数据存储到文件中,因此可能会缺失一秒数据)/ apendfsync no

aof重写机制:aof记录的是操作命令,会存在很多冗余命令,可以通过bgrewriteaof命令,删除冗余命令,从而压缩aof的文件

两种方式优缺点对比

rdb恢复数据速度快、但存储时间间隔较长,存在缺失数据的情况。

aof宕机恢复速度慢,但数据完整性较高。文件体积会比较大。

默认配置是开启rdb,关闭aof。实际应用场景中,往往两者结合使用,rdb周期性的定点备份数据。

【精选】Redis持久化的两种方式:RDB与AOF(详解)_rdb和aof_PeakXYH的博客-CSDN博客

2、什么是缓存穿透,怎么解决

请求查询缓存和数据库都不存在的数据,使db压力瞬间变大。

解决方案:

1)接口过滤,过滤掉例如id=-122等无效访问,以及加上权限过滤的方式等

2)对请求空值的数据进行缓存,例如请求不存在的id=43的数据,则在redis中缓存该条数据(值为空值),但需要注意:key设置的过期时间不能太长

3)布隆过滤器

3、什么是布隆过滤器

通过一组hash函数,将查询的入参散列到列表的不同地址,若列表地址的值均为1,则表示入参存在。通过布隆过滤器校验后,允许查询缓存、数据库。

4、什么是缓存击穿,怎么解决

某条数据在redis中过期,正好大量用户访问该热点数据,导致db压力变大(类似缓存雪崩?)

互斥锁:setnx 

解决方案:

1)设置互斥锁,缓存过期后,线程一查询时获取锁,查询到数据后重新设置缓存,再释放锁。其他线程在锁住状态时,则循环休眠重试从redis获取数据。

2)逻辑设置缓存的过期时间。线程一进来后发现缓存已过期,获取互斥锁,锁获取成功,则开启新线程更新缓存,线程一则直接先返回过期数据。其他线程进入,查询缓存已过期且获取互斥锁失败,也直接返回过期数据。

Redis缓存击穿问题及解决思路_缓存击穿怎么解决-CSDN博客

5、什么是缓存雪崩,怎么解决

大量缓存在同一时间失效,大量用户请求进来,瞬间耗尽数据库资源,导致数据库无法使用。

解决方案:

缓存的有效期设置随机值,避免同一时间失效

6、redis双写问题

线程一删除redis中数据;线程二此时查询数据绕过缓存直接查询数据库,又将数据存在了缓存中。

1) 延迟双删:保持最终一致性,非强一致性。延迟时间不好确定

2)强一致性的解决方案:

加分布式锁,通过redisson提供的读写锁,readlock(共享锁)读数据,writelock(排它锁)写数据。

3)延迟一致性的解决方案:

a、通过异步消息通知实现。发送更新缓存的通知到mq,mq执行更新缓存的操作。

b、通过canal监听mysql数据库的binlog日志,canal通知数据变更,业务服务更新数据。

7、Redis分布式锁如何实现

基于redisson通过实现设置锁,底层原理是用setnx+lua。

redisson实现的锁是可重入锁。实现的锁不是主从强一致性。

主从一致性的话,有个redlock锁(使用时官方推荐至少5个实例master)

8、Redis实现分布式锁如何合理的控制锁的有效时长

通过看门狗功能,后台启动线程实时监控锁的过期状态,延长锁的有效时间。

9、Redis的数据过期策略有哪些

1、主动删除:redis定期扫描key,删除过期数据

2、被动删除:key在被操作的时候,检查是否过期,过期则删除数据

10、Redis的数据淘汰策略有哪些

八种:

1、noeviction: 不淘汰,数据满了后不再写入数据。默认这个策略

2、volatile-ttl, key到期时间最短的先淘汰

3、allkeys-random,随机淘汰key

4、volitile-random,随机淘汰设有失效时间的key

5、allkeys-lru,所有key进行lru算法淘汰

6、allkeys-lfu,所有key进行lfu算法淘汰

7、volitile-lru,失效时间的key进行lru算法淘汰

8、volitile-lfu,失效时间的key进行lfu算法淘汰

二、其他问题

1、Redis集群有哪些方案,知道嘛

主从复制、哨兵模式、分片集群

2、什么是Redis主从同步

通过主从同步读写分离,往主节点写入数据,从从节点同步数据。其中就要保证主从节点的数据同步。

全量复制同步流程:

1、从节点向主节点发起同步的请求,主节点判断是否第一次同步数据,是第一次则返回replyid(版本号)和offset(偏移值),从节点保存版本号和偏移值。

2、主节点另启线程,通过bgsave的方式生成rdb文件,发送给从节点。从节点清空数据后,执行rdb文件

3、主节点生成rdb文件的时间段中,若有新的数据产生,则通过追加命令的方式加载到缓冲区,待第二步骤结束后,发送repl_baklog文件到从节点,从节点执行

增量复制:

1、从节点发起同步请求,主节点判断是否第一次同步数据,不是第一次,则从repl_baklog中获取offset后的数据,发送到从节点

3、你们使用Redis是单点还是集群?哪种集群

集群,一主一从+哨兵模式。

4、Redis分片集群中数据是怎么存储和读取的

不太清楚,只知道通过hash散列到redis的不同槽?

5、redis集群脑裂

主节点和从节点处于不同的网络分区,当主节点网络通信异常时,sentinel检测不到主节点的心跳,认为主节点已经下线,重新选出一个从节点提到新的主节点。但实际主节点并未真实下线,仍在进行业务数据写入。等网络恢复后,由于已经选出了新的主节点,原先的主节点被降为从节点,主从同步数据时,新主节点向从节点写入数据,出现数据丢失的情况。

如何避免:

修改redis配置,设置最小主从节点数,主节点至少有一个从节点才能执行写入命令。

修改数据同步延迟时间,缩短时间。

两者组合,保证在网络故障时间,主节点不允许写入客户端消息。

6、怎么保证redis的高并发高可用

通过哨兵模式检测集群的运行状态,自动故障恢复。

7、你们用过Redis的事务吗?事务的命令有哪些

不知道

8、Redis是单线程的,但是为什么还那么快?

redis是基于内存的,单线程执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值