redis 面试题及答案(下)【二】

在选择缓存时,什么时候选择 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 使用的单线程,虽然无锁冲突,但是难以利用多核

的特性提升吞吐量。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值