基于内存:快
基于键值对K,V
单线程worker
连接很多:epoll
V:五种类型、应用场景
本地方法:计算向数据移动,IO优化
串行化、原子:并行VS串行

I/O模型

redis和memcache的区别及优缺点

数据结构及使用场景

  • Binary String - 二进制安全的字符串
    • 普通缓存
    • 计数器
    • 分布式锁
  • List - 以插入顺序为序的string元素集合。本质是链表
    • topK问题
    • 消息队列
  • Set - 无序、不重复的string元素集合
    • 自动排重的列表,列表可以做取交集,并集,差集的操作。例如微博好友,共同好友等。
  • Sorted Set - 数据结构和Set类似,增加了一个Score字段用来排序。支持TopK的查询。
    • 带权重的set,可以做优先级队列
  • Hashes - map数据结构。
    • 当需要缓存的value是一个对象时,使用Hashes而不使用序列化后的字符串可以减少序列化的开销。同时hashes支持部分属性修改
  • BitArray - 简单的位图,利用数组的下标查找特性,使用一个0/1的比特位来标记结果,大大的节省了内存。
    • 布隆过滤器
  • HyperLogLogs - 一种用来统计唯一元素出现次数的数据结构。

    • pfadd - 新增元素
    • pfcount - 统计元素个数
    • pfmerge - 合并两个HyperLogLogs

      数据持久化两种方式

  • rdb - 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。

  • aof - 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。

    redis内存优化

  • 内存压缩

  • 内存如何分配

    分布式锁专题

  • setnx实现简单的单机分布式锁。

  • 解锁失败问题(锁增加过期时间)
  • 线程A阻塞锁自动过期,锁被线程B持有,A恢复后释放线程B的锁问题。(延迟删除缓存)
  • redLock实现原理及存在的问题

    缓存数据库数据一致性问题

  • redis支持事务且能集成Spring,使用事务可以保证

  • 使用cache-aside-pattern模式使用缓存,cache-aside-pattern存在的问题好好看一下

    缓存四大问题及解决方案(本质是避免大量请求回源数据库)

  • 缓存穿透

  • 缓存击穿
  • 缓存雪崩
  • 缓存污染(使用本地缓存才会出现的场景)

    redis集群使用

  • 集群与单机使用命令上不同的地方

  • 一致性hash算法

    扩展-加分项

  • 多级缓存