• memcache


    1.memcache是一个存储key-value的高性能的、分布式的对象缓存系统。

    2.memcache虽然被称为“分布式缓存”,但memcache本身不具备分布式功能,memcache集群之间不会通信。
    所谓的分布式完全依赖于客户端程序实现。

    3.memcache通信模型
    (1)应用程序调用memcache客户端的API
    (2)API通过路由算法(一致性hash算法),获得memcache服务器
    (3)API根据得到的mem服务器,调用通信模块,访问memcache集群

    4.memcache实现原理
    结构:
    (1)memcache将得到的内存空间,分为一组slab(内存片)
    (2)每个slab里面有若干个page,每个page默认是1M,如果一个slab占100M内存,那么这个slab应该有100个page
    (3)每个page包含一组chunk,chunk是真正存储数据的地方,同一个slab里面的chunk大小是固定的
    (4)相同大小的slab被组织在一起,称为slab_class

    内存分配:
    (1)mem中value存放的位置是由value的大小决定的,value总是会被存放在与chunk大小最接近的slab中(因为一个slab
    中的chunk大小是固定的,所以可以认为一个slab只有一种型号,
    相邻slab内的chunk基本以1.25为比例进行增长,MemCache启动时可以用-f指定这个比例)

    (2)放slab的时候,首slab要申请内存,申请的内存是以page为单位的。所以在放入第一个数据的时候,无论对象大小多少,
    都会有1M大小的page被分配给该 slab。

    (3)申请到page之后,slab会把page的内存按chunk大小进行切分,切分成一个chunk数组,最后从这个chunk数组中取一个存储数组。

    memcache的LRU算法
    (1)memcache的LRU算法是针对slab的,而非全局的
    (2)在存储数据时,如果slab中没有chunk可用了,memcache会把这个slab中最近最少使用的chunk数据清理掉,放上最
    新的数据。

    5.mem的特性和限制
    (1)MemCache单进程在32位机中最大使用内存为2G,这个之前的文章提了多次了,64位机则没有限制
    (2)key最大长度为250个字节
    (3)单个item的数据最大为1M,超过1M的对象不存储
    (4)memcache服务端是不安全的,telnet进去,就能清数据
    (5)不能够遍历MemCache中所有的item(已存储的数据单元),因为这个操作的速度相对缓慢且会阻塞其他的操作
    (6)memcache的高性能源自两方面的hash
    I.客户端通过hash key,得到一个节点
    II.服务端通过一个hash算法,拿到数据,返给客户端。
    (7)memcache是一个非阻塞,基于事件的服务器程序
    (8)memcache增加一个key时,传入expire为0,说明这个key永久有效,即使永久有效,这个key也会在30天后失效

  • 相关阅读:
    FetchApi 和XHR的主要区别
    关于面试mysql优化的几点纪要
    Python学习第二天数组
    windows7__32位下安装python2.6.6
    一致性哈希算法运用到分布式
    2019年的前端面试总结
    ant design vue + ts 时遇到的坑之from 表单
    vue/cli3 + typescript 中watch prop component computed 的用法
    简易的数据追踪和并发
    基于角色的安全体系
  • 原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/7543330.html
Copyright © 2020-2023  润新知