32f6bb3fb8fbfecba4cfe2af92a780e8
Redis 常考知识点

Redis 常考知识点

Redis 解决什么问题

起源 :为了实现一个访客信息追踪网站,需要展示网站最近n条访问记录。当时的数据库在负载高时无法很好地满足,于是作者决定自己写一个具有列表结构的内存数据库。

Redis (Remote Dictionary Server) is an open-source in-memory data structure project implementing a distributed, in-memory key-value database with optional durability

Redis 特点

  • 单线程

  • 丰富的数据结构

  • 数据全放内存中

  • 数据非高可靠(vs DB)

单线程

事件驱动、所有命令处理在一个事件循环中;整个redis服务在启动之后会陷入一个巨大的while循环,不停地处理文件事件和时间事件。文件事件 :在多个客户端中实现多路复用,接受它们发来的命令请求,并将命令的执行结果返回给客户端。

  • read事件 : 新建连接/接收请求

  • write事件 : 返回结果

  • 时间事件 : 记录那些要在指定时间点运行的事件,多个时间事件以无序链表的形式保存在服务器状态中

    • 更新服务器各类统计信息,如时间、内存占用等
    • 数据库后台操作,key过期清理、数据库rehash等
    • 关闭、清理失效的客户端连接
    • 检查是否需要RDB dump,AOF重写
    • 主节点,对从节点定期同步
    • 集群模式,集群定期同步信息和连接测试

beforesleep

进入event loop前执行 cluster集群状态检查,ok->fail、fail->ok

处理被block住的的client,如一些阻塞请求BLPOP等

将AOF buffer持久化到AOF文件

流程:beforeSleep -> epollwait -> 处理请求 -> 定时事件 -> 。。。

注意点

  • 避免大key

  • 避免使用长时间阻塞的命令

    • 禁用 keys/flushall 等命令

    • 大key的平滑删除

  • 避免过热的key

丰富的数据结构

提供string/set等7种数据结构(ref:《Redis设计与实现》

内存数据库

所有数据都存放在内存中, 时延低

注意点:

  • 避免单实例容量过大

  • 控制key的生命周期,redis不是垃圾桶。

  • 打散过期时间,防止集中过期

数据非高可靠

磁盘的持久化:一般配置1s sync,最多丢失 1s 左右的数据

主从同步:异步方式,遇到主从切换后,同步中的数据丢失

数据淘汰策略:

  • noeviction:无逐出

  • allkeys-lru:默认的逐出策略(注:近似的LRU)

注意点:

  • 不要将 redis 当做高可靠的存储来使用
top Created with Sketch.