美文网首页
Redis面试题总结

Redis面试题总结

作者: Jaycee88 | 来源:发表于2024-02-24 20:19 被阅读0次
1. Redis的使用场景有哪些?
  • 热点数据的缓存
  • 限时业务的运用
  • 计数器相关问题
  • 分布式锁
  • 排行榜相关问题
  • 点赞、好友等相互关系的存储
  • 简单队列
2. Redis数据类型

5种基础数据类型

  • String字符串
  • List列表
  • Set集合
  • Hash散列
  • Zset有序集合

3种特殊类型

  • HyperLogLogs(基数统计)
  • Bitmaps (位图)
  • geospatial (地理位置)
3. 底层数据结构
  • SDS 简单动态字符串
    保存了长度
    预分配内存

  • ZipList
    节省空间:根据实际长度来存取
    修改需要重新分配内存

  • QuickList(linkedlist)

  • HashTable
    拉链法解决hash冲突
    渐进式 rehash 扩容

  • IntSet
    字节数组
    集合只包含整数值元素,并且元素数量不多时,会使用

  • ZSkipList
    https://www.jianshu.com/p/9d8296562806
    作为有序列表 (Zset) 的使用
    跳跃表的缺点就是需要的存储空间比较大,属于利用空间来换取时间的数据结构

4. Redis持久化

RDB
AOF
混合模式(4.0)

5. 缓存问题
  • 缓存穿透:是指缓存和数据库中都没有的数据
    解决方案:缓存空值、用户鉴权校验、布隆过滤器
  • 缓存击穿:是指缓存中没有但数据库中有的数据(一般是缓存时间到期)
    解决方案:设置热点数据永远不过期、接口限流与熔断,降级
  • 缓存雪崩:指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机
    解决方案:缓存数据的过期时间设置随机
6. 数据库和缓存一致性

不管是先写MySQL数据库,再删除Redis缓存;还是先删除缓存,再写库,都有可能出现数据不一致的情况
解决方案:
1)延时双删策略

  • 先删除缓存
  • 再写数据库
  • 休眠500毫秒(根据具体的业务时间来定)
  • 再次删除缓存。

2)异步更新缓存(基于订阅binlog的同步机制)

7. Redis 单线程模型

Redis使用单线程模型,这意味着它只使用一个CPU来处理所有请求。因此,Redis不需要考虑多线程之间的同步、锁、竞争等问题,也不需要花费时间和资源在多线程之间的上下文切换上。这使得Redis的设计和实现更简单,性能和效率更高。

那么,Redis为什么选择单线程模型呢?主要有以下几个原因:

  • Redis性能瓶颈不在于CPU,而在于内存和网络。因为Redis使用内存存储数据,所以数据访问非常迅速,不会成为性能瓶颈。此外,Redis的数据操作大多数都是简单的键值对操作,不包含复杂计算和逻辑,因而CPU开销很小。相反,Redis的瓶颈在于内存的容量和网络的带宽,这些问题无法通过增加CPU核心来解决。
  • Redis的单线程模型可以保证数据的一致性和原子性。由于Redis只有一个线程来处理所有的请求,所以不会出现多个线程同时修改同一个数据的情况,也不需要使用锁或事务来保证数据的一致性和原子性。
  • Redis的单线程模型可以避免多线程编程的复杂性和难度。例如线程安全、死锁、内存泄漏、竞态条件等,降低了开发和维护的成本和风险。
db-redis-overview.png db-redis-object-2-2.png

相关文章

网友评论

      本文标题:Redis面试题总结

      本文链接:https://www.haomeiwen.com/subject/lvqnadtx.html