• 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

  • 相关阅读:
    笔记33 Spring MVC的高级技术——Spring MVC配置的替代方案
    笔记32 SpringMVC中使用静态资源、处理中文乱码
    笔记31——注解
    笔记30 视图解析 ——TilesViewResolver
    笔记29 视图解析 ——InternalResourceViewResolver
    笔记28 接受请求的输入 ——处理表单
    笔记27 接受请求的输入 ——通过路径参数接受输入
    笔记26 接受请求的输入 ——处理查询参数
    笔记25 传递模型数据到视图中
    笔记24 定义类级别的请求处理
  • 原文地址:https://www.cnblogs.com/siqi/p/3668710.html
Copyright © 2020-2023  润新知