常用缓存技术Memcached、Redis异同与应用场景选择

Redis/缓存系统
456
0
0
2022-05-25
标签   Redis

缓存就是数据交换的缓冲区Cache。当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

缓存工作的原则是“引用的局部性”,这可以分为时间局部性和空间局部性。空间局部性是指CPU在某一时刻需要某个数据,那么很可能下一步就需要其附近的数据;时间局部性是指当某个数据被访问过一次之后,过不了多久时间就会被再一次访问。对于应用程序而言,不管是指令流还是数据流都会出现引用的局部性现象。

在互联网应用中最广泛的两类缓存技术redis和memecache,下面讲述两者的异同与选择。

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

Memcached

Memcached是以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等。

Redis

Redis是一个开源的、广泛应用的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的缓存服务。

常用缓存技术Memcached、Redis异同与应用场景选择

特别说明

无论Redis、memcached都有云端的服务出现,相对于原来的安装部署维护,可以省去很多工程工作。比如阿里的 云数据库 Memcache 版( ApsaraDB for Memcache )、云数据库 Redis 版,其实就是memcached和Redis的云服务版本。

常用缓存技术Memcached、Redis异同与应用场景选择