在选择缓存时,什么时候选择 redis,什么时候选择 memcached

选择 redis 的情况:
1、复杂数据结构, value 的数据是哈希,列表,集合,有序集合等这种情况下,会选择redis, 因为 memcache 无法满足这些数据结构,最典型的的使用场景是,用户订单列表,用户消息,帖子评论等。

2、需要进行数据的持久化功能,但是注意,不要把 redis 当成数据库使用,如果 redis挂了,内存能够快速恢复热数据,不会将压力瞬间压在数据库上,没有 cache 预热的过程。对于只读和数据一致性要求不高的场景可以采用持久化存储

3、高可用, redis 支持集群,可以实现主动复制,读写分离,而对于 memcache 如果想要实现高可用,需要进行二次开发。

4、存储的内容比较大, memcache 存储的 value 最大为 1M。

选择 memcache 的场景:

1、纯 KV,数据量非常大的业务,使用 memcache 更合适,原因是,

a)memcache 的内存分配采用的是预分配内存池的管理方式,能够省去内存分配的时间, redis 是临时申请空间,可能导致碎片化;

b)虚拟内存使用, memcache 将所有的数据存储在物理内存里, redis 有自己的 vm 机
制,理论上能够存储比物理内存更多的数据,当数据超量时,引发 swap,把冷数据刷新到磁盘上,从这点上,数据量大时, memcache 更快;

c)网络模型, memcache 使用非阻塞的 IO 复用模型, redis 也是使用非阻塞的 IO 复用模型,但是 redis 还提供了一些非 KV 存储之外的排序,聚合功能,复杂的 CPU 计算,会阻塞整个 IO 调度,从这点上由于 redis 提供的功能较多, memcache 更快些;

d) 线程模型, memcache 使用多线程,主线程监听, worker 子线程接受请求,执行读写,这个过程可能存在锁冲突。 redis 使用的单线程,虽然无锁冲突,但是难以利用多核的特性提升吞吐量。


分享到:


相關文章: