常见Redis面试题

本文围绕常见Redis面试题展开,涵盖单线程Redis速度快的原因、数据类型、过期与回收策略、缓存穿透等问题的解决办法、并发key竞争处理、同步机制以及Java客户端选择等内容,为了解Redis相关知识提供参考。

常见Redis面试题

1. 单线程的redis为毛这么快?

  1. 纯内存操作

  2. 单线程操作避免了频繁上下文切换

  3. 采用非阻塞的多路复用机制,redis-client在操作的时候,产生不同类型的事件的socket,服务端的IO多路复用程序,将其放入队列,事件派发器会去队列中取,转发到不同的事件处理器中处理。

    Redis IO

2. redis数据类型有哪些?

  • String 常见的get/set操作
  • hash value可以存放一些结构化的对象信息
  • list 可以作为简单的队列使用,利用lrange做分页查询
  • set 存放不重复的集合
  • sorted set 带有score权重的set集合,可以做排行榜需求

3. redis的过期策略有哪些?

  • 定时删除:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除,一般不采用
  • 惰性删除:key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null
  • 定期删除:每隔一段时间执行一次删除过期key操作

redis采用的是定期删除+惰性删除

4. redis回收策略

在redis内存达到maxmemory得时候会触发回收策略,设置redis回收策略

5. redis缓存穿透、雪崩、击穿怎么解决?

穿透

查询一个数据库/缓存中一定不存在的数据

  • 布隆过滤器进行拦截
  • 设置默认值
  • 制定key的规则,比如数据id大于10000直接拒绝

雪崩:

在某一个时间段,缓存集中过期失效

  • 失效事件随机,避免集体失效
  • 互斥锁,存在性能问题
  • 多级缓存

击穿

一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库

  • 互斥锁
  • 设置超时时间:
    • 设置热点数据永远不过期
    • 异步更新:维护value的失效时间,异步线程进行更新

6. redis并发key竞争如何解决?

一般的采用redis的事务机制,但是在集群环境下数据已经分片就很难搞,redis的事务就显得鸡肋。
分情况讨论:

  • 对顺序没有要求,采用分布式锁进行排队,属于悲观锁方式
  • 对顺序有要求,采用时间戳方式,在set之前比对时间戳,属于乐观锁方式

7.redis同步机制

部分重同步

  • 从 Redis 2.8 开始
  • 若master run id 不一致,则执行完整重同步操作
    在这里插入图片描述

完整重同步

在这里插入图片描述

8. Redis Java客户端的选择

官方推荐的有三种:Jedis、Redisson和lettuce

  • Jedis:A blazingly small and sane redis java client(一个非常小和正常的redis java客户端)
  • Redisson:distributed and scalable Java data structures on top of Redis server(分布式和可伸缩的Java数据结构在Redis服务器上)
  • lettuce:Advanced Redis client for thread-safe sync, async, and reactive usage. Supports Cluster, Sentinel, Pipelining, and codecs.(高级Redis客户端线程安全的同步,异步,和反应使用。支持集群、标记、流水线和编解码器。)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值