Memory Cache(内存缓存)

当Google测试了Google Search服务的可用性后,发现速度是最影响Web应用的可用性的因素之一。相对于作用相同但是速度慢的应用,用户更喜欢速度快的应用。多来年,Google已经掌握了如何使应用运行更快,甚至是有上百万的用户访问这个应用。提高Web应用的速度的一个方法就是为存储使用分布式的内存缓存,而不是从磁盘中获取经常用的数据。

当你将信息放到DataStore上的时候,你的信息被永久地保存了,被保存在云中某个地方的磁盘中,甚至你的应用不在使用,也会被备份和维护。

内存缓存遍布于云中你的应用的所有的实例的内存中。也可能有专用的内存缓存服务器。因为内存缓存是临时的,没有必要把它保存到磁盘或备份。这就使得内存缓存比Datastore更快。

内存缓存基于一个叫做“memcached”的产品,它提供了一个多语言的高速的分布式缓存(in a number of languages)。memcached软件使用网络来保证数据的拷贝的同步。当数据在一个服务器上被更新了,这个更新就会被传递给参与了内存缓存的所有的其他服务器:http://www.danga.com/memcached/.

内存缓存的规则

内存缓存最基本的规则是在内存缓存中没有任何东西是被保证的。当被请求时,内存缓存尽它最大的努力返回你的数据。当你将数据放在缓存中时,你会指定想要数据在缓存中保持多久。比如,你可以要求的数据被保存一个小时。然而,如果你的应用实例在内存中运行缓慢,它们可能在几秒内扔掉你的数据来释放内存。

这种机制初看使得内存缓存几乎没有用。然而,如果你的应用在内存中运行不慢,内存缓存将会丢掉你的数据的可能性就很小。允许在一个特殊的时刻(once in a great while)丢掉数据使得内存缓存非常的快。这也意味着对于真正重要的数据,你不能只在内存缓存中存储一个备份。你必须在Datastore中保留一个备份。

结果对于一个可扩展的Web应用中的大量的数据,我们很高兴接受对这个内存缓存的妥协。如果数据偶尔丢失的话,数据元素可以被重建。也有一些数据比如登录的用户的数量,没有必要是精确的。

其他的内存缓存的规则如下:

?有一个内存缓存在你的应用实例之间共享。如果你在一个实例中存储了数据,这个数据对于所有的应用都是可用的。如果你从一个实例中删除数据,它将会在所有的实例中被删除。

?内存缓存操作起来就像一个巨大的分布式的Python字典。缓存中的每一个项目有一个唯一键。

?缓存中的每一个项目有一个失效时间,可以是几秒甚至是一个月。你可以忽略这个生命周期,缓存将尽它的可能保持这个对象。在内存缓存中典型的生命周期是大约10s到几个小时。你可以在缓存中替换这个对象并指定一个新的生命周期来延长生命周期。

将有意义的项目放到内存缓存中。它的大小是有限制的,所以你应当将适当的小的经常被使用的数据放到内存缓存中。

使用内存缓存

时间: 2024-08-26 16:48:25

Memory Cache(内存缓存)的相关文章

buff/cache内存缓存过大,设置定时清理

