美文网首页
redis相关

redis相关

作者: 妥妥的_ | 来源:发表于2020-11-20 11:03 被阅读0次

导读

  1. redis的工作模型和常用数据结构
  2. redis的持久化及数据淘汰机制
  3. redis的应用场景及应对措施
    1. 分布式锁
    2. 缓存穿透、缓存击穿和缓存雪崩
  4. redis的性能瓶颈

redis工作模型

redis的特点:

  1. 单线程
  2. 高并发
  3. 高性能
  4. 支持分布式锁

单线程

  1. 多线程的优缺点:

    1. 优点:提高cpu的利用率
    2. 缺点:需要额外的管理开销,需要复杂的同步机制,避免死锁等等。
  2. 单线程的优缺点:

    1. 没有线程切换的消耗
    2. 实现并发处理,有点复杂
  3. redis为什么要使用单线程?

    1. 没有线程上下文切换的消耗
    2. redis在内存中工作,性能比较好,无需多线程
    3. redis依赖多路复用,实现了并发处理

    redis为什么选择单线程工作模型
    redis单线程解读

底层数据结构

  1. redis底层的数据类型

    • 字符串

      • 简单动态字符串
      • free:可以知道缓存区还有多少剩余空间,可以将惰性空间释放
      • len:做字符串间隔,不需要用指定的字符来间隔,并且可以直接获取字符串长度,不需要遍历
    • 链表

      1. 压缩列表

      2. 双端链表

      3. 快速链表
        :压缩列表和双端链表的折中方案。

      4. 无环

      5. 如果列表中的元素较少,Redis倾向于使用压缩列表进行存储,因为压缩列表占用内存更少,而且比双端链表可以更快载入;当列表对象元素较多时,压缩列表就会转化为更适合存储大量元素的双端链表。

    • 哈希

      1. table:指向桶
      2. size:元素的个数
      3. sizemask:hash计算掩码
      4. rehash的过程:
        1. 按照ht[0]的大小给h[1]分配空间
        2. 将ht[0]的元素rehash计算放入ht[1]中
        3. ht[0]放完之后,释放ht[0]
        4. 将原ht[0]指向ht[1]
      5. 渐进式rehash
        1. 按照ht[0]的大小给h[1]分配空间
        2. 维持一个rehashIndex,记录迁移状态
        3. 每次增删改查都对ht[0]和ht[1]操作,将ht[0]删除,rehashIndex++
        4. 当迁移完成之后,将ht[0]释放,并rehashIndex置未-1
    • 集合

      • 无序
      • 不重复
      • 整数集合:当这个集合内只有整数的时候,redis会自动选择使用整数集合
    • 有序集合 sortSet

  2. redis的工作模型
    了解redis的单线程模型工作原理?一篇文章就够了
    多路复用模型+事件处理器

  3. redis的应用场景
    Redis在互联网公司一般有以下应用:
    String:缓存、限流、计数器、分布式锁、分布式Session
    Hash:存储用户信息、用户主页访问量、组合查询
    List:微博关注人时间轴列表、简单队列
    Set:赞、踩、标签、好友关系
    Zset:排行榜

持久化

  1. redis持久化
    1. RDB:数据快照模式(save、bgsave、自定义)
      • 优点:
        • 简单、恢复快
        • 不影响性能(bgsave)
      • 缺点:
        • 在fork的之后,如果有变更,会丢失
        • 实现比较重,只有数据的最终状态
    2. AOF:增量日志模式(always、second、自定义)
      • 优点:
        • 安全,可以根据不同配置,保证较小区间的数据丢失
        • 轻量、灵活
      • 缺点:
        • rewrite可能会影响系统性能
        • 恢复慢

    10分钟彻底理解Redis的持久化机制:RDB和AOF

缓存淘汰

  1. redis过期策略和内存淘汰
    1. 过期淘汰策略

      • redis采用定时删除+惰性删除,缺点是如果一些key始终没有被操作,那会一直存在于内存中。这时就需要内存淘汰机制。
      • redis的定时删除

      Redis 默认会每秒进行 10 次(redis.conf 中通过 hz 配置)过期扫描,扫描并不是遍历过期字典中的所有键,而是采用了如下方法:

      从过期字典中随机取出 20 个键
      删除这 20 个键中过期的键
      如果过期键的比例超过 25% ,重复步骤 1 和 2

      为了保证扫描不会出现循环过度,导致线程卡死现象,还增加了扫描时间的上限,默认是 25 毫秒(即默认在慢模式下,如果是快模式,扫描上限是 1 毫秒)

    2. 内存淘汰机制

