• 缓存Memcached 与 Redis 相同点差异点分析


    memcach简介

    Memcache时一个内存对象缓存系统,用于加速动态web应用程序,减轻数据库负载。它可以应对任意多个连接,使用非阻塞的网络I/O,
    工作机制:
    在内存中开辟一块空间,然后建立一个hash表,memcached自管理这些hash表

    工作原理

    Memcached基于健值对存储,key会通过hash算法转化成hash-key,便于查找。
    Memcached有两个核心组件组成:服务端(server)和客户端,在一个memcached的查询中,客户端会先计算key的hash值来确定所出的server位置。当server确定以后,客户端对就会发送一个查询请求给对应的server,让它查找确切的数据。

    内存管理机制

    emcached会预先分配内存,
    Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,ltem根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且减少内存碎片的产生,但这种方式也会带来一定程度上的空间浪费

    memcache与redis区别

    1)redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储
    2)内存使用使用效率对比
    使用简单的key-value存储的话,memcached的内存利用率会更高一点,如果redis采用hash结构来做key-value存储,由于其组合式的压缩,内存的利用率更高。
    3)性能对比:由于redis只使用单核,而memcached使用多核,所以平均在每一个核上redis在存储小数据时比memcached性能更高,而在100Ks=以上的时候memcached性能要高于redis
    4)内存管理机制的不同
    在redis中,并不是所有的数据都一一直存储在内存中的,这是和memcached相比最大的一个区别
    Redis只会缓存所有的key端的信息,如果redis发现内存的使用量超过某一个值,将触发swap的操作,redis根据相应的表达式计算出那些key对应value需要swap到磁盘,然后再将这些这些key对应的value持久化到磁盘中,同时再内存清除。同时由于redis将内存中的数据swap到磁盘的时候,提供服务的主线程和进行swap操作的子进程会共享这部分内存,所以如果更新需要swap的数据,redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改
    5)数据持久化的支持
    虽然redis是基于内存的存储系统,但是他本身是支持内存数据的持久化,而且主要提供两种主要的持久化策略,RDB快照和AOF日志,而memcached是不支持数据持久化的操作的。
    RDB持久化通过保存了数据库的健值对来记录数据库状态的不同,AOF持久化是通过保存reds服务器所执行的命令来保存记录数据库的状态的,
    RDB持久化保存数据库状态的方法是将msg,fruits,numbers三个健的健值对保存到RDB文件中,而AOF持久化保存数据库的状态则是将服务器执行的SET,SADD,RPUSH三个命令保存到AOF文件中的,

    RDB快照

    redis支持将当前的数据快照存放成一个数据文件的持久化机制,即RDB快照,但是一个持续写入的数据库是如何生成快照的,
    在生成快照的时候,将当前的进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成RDB文件。我们可以通过redis的slave指令来配置RDB快照生成的时机。RDB文件不会坏掉,因为其写操作是在一个新进程中进行的,当生成一个新的RDB文件时redis生成的子进程会先将数据写到一个临时文件中,然后通过原子性rename系统调用将临时文件重命名为RDB文件。

    AOF持久化的实现

    OF持久化的实现可以分为命令追击(append),文件写入,文件同步(sync)
    1)命令追加
    当AOF持久化功能打开的时候,服务器在执行完一个写命令的时候,会以协议的格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾
    2)AOF文件的写入与同步
    服务器在处理文件事件时可能会执行写命令,使得一些内容被追加到aof_buf缓冲区里面,所以服务器在每次结束一个事件循环之前,它都会调用flushAppendonlyFIle函数考虑是否需要将将缓冲区的内容写入和保存到AOF文件里面。如果函数被调用,并且距离上次同步AOF文件已经超过了一秒钟,那么服务器会先将aof_buf中的内容写入到AOF文件中,然后再对AOF文件进行同步
    3)文件的载入与数据还原
    4)AOF重写
    AOF持久化保存的命令越来越多,文件里的内容也月来越多,会对计算机造成影响。为了解决AOF文件体积膨胀问题,REDIS提供了AOF重写功能。Redis服务器可以创建一个新的AOF文件,新旧两个AOF文件保存的数据状态相同,但新AOF文件不会包含任何浪费空间的冗余命令,所以新的AOF会比旧的体积要小

  • 相关阅读:
    mac 安装了docker,使用命令提示:bash : docker :command not found 的解决办法
    延世韩国语第1册第1课第1节内容提要안녕하십니까?
    延世韩国语第1册第1课第3节内容提要회사원이 아닙니다。会社员不是的(我不是公司职员)
    韩国语字母发音(元音/母音)
    2022年4月10日,随笔18,排名59596。
    延世韩国语第1册第1课第2节内容提要어느 나라 사람입니까?
    requests https忽略证书警告的几种方法
    requests post接口模拟上传文件
    requests 模拟multipart/formdata提交数据方式的方法
    《现代操作系统(中文第四版)》实验一 bash脚本实现cal
  • 原文地址:https://www.cnblogs.com/hellowzd/p/9814398.html
Copyright © 2020-2023  润新知