zoukankan      html  css  js  c++  java
  • 【阅读笔记】Redis

    内存模型

    1. 内存划分

      1. 数据本身
      2. redis进程运行本身需要的内存
      3. 缓冲区
      4. 内存碎片
    2. 存储细节

      1. 数据模型

        1. dicEntry:每一个键值对(Key-Value)都会有一个dicEntry。
        2. Key:redis key,以SDS的格式存储
        3. redisObject:redis value,以redisObject的格式存储。
      2. jemalloc

        redis默认的内存分配器。

      3. RedisObject

        redis中的所有数据都是以RedisObject的形式存储的。

        typedef struct redisObject {
          unsigned type:4;
          unsigned encoding:4;
          unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */
          int refcount;
          void *ptr;
        } robj;
        
      4. SDS

        SDS(Simple Dynamic String),Redis采用SDS来标识字符串

        struct sdshdr {
            int len;
            int free;
            char buf[];
        };
        

        buf表示字节数组,用来存储字符串;len表示buf已使用的长度,free表示buf未使用的长度。下面是两个例子。

    3. 对象类型

      redis支持五种类型的数据。

      1. 字符串

        • redis最基础的类型,字符串的长度不能超过512MB
      2. 哈希

        • 哈希时redis支持的五种数据类型一直,redis作为key-value数据库本身所使用的数据结构
      3. 列表

        • 列表(list)用来存储多个有序的字符串,每个字符串称为元素;

        • 一个列表可以存储2^32-1个元素。

        • Redis中的列表支持两端插入和弹出,并可以获得指定位置(或范围)的元素,可以充当数组、队列、栈等。

      4. 集合

        • 集合(set)与列表类似,都是用来保存多个字符串;
        • 集合与列表有两点不同:集合中的元素是无序的,因此不能通过索引来操作元素;集合中的元素不能有重复。
        • 一个集合中最多可以存储2^32-1个元素;
        • 除了支持常规的增删改查,Redis还支持多个集合取交集、并集、差集。
      5. 有序集合

        • 有序集合与集合一样,元素都不能重复;
        • 但与集合不同的是,有序集合中的元素是有顺序的。
        • 与列表使用索引下标作为排序依据不同,有序集合为每个元素设置一个分数(score)作为排序依据。

    持久化

    持久化即备份,这是高可用的策略之一,有了备份,就可以在Redis故障通过备份进行恢复。redis持久化主要有RDB和AOF。

    1. RDB

      RDB(Redis DataBase),基于策略定时将redis内存中的数据保存到硬盘。需要时可以通过这个备份文件进行恢复。

    2. AOF

      AOF(Append Only File),是把每次redis执行的命令记录到日志文件中(类似于MySql的Bin log),当Redis启动时可以通过执行log中的命令来恢复数据。

    主从复制

    主从复制,是把一台redis服务器上数据复制到其他服务器的机制,其中前者被称为主节点(master)。后者被称为从节点(slave)。

    上面说的持久化是解决单机备份问题(内存到硬盘),主从复制主要解决数据在多机器之间的热备份,实现负载均衡和故障恢复。

    主从复制的主要主要作用:

    1. 数据冗余:数据热备,多机备份。
    2. 故障恢复:当主节点出现问题时,可以让从节点提供服务,是一种功能的冗余。
    3. 负载均衡:可以让主节点写,从节点多,可以把压力分配到多个从节点,从而实现负载均衡。
    4. 高可用基石:主从复制时实现哨兵和集群的基础。

    哨兵

    哨兵,Redis sentinel,在主从复制的基础上实现故障恢复的自动化。其核心功能是主节点(master)的自动故障转移

    主要功能:

    1. 监控(Monitor):哨兵不断检查主节点和从节点是否正常工作
    2. 自动故障转移(Automatic failover):主节点不正常时,哨兵启动自动故障转移,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点从这个新的主节点复制数据。
    3. 配置提供着(Configuration provider):客户端可以通过哨兵来获取主节点地址。
    4. 通知(Notification):哨兵可以把故障转移结果通知给客户端。

    架构

    它由两部分组成,哨兵节点和数据节点:

    1. 哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据

    2. 数据节点:主节点和从节点都是数据节点。

    集群

    持久化实现了单机的备份,主从解决了多机的热备份,以及读的操作的负载均衡,最终通过哨兵实现了主节点的自动故障迁移。

    目前还有一个核心问题,主节点只有一个,写操作只能写到一个节点,还没有实现负载均衡,存储能力完全受限于单机的存储能力。

    集群就是用来解决写操作负载均衡的问题。其核心就是数据分片。集群将数据分散到不同的集群上,解决单机存储能力受限的问题。

    阅读的博客:https://www.cnblogs.com/kismetv/category/1186633.html

  • 相关阅读:
    隐藏quick launch(非原创)
    MOSS 的缓存及察看
    在ubantu 8.4上 让鼠标的滚轮工作
    关于QuickHTML的开发 (1)
    Jquery 和 shanrepoint
    一个简单的隐藏quick launch的js方法
    在vmware workstation 6.5上安装 vmware tools
    一本有关 MOSS 开发的书 Wrox.SharePoint.2007.and.Office.Development.Expert.Solutions
    IOS 概述
    iPhone应用程序开发基础之一: IBOutlet与IBAction
  • 原文地址:https://www.cnblogs.com/Brake/p/14012506.html
Copyright © 2011-2022 走看看