buff/cache内存缓存过大,设置定时清理 buff/cache居然占用内存达到10个G的内存,解决方法:1.编写脚本 vim cleanCache.sh 编写内容如下: echo 1 > /proc/sys/vm/drop_caches ehco 2 > /proc/sys/vm/drop_caches ehco 3 > /proc/sys/vm/drop_caches 2.给脚本添加执行权限chmod 777 cleanCache.sh3.配置定时执行脚本crontab -e (

PHP memcache 内存缓存 数据库查询 应用 高洛峰 细说PHP

PHP memcache在数据库查询中应用,减少连接数据库的次数,降低服务器的压力! /*  * memcache应用说明 memory cache 内存缓存  * 工作原理  *  服务器端口port 11211    * MemCached 存取键值对key => value  * 1.内网访问  * 2.设置防火墙  */           //创建memcache对象         $mem  =  new  Memcache();                  //连接memc

RHCA442学习笔记-Unit11内存缓存

Unit 11 Memory Caches 内存缓存         学习目标:               A. 使用内存来改善运行慢的子系统的服务时间. 11.1 Strategies for using memory 内存使用策略 A.      减少内存使用者负载 a.       slab cache 分配缓存 B.      减少或延时运行慢的子系统的服务时间 a.       Filesystem metadata文件系统源数据:buffer cache(slab cache) b

Android-Universal-Image-Loader学习笔记(3)--内存缓存

前面的两篇博客写了文件缓存,现在说说Android-Universal-Image-Loader的内存缓存,该内存缓存涉及到的类如图所示 这些类的继承关系如下图所示: 如同文件缓存一样,内存缓存涉及的接口也有两个:MemoryCacheAware 和MemoryCache,其中MemoryCache只是简单的继承了MemoryCacheAware并没有声明其他的方法.MemoryCacheAware接口的方法如下: @Deprecated public interface MemoryCache

带你了解Android常见的内存缓存算法

带你了解Android常见的内存缓存算法 本片博客主要简介以下两个问题 介绍一下常见的内存缓存算法 怎样实现这些算法 大家应该对ImageLoader这个框架都不陌生吧,一个很强大的图片加载框架,虽然作者去年的时候已经停止维护了,但里面的许多东西还是值得我们去学习的.本篇博客讲解的内存缓存算法正是基于ImageLoader的实现基础之上的 常见的几种缓存算法 (1)LRU即Least RecentlyUsed,近期最少使用算法. 也就是当内存缓存达到设定的最大值时将内存缓存中近期最少使用的对象移

定长单元的批次内存缓存池的简洁实现

问题描述: 1.内存管理计算机编程中一个基本问题,其目的在于: 1)一次可分配多个单元块,缓存维护,以改善反复的小对象申请的性能开销: 2) 管理以分配的内存,有效减少碎片的产生: 3) 保证软件使用的内存透明,了解峰值,了解使用情况,便于优化查错: 2.常用的内存管理机制有以下: 1) 变长块,依靠链表维护,一个节点一块申请了的内存,内存块大小不等,等接到一个申请时,先查维护的链表,若有可从链表取出.这种方法有很多缺点:1,当申请的内存块要遍历链表节点找到大小合适的块,最坏情况下需要把链表所有

memory barrier 内存栅栏 并发编程

并发编程 memory barrier (内存栅栏) CPU级 1.CPU中有多条流水线,执行代码时,会并行进行执行代码,所以CPU需要把程序指令 分配给每个流水线去分别执行,这个就是乱序执行: 2.CPU中有read buffer/ write buffer 这2个读写缓存,这2个部件用于缓存CPU对内存的读写操作,并不是实时同步到CPU缓存(L1/L2/L3),这个就会导致更新一块内存后,其他CPU感知不到: 读取的时候,优先到read buffer找数据,找到了,就用这个数据了,如果这时内

Linux下如何释放cache内存

转自:http://www.linuxidc.com/Linux/2015-02/112685.htm 在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题. 先来说说free命令 [[email protected] ~]# free -m    total used free shared buffers cached    Mem: 249 16

iOS开发之缓存框架、内存缓存、磁盘缓存、NSCache、TMMemoryCache、PINMemoryCache、YYMemoryCache、TMDiskCache、PINDiskCache

1.在项目中我们难免会用到一些缓存方式来保存服务器传过来的数据,以减少服务器的压力. 缓存的方式分为两种分别为内存缓存和磁盘缓存,内存缓存速度快容量小,磁盘缓存容量大速度慢可持久化.常见的内存缓存有NSCache.TMMemoryCache.PINMemoryCache.YYMemoryCache.常见的磁盘缓存有TMDiskCache.PINDiskCache.YYCache. 1.本文章着重讲下YYCache. 这是为什么呢,因为他比其他的缓存框架更加高效,使用方便. YYCache: 去掉