redis面试题及答案(下)【三】

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

缓存与数据库不一致怎么办

假设采用的主存分离读写分离的数据库

如果一个线程 A 先删除缓存数据然后将数据写入到主库当中这个时候主库和从库同步没有完成线程 B 从缓存当中读取数据失败从从库当中读取到旧数据然后更新至缓存这个时候缓存当中的就是旧的数据。

发生上述不一致的原因在于主从库数据不一致问题加入了缓存之后主从不一致的时间被拉长了

处理思路在从库有数据更新之后将缓存当中的数据也同时进行更新即当从库发生了

数据更新之后向缓存发出删除淘汰这段时间写入的旧数据。

主从数据库不一致如何解决

场景描述对于主从库读写分离如果主从库更新同步有时差就会导致主从库数据的不一致

1、忽略这个数据不一致在数据一致性要求不高的业务下未必需要时时一致性

2、强制读主库使用一个高可用的主库数据库读写都在主库添加一个缓存提升数据读取的性能。

3、选择性读主库添加一个缓存用来记录必须读主库的数据将哪个库哪个表哪个主键作为缓存的 key,设置缓存失效的时间为主从库同步的时间如果缓存当中有这个数据直接读取主库如果缓存当中没有这个主键就到对应的从库中读取。

Redis 常见的性能问题和解决方案

1、master 最好不要做持久化工作如 RDB 内存快照和 AOF 日志文件

2、如果数据比较重要某个 slave 开启 AOF 备份策略设置成每秒同步一次

3、为了主从复制的速度和连接的稳定性master 和 Slave 最好在一个局域网内

4、尽量避免在压力大得主库上增加从库

5、主从复制不要采用网状结构尽量是线性结构Master<--Slave1<----Slave2 ....

Redis 的数据淘汰策略有哪些

voltile-lru 从已经设置过期时间的数据集中挑选最近最少使用的数据淘汰

voltile-ttl 从已经设置过期时间的数据库集当中挑选将要过期的数据

voltile-random 从已经设置过期时间的数据集任意选择淘汰数据

allkeys-lru 从数据集中挑选最近最少使用的数据淘汰

allkeys-random 从数据集中任意选择淘汰的数据

no-eviction 禁止驱逐数据

Redis 当中有哪些数据结构

字符串 String、字典 Hash、列表 List、集合 Set、有序集合 SortedSet。如果是高级用户那么还会有如果你是 Redis 中高级用户还需要加上下面几种数据结构 HyperLogLog、Geo、Pub/Sub。

假如 Redis 里面有 1 亿个 key其中有 10w 个 key 是以某个固定的已知的前缀开头的如

果将它们全部找出来

使用 keys 指令可以扫出指定模式的 key 列表。

对方接着追问如果这个 redis 正在给线上的业务提供服务那使用 keys 指令会有什么问题

这个时候你要回答 redis 关键的一个特性redis 的单线程的。keys 指令会导致线程阻塞一段时间线上服务会停顿直到指令执行完毕服务才能恢复。这个时候可以使用 scan 指令scan 指令可以无阻塞的提取出指定模式的 key 列表但是会有一定的重复概率在客户端做一次去重就可以了但是整体所花费的时间会比直接用 keys 指令长。

使用 Redis 做过异步队列吗是如何实现的

使用 list 类型保存数据信息rpush 生产消息lpop 消费消息当 lpop 没有消息时可以 sleep 一段时间然后再检查有没有信息如果不想 sleep 的话可以使用 blpop,在没有信息的时候会一直阻塞直到信息的到来。redis 可以通过 pub/sub 主题订阅模式实现一个生产者多个消费者当然也存在一定的缺点当消费者下线时生产的消息会丢失。

Redis 如何实现延时队列

使用 sortedset使用时间戳做 score, 消息内容作为 key,调用 zadd 来生产消息消费者

使用 zrangbyscore 获取 n 秒之前的数据做轮询处理。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: redis

“redis面试题及答案(下)【三】” 的相关文章