zoukankan      html  css  js  c++  java
  • Memcached概述

    Memcached

    Memcached是一套分布式的内存对象缓存系统,使用C语言编写,作为数据库的前端cache,缓存数据库查询结果能够减轻数据库负载。
    类似一张巨大的hash表,缓存的对象以key-value对的形式存在。

    工作流程

    1. 检查client请求的数据是否在Memcached中存在,若存在直接返回结果
    2. 若不存在,查询数据库,返回结果并把结果缓存
    3. 每次改动数据库时要同一时候更新Memcached数据
    4. 内存空间用完之后使用LRU算法替换缓存

    特点

    1. 基于文本行的协议,能够直接通过telnet管理
    2. 基于libevent,异步io,高性能。libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能 封装成统一的接口。
    3. 对被缓存的数据没有备份,重新启动后对数据库产生较大的压力
    4. memcached不互相通信的分布式,分布式由client完毕

    工作原理

    服务守护进程执行后,client连接到服务进程进行操作。眼下支持python,c,php等多种client。服务进程基于事件的单进程单线程实现。

    • 内存管理
      内存使用slab分配器分配,这样的方案能够降低内存碎片和内存分配释放次数,加快处理速度。服务进程把分配的内存切割成各种固定尺寸的块,依据待缓存数据的大小选择一个最合适大小的块存入。分配的内存不会释放,而是反复利用。
      数据大小和块的大小不匹配时会造成内存利用率低下。默认情况下不同大小的块的尺寸以2的增长因子扩大,能够使用'-f'选项调整增长因子。
    • 分布式
      分布式由client实现,client依据key来选择不同的memcachedserver。
      一般使用hash值modserver台数来选择。这样当server台数发生变化时会造成大量key相应的server改变,短时间内数据库server负载很大。一致性hash能够解决问题。
      • 一致性hash使用普通的hash将每一个key映射到圆环上的一个点,而每一个server节点也映射到圆环上的一个点。依据key相应的圆环上的点顺时针行进找到的第一个节点即为应保存的位置。
      • 对server节点hash时非常难做到server节点在圆环上的均匀分布,能够採用虚拟节点的思想,为每一个server在圆环上分配100~200个点,做到更均匀的hash。
      • 当移除或添加�一个server节点时,仅仅有此节点相应的key的缓存受到影响。
         
         
        转载请注明作者:Focustc,博客地址为http://blog.csdn.net/caozhk,原文链接为点我
  • 相关阅读:
    Codechef EDGEST 树套树 树状数组 线段树 LCA 卡常
    BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
    Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal
    Codeforces 316G3 Good Substrings 字符串 SAM
    Codechef CHSIGN Change the Signs(May Challenge 2018) 动态规划
    BZOJ1396 识别子串 字符串 SAM 线段树
    CodeForces 516C Drazil and Park 线段树
    CodeForces 516B Drazil and Tiles 其他
    CodeForces 516A Drazil and Factorial 动态规划
    SPOJ LCS2
  • 原文地址:https://www.cnblogs.com/blfshiye/p/3789097.html
Copyright © 2011-2022 走看看