Caching 如果redis已经是堆栈的一部分,为什么Memcached仍然与redis一起使用?
Redis可以做Memcached提供的任何事情(LRU缓存、项目到期、现在3.x+版本中的集群,目前处于beta版)或使用twemproxy等工具。性能也差不多。此外,Redis增加了持久性,因此在服务器重新启动时无需进行缓存预热 参考一些比较Redis和Memcache的老答案,其中一些支持用Redis替代Memcache(如果已经存在于堆栈中):Caching 如果redis已经是堆栈的一部分,为什么Memcached仍然与redis一起使用?,caching,redis,memcached,Caching,Redis,Memcached,Redis可以做Memcached提供的任何事情(LRU缓存、项目到期、现在3.x+版本中的集群,目前处于beta版)或使用twemproxy等工具。性能也差不多。此外,Redis增加了持久性,因此在服务器重新启动时无需进行缓存预热 参考一些比较Redis和Memcache的老答案,其中一些支持用Redis替代Memcache(如果已经存在于堆栈中): 尽管如此,在研究Instagram、Pinterest、Twitter等大型网络公司时,我发现他们使用Memcached和Red
- 按特定模式列出所有缓存的键,并读取或删除它们的值。在redis中非常容易,在memcached中不可行(容易)
- 存储超过1mb的有效负载在redis中很容易做到,需要在memcached中调整板大小,这本身就有性能方面的副作用
- 当前缓存内容的简易快照
- Redis cluster与语言驱动程序一起也可用于生产,因此集群部署也很容易
我今天将memcached视为Redis之上的一个用例的主要原因是,使用纯HTML片段缓存(或类似应用程序)应该能够获得更高的内存效率。如果您需要将对象的不同字段存储在不同的memcached键中,那么Redis散列将更加高效,但是当您有大量的键->简单字符串对时,memcached应该能够为您提供更多的每兆字节项 memcached的其他优点:
- 这是一段非常简单的代码,所以如果您只需要它提供的功能,我想这是一个合理的选择,但我从未在生产中使用过它
- 它是多线程的,所以如果您需要在单框设置中进行扩展,这是一件好事,您只需要使用一个实例
maxmemory
限制时,Redis会尝试选择一个好对象作为逐出的候选对象,查看所有对象,而不管大小类别,但只能提供一个大致良好的对象,而不是空闲时间较长的最佳对象
Redis实现这一点的方法是对一些对象进行采样,然后选择空闲(未访问)时间最长的对象。由于Redis 3.0(目前处于beta版)对算法进行了改进,并在逐出过程中获得了很好的候选池,因此近似值得到了改进。在公园里
为什么对于简单的字符串->字符串映射,memcached比Redis具有更好的内存占用。
Redis是一个更复杂的软件,因此Redis中的值以更类似于高级编程语言中的对象的方式存储:它们具有用于内存管理的关联类型、编码和引用计数。这使得Redis的内部结构良好且易于管理,但与只处理字符串的memcached相比,它有一定的开销
当Redis开始提高内存效率时
Redis能够以特殊的内存节省方式存储小型聚合数据类型。例如,表示对象的小Redis散列,在内部存储为二进制唯一blob,而不是散列表。因此,将每个对象的多个字段设置为哈希比将N个分开的键存储到memcached中更有效
实际上,您可以将对象作为单个JSON(或二进制enc)存储到memcached中