zoukankan      html  css  js  c++  java
  • memcache的缓存原理和应用

    缓存原理

    Memcache采用键值对存储方式。它本质是一个大的 hash表,key的最大长度为255个字符,最长过期时间为30天。它的内存模型如下:Memcache预先将可支配的内存空间进行分区(Slab),每个分区里再分为多个块(Chunk)最大1M,但同一个分区中块的大 小是固定的。然后,插入数据时,会根据数据大小寻找最合适的块,然后插入,当然这样也就会有部分内存浪费,但可一定程度上减少内存碎片,总体上,利大于 弊。当Memcache的内存满后,它清除旧数据的原则为:LRU闲置>过期>最少访问。而且它采用的是惰性删除,它并没有提供监控数据过期 的机制,而是惰性的,当查询到某个key的数据时,如果过期,那么直接抛弃。

    应用场景

    1、分布式应用。

            由于memcached本身基于分布式的系统,所以尤其适合大型的分布式系统。

    2、数据库前段缓存。

            数据库常常是网站系统的瓶颈。数据库的大并发量访问,常常造成网站内存溢出。当然我们也可以使用Hibernate的缓存机制。但memcached是基于分布式的,并可独立于网站应用本身,所以更适合大型网站进行应用的拆分。

    3、服务器间数据共享。

    4、 举例来讲,我们将网站的登录系统、查询系统拆分为两个应用,放在不同的服务器上,并进行集群,那这个时候用户登录后,登录信息如何从登录系统服务器同步到查询系统服务器呢?这时候,我们便可以使用memcached,登录系统将登录信息缓存起来,查询系统便可以获得登录信息,就像获取本地信息一样。

    不适合应用的场景:

    1、缓存的数据量比较小。

    2、缓存的数据需要持久化。

    分布式集群

    首先,集群的概念在我理解来就是多个类似于软件之间有了关联的关系,就可以称之为集群,例如,我们常用的LAMP环境,单个的linux、apach、mysql或者php都不能称之为一个集群,但是,它们关联起来以后,就可以称之为一个集群了。那么,memcache分布式集群是个什么情况那?我们都知道,memcache是一个基于分布式的系统,那么,就意味着memcache可以同时部署到多台服务器上,这时候,如果我们可以把这多台memcache服务器关联起来的话,那么这些服务器就是一个memcache集群了。关联方法如下:
    $mem=new Memcache;
    $mem->addsever($ip,$host);
    $mem->addsever($ip,$host);
    $mem->addsever($ip,$host);
    这三台memcache服务器的ip和端口号都是不同的,这时候,因为它们之间已经有了关联,同时它们部署在不同的服务器上,所以可以称之为memcache分布式集合。如果数据量巨大,我们可以用取余和一致性哈希算法来将数据部署到memcache服务器上去。

     

    一致性哈希算法的原理:
    首先求出memcache服务器(节点)的哈希值,并将其配置到0~232的圆(continuum)上。 然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台memcache服务器上。

    取余算法的原理:
    假如有1000万条数据要分布到3台memcache服务器上,那么就需要用1000万条数据的id去磨3,根据所得的余数决定将数据分布在那个服务器上去。

  • 相关阅读:
    ParallelsDesktop在windows 10虚拟机重启后分辨率无法保存的问题解决方案
    Windows10 2021年5月功能更新(21H1)的三种方式
    Database "mem:XXX" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 解决方案
    Win7/8下提示OpenSCManager failed 拒绝访问 解决方案
    将 Windows 更新代理更新到最新版本
    解决Eclipse中无法直接使用sun.misc.BASE64Encoder及sun.misc.BASE64Decoder的问题
    【Windows】U 盘装系统,无法格式化所选磁盘分区[错误: 0x8004242d]解决方案
    Boot Camp列表-苹果电脑Windows驱动下载
    selenium4 Timeouts is deprecated
    Selenium4实践1——对比Selenium3,Selenium4更新了什么?
  • 原文地址:https://www.cnblogs.com/jiaoaozuoziji/p/7339669.html
Copyright © 2011-2022 走看看