zoukankan      html  css  js  c++  java
  • memcache 内部原理实现

    Lazy Expiration
      memcached 内部不会监视记录是否过期,而是在 get 时查看记录的时间戳,检查记录是否过期。这
      种技术被称为 lazy(惰性)expiration。因此,memcached 不会在过期监视上耗费 CPU 时间。

    LRU( Least Recently Used 最近少使用):

      从缓存中有效删除数据的原理
      memcached 优先使用已超时的记录的空间,但即使如果也会发生空间不够用的情况,这时就要用LRU策略进制进行空间分配
      从最近未被使用的记录中搜索,并将空间分配给新的记录

      指定 -M 参数禁用LRU,内存写满后会返回错误 memcached 毕竟不是存储器,而是缓存,所以推荐使用 LRU

    分布式算法: 

    memcached的分布式算法是在客户端实现的,当一个key确定的时候也就确定了他要存储的mc节点
    算法:crc32(key)/n key为要缓存的键,n为链接的服务器节点数
    优点:余数计算的方法简单,数据的分散性也相当优秀
    缺点:当添加或移除服务器时,余数就会产生巨变,从而影响缓存的命中率。

    解决方案:
    一致性 hash 算法(Consistent Hashing)
    首先计算出节点的hash值,分布到 0~2^32的园上,然后用同样的方法求出存储数据的键的hash值,并映射到圆上
    从映射位置开始顺时针开始查找,首次遇到的服务器则为要存储的节点,如果超过后仍找不到则放到 第一台节点上

    采用这种算法,当增加或减少服务器时只有很少的部分key会受到影响

    虚拟节点:当节点数非常少时,分布会不均匀,可以把节点放大几百倍,然后一个节点对应多个虚拟虚拟解决,会达到同样的效果

    Memcached、Key-Value Store 、Bittorrent DHT、LVS中都采用了Consistent Hashing算法

    http://blog.csdn.net/sparkliang/article/details/5279393

     

    todo

  • 相关阅读:
    go 本地安装 grpc-go
    vscode python code-runner 中文乱码解决
    spring-cloud-sleuth 学习资源
    vscode 快键键资源整理
    vscode and python
    redis分布式锁
    TF-IDF算法解释
    spring 4.1 xml配置头部信息 maven配置信息
    google像apple 30亿美元购买流量
    spring 启动异常Failed to read candidate component class
  • 原文地址:https://www.cnblogs.com/siqi/p/3668710.html
Copyright © 2011-2022 走看看