缓存事情的原则是“引用的局部性”,这可以分为韶光局部性和空间局部性。空间局部性是指CPU在某一时候须要某个数据,那么很可能下一步就须要其附近的数据;韶光局部性是指当某个数据被访问过一次之后,过不了多久韶光就会被再一次访问。对付运用程序而言,不管是指令流还是数据流都会涌现引用的局部性征象。
在互联网运用中最广泛的两类缓存技能redis和memecache,下面讲述两者的异同与选择。
没有必要过多的关注性能,你须要关注内存利用率。对付key-value这样大略的数据储存,memcache的内存利用率更高。如果采取hash构造,redis的内存利用率会更高。当然,这些都依赖于详细的运用处景。

你须要关注关注数据持久化和主从复制时,只有redis拥有这两个特性。如果你的目标是构建一个缓存在升级或者重启后之前的数据不会丢失的话,那也只能选择redis。
你该当关心你须要的操作。redis支持很多繁芜的操作,乃至只考虑内存的利用情形,在一个单一操作里你常常可以做很多,而不须要将数据读取到客户端中(这样会须要很多的IO操作)。这些繁芜的操作基本上和纯GET和POST操作一样快,以是你不但是须要GET/SET而是更多的操作时,redis会起很大的浸染。
对付两者的选择还是要看详细的运用处景,如果须要缓存的数据只是key-value这样大略的构造时还是采取memcache,它也足够的稳定可靠。如果涉及到存储,排序等一系列繁芜的操作时,毫无疑问选择redis。
关于redis和memcache的不同,下面罗列了一些干系说法,供记录:
1、存储办法:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis有部份存在硬盘上,这样能担保数据的持久性,支持数据的持久化。
2、数据支持类型:
redis在数据支持上要比memecache多的多。
3、利用底层模型不同:
新版本的redis直接自己构建了VM 机制 ,由于一样平常的系统调用系统函数的话,会摧残浪费蹂躏一定的韶光去移动和要求。
结论:有持久化需求或者对数据构造和处理有高等哀求的运用选择redis,其他大略的key/value存储,选择memcache。
MemcachedMemcached因此LiveJurnal旗下Danga Interactive公司开拓的高性能分布式内存缓存做事器。实在质上便是一个内存key-value数据库,但是不支持数据的持久化,做事器关闭之后数据全部丢失。Memcached利用C措辞开拓,在大多数像Linux、BSD和Solaris等POSIX系统上,只要安装了libevent即可利用。在Windows下,它也有一个可用的非官方版本(http://code.jellycan.com/memcached/)。Memcached 的客户端软件实现非常多,包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang, Lua等。当前Memcached利用广泛,除了LiveJournal以外还有Wikipedia、Flickr、Twitter、Youtube和 WordPress等。
RedisRedis是一个开源的、广泛运用的Key/Value的内存数据库。和Memcached类似,但是支持数据的持久化,办理了断电后数据完备丢失的情形。而且它支持更多的类型,除了string外,还支持lists(链表)、sets(凑集)和zsets(有序凑集)几种数据类型。Redis利用C措辞开拓,在大多数像Linux、BSD和Solaris等POSIX系统上无需任何外部依赖就可以利用。Redis的官网为: http://redis.io/。 Redis的安装非常方便,只需从http://redis.io/download获取源码,然后make && make install即可。
当前Redis的运用已经非常广泛,海内像新浪、淘宝,国外像 Flickr、Github等均在利用Redis的缓存做事。
特殊解释
无论Redis、memcached都有云真个做事涌现,相对付原来的安装支配掩护,可以省去很多工程事情。比如阿里的 云数据库 Memcache 版( ApsaraDB for Memcache )、云数据库 Redis 版,实在便是memcached和Redis的云做事版本。