redis学习(3) | 青训营笔记

59 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

RDB vs AOF

  • 机制:整体持久化+子进程+二进制压缩 《===》日志记录变化操作+文本存储+每秒记录/操作记录
  • 优劣:
    • 文件大小,恢复效率,(数据大时)启动效率
    • redis运行效率
    • 数据安全性
  • 使用:
    • 优先加载AOF,优先用AOF恢复数据

过期键的删除策略

  • expire 字典 (ptr to all expire keys, timestamp)
  • 定期定量 扫描删除,可平衡CPU和内存的资源使用
  • 惰性删除,推迟到访问key时,判断过期并删除,对内存不友好

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

概念

  • 缓存key大面积失效,缓存 数据库都没有的Key,缓存没有 但数据库有的Key
  • 同一时间高并发访问,导致请求集中导向DB,使得DB崩溃

解决

  • 给缓存设置随机过期时间;缓存预热;加互斥锁
  • 接口层面过滤;缓存设置空值;布隆过滤器,过滤不存在的key
  • 热Key设置不过期;加互斥锁

事务

  • MULTI EXEC WATCH DISCARD 立即执行的关键字

    MULTI EXEC类似打包执行;事务队列 FIFO。

    WATCH 提供CAS行为,对监视的Key执行条件执行,在EXEC阶段判断是否执行事务

  • 错误处理

    • 在EXEC前,收集命令时的错误,会使得事务失败
    • 在EXEC后的错误,不会影响事务,即不支持检查程序员自己的逻辑错误
  • 为了性能,不支持回滚

Redis 和 Memcached 有什么区别?

  • 都是基于内存的数据库,都可以当做缓存使用。

  • 都有过期策略。

  • 性能都好。

  • Redis 支持的数据类型丰富(String、Hash、List、Set、ZSet),而 Memcached 只支持最简单的 key-value 数据类型;
  • Redis 支持持久化,有RDB、AOF两种模式,而 Memcached 没有持久化功能,重启或者挂掉后,无法恢复
  • Redis 原生支持集群模式,Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;
  • Redis 功能丰富,支持发布订阅模型、Lua 脚本、事务等功能。而 Memcached 不支持