redis集群

  1. redis分布式集群的常见形式
    主从模式
    哨兵模式
    集群模式

    Redis分布式集群----redis的三种集群方式总结(5)

  2. Redis的多路复用

    Redis I/O 多路复用

  3. 集群模式下key是怎么寻址的

  4. 分布式寻址都有哪些算法

  5. 一致性hash算法如何动态的增加和删除一个节点

常见问题

  1. 缓存穿透、缓存击穿、缓存雪崩

    1. 缓存穿透
      1. 查询了不存在的数据,每次都会透过redis,查询db
      2. 解决方法:布隆过滤器、当返回结果为空,也进行缓存。
    2. 缓存雪崩
      1. 大量key在同一时刻过期,导致db压力暴增。
      2. 解决方法:
        1. 可以设置一个随机范围的过期时间
        2. 互斥锁更新
    3. 缓存击穿
      1. 单个key过期时,正好有大量调用,请求直接打到db上。
      2. 解决方法:
        1. 互斥锁更新
        2. 设置永不失效(不推荐)
        3. 无论结果是否存在都返回,不存在则起异步线程去获取
  2. redis性能为什么高?

    1. 设计巧妙的数据结构
    2. 多路复用模型
    3. 事件机制

    为什么单线程的Redis能够达到百万级的QPS?

  3. 有海量key和value都比较小的数据,在redis中如何存储才更省内存?
    首先这是一个hash结构的数据,在redis中hash结构的数据通常是有两种结构保存。

    1. 压缩列表
    2. hashtable

    从更省内存的角度来看,应该选择压缩列表,这种场景,可以将key映射到不同的map里,因为key和value都很小,这样就可以使用压缩列表的数据结构保存数据。
    (事实上,redis在创建数据的时候,会自我判断使用哪种数据结构。)

  4. 如何保证redis和DB中的数据一致性?

    参考

  5. 如何用redis实现分布式锁?

  6. 压测产生的垃圾数据该怎么清理

    1. db,用影子表
    2. redis,key带上后缀,标志
  • 常见缓存问题解决方案
  • redis事务
  • redis的CAS方案
  • redis的pipeline
  • redis的主从复制原理
  • 百亿级key存储方案
  • 如何保证redis和数据库的一致性
  • redis和membercache的区别,为什么单线程的redis性能要比多线程的membercache要高
  • redis的并发竞争实质是什么?如何解决

redis的并发竞争问题是什么?如何解决这个问题?

延伸

  1. redis中hash的扩容与缩容与java的hashmap方法的比较?
  2. 有序链表的实现
    1. redis中的跳跃表与hashmap的红黑树

参考

1. 一文深入了解Redis内存模型

相关文章

  • redis汇总

    redis优化 redis 操作相关 安装Redis redis常用命令

  • Redis与Python的交互

    下载redis数据库相关模块 Redis pip install redis 并且进行导入相关模块 from re...

  • redis使用相关命令

    Redis keys 命令 下表给出了与 Redis 键相关的基本命令: Redis String类型相关命令 R...

  • Ansible-playbook roles安装redis实例(

    1、相关redis参数: 2、/templates/redis.conf配置相关参数: daemonize yes...

  • SpringBoot整合redis——redisTemplate

    SpringBoot整合redis——redisTemplate的使用 加入redis相关依赖 yml redis...

  • Redis

    redis 相关的可执行文件 redis-server Redis服务器 redis-cli ...

  • redis

    阿里云安装redis yum源安装 2.应用程序安装 redis的相关命令 应用程序安装的redis相关命令: 启...

  • redis相关

    1. 使用redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就...

  • Redis相关

    Redis安装及使用1)下载地址:https://github.com/MSOpenTech/redis/rele...

  • redis相关

    1、centos下登录客户端 -h 代表IP地址-p 代表端口-a 代表密码,如果含有! 、#等特殊字符要在前面加...

网友评论

      本文标题:redis相关

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