【校招VIP】Redis与memcache的比较

11月02日 收藏 0 评论 1 java开发

【校招VIP】Redis与memcache的比较

转载声明:文章来源https://blog.csdn.net/Romanticn_chu/article/details/119645821

在日常选择缓存机制时,最容易想到的就是redis和memcache,然后对其进行对比。

一、在性能方面

由于redis只使用单核,而memcache可以使用多核。所以平均到每一个核上,Redis在存储小数据时比Memcached性能更高。而在100k以上的数据时,Memcached性能要高于Redis。

二、支持的数据类型

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,hash等数据结构的存储;memcache支持key-value类型的数据,在内存中维护一张巨大的HashTable,使得对数据查询的时间复杂度降低到O(1),保证了对数据的高性能访问。

三、内存使用率

使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。

四、数据存储与持久化

Redis和memcache都是将数据存储在内存中,都是内存数据库。

memcache可以支持缓存其他的文件,比如,图片、视频等。

memcached不支持内存数据的持久化操作,所有的数据都以in-memory的形式存储。

redis支持持久化操作。redis提供了两种不同的持久化方法来讲数据存储到硬盘里面,一种是快照(snapshotting),它可以将存在于某一时刻的所有数据都写入硬盘里面。另一种方法叫只追加文件(append-only file, AOF),它会在执行写命令时,将被执行的写命令复制到硬盘里面。

五、数据备份与恢复

memcache进程死掉后,数据不可恢复;redis数据丢失后,可以依据aof恢复。Redis支持数据的备份,即master-slave主从模式的数据备份。

六、数据一致性问题

Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。

七、内存管理机制

Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。

Redis的内存管理主要通过源码中zmalloc.h和zmalloc.c两个文件来实现的。Redis为了方便内存的管理,在分配一块内存之后,会将这块内存的大小存入内存块的头部。

八、其他

1、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;

2、过期策略–memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10;

3、分布式–设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从;

4、应用场景不一样:Redis出来作为NoSQL数据库使用外,还能用做消息队列、数据堆栈和数据缓存等;Memcached适合于缓存SQL语句、数据集、用户临时性数据、延迟查询数据和session等。

C 1条回复 评论
阿夏桑

中枪,我脑子里全是错误回答

发表于 2023-11-27 21:00:00
0 0