- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道memcached是一个分布式缓存系统。然而,memcached 完全有必要进行复制吗?目标是在集群环境中保持 session 。
例如,如果我们在 2 台服务器上运行 memcached,两台服务器上都有数据,而服务器 #1 出现故障,我们是否可能会丢失存储在其中的 session 数据?换句话说,如果任何 memcached 服务器(存储数据)出现故障,我们应该期望看到什么情况,以及它将如何影响我们在集群环境中的 session ?
归根结底,是否可以用来为我们的应用程序添加一些容错功能?例如,如果 key 不存在可能是因为它所在的服务器之一发生故障,重新查询并存储回 memcached?
根据我正在阅读的内容,它似乎倾向于这个方向,但需要确认:https://developers.google.com/appengine/articles/scaling/memcache#transient
提前致谢!
最佳答案
Memcached 内置了自己的容错功能,因此您无需将其添加到您的应用程序中。我认为提供一个例子可以说明为什么会这样。假设您在数据库前设置了 2 个 memcached 服务器(假设它是 mysql)。最初,当您启动您的应用程序时,memcached 中将没有任何内容。当您的应用程序需要获取数据时,if 将首先检查 memcached,如果它不存在,那么它将从数据库中读取数据并将其插入到 memcached 中,然后再将其返回给用户。对于写入,您将确保将数据插入到数据库和内存缓存中。当您的应用程序继续运行时,它将使用大量数据填充内存缓存服务器并减轻您的数据库的负载。
现在您的一个 memcached 服务器崩溃了,您丢失了一半的缓存数据。将会发生的是,您的应用程序现在将在崩溃后立即更频繁地访问数据库,并且您的应用程序逻辑将继续将数据插入 memcached,除了所有内容都将直接发送到未崩溃的服务器。这里唯一的结果是您的缓存变小了,如果所有内容都不适合缓存,您的数据库可能需要做更多的工作。您的 memcached 客户端也应该能够处理崩溃,因为它将能够找出您剩余的健康 memcached 服务器的位置,并且它会自动将值散列到它们中。所以简而言之,对于 memcached 中的故障情况,您不需要任何额外的逻辑,因为 memcached 客户端应该为您处理这个问题。您只需要了解 memcached 服务器宕机可能意味着您的数据库必须做很多额外的工作。我也不建议在失败后重新填充缓存。让缓存自行预热,因为没有必要加载您近期不会使用的项目。
m03geek 还发了一篇帖子,他提到您也可以使用 Couchbase,这是事实,但我想在他的回复中补充一些关于优缺点的内容。首先 Couchbase 有两种桶(数据库)类型,它们是 Memcached Bucket 和 Couchbase Bucket。 Memcached bucket 是普通的 memcached,我上面写的所有内容都适用于这个 bucket。如果您要使用 memcached 存储桶,您可能想要使用 Couchbase 的唯一原因是您获得了一个不错的 web ui,它将提供有关您的 memcached 集群的统计信息以及添加和删除服务器的易用性。您还可以获得 Couchbase 的付费支持。
Couchbase 桶完全不同,因为它不是缓存,而是实际的数据库。您可以完全删除后端数据库,只使用这种存储桶类型。 Couchbase 存储桶的一个好处是它提供了复制功能,因此可以防止 memcached 出现的冷缓存问题。如果您觉得这听起来很有趣,我建议您阅读 Couchbase 文档,因为 Couchbase 存储桶提供了很多功能。
这篇关于 Facebook 如何使用 memcached 的论文可能也很有趣。 https://www.usenix.org/system/files/conference/nsdi13/nsdi13-final170_update.pdf
关于session - memcached 有必要复制它的数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18770867/
memcached 能否充分利用多核?或者有什么办法可以调整这个? 最佳答案 默认情况下,memcached 是多线程的,并且在使许多内核饱和时没有问题。在更大规模的并行机器(例如 256 核 CMT
有没有办法根据通配符键使内存缓存中的条目无效? 因此,如果我有以下内存缓存键: data/1 data/2 data/3 有没有一种方法可以使这些 key 失效,例如 data/* ?一口气清除一堆陈
Memcache 可以配置为使用磁盘存储而不是 RAM 吗? 我在 High IO Amazon EC2 实例上运行 Memcache Server。该实例有 2TB 的 SSD 存储可用。我可以将
memcached 的最大 key 过期时间是多少? 如果我不提供过期时间并且缓存已满,会发生什么? 最佳答案 您可以通过提供 Unix 时间戳而不是天数来将 key 过期设置为某个日期。该日期可以是
我有一个运行 php/mysql 的网站。该应用程序将被多次“复制”。每个实例都会获得自己的数据库、一组 php 文件(通配符)域,您明白了。 现在应用程序的某些部分是使用 memcache 进行缓存
是否可以根据某些正则表达式获取 memcached key 列表?我知道一种解决方案是将 key 存储在数据库中,并在需要删除这些 key 时获取列表。这意味着,它将给数据库带来额外的成本。 我想知道
我们发现使用我们的 memcache 时,一些键往往会丢失。为了调试,我使用命令 stats cachedump 输出是这样的: ITEM key-stuff-123-mlgtr-tmura [5
从 Network Solutions 移至托管站点,出现错误 fatal error :第 6 行 上/data/.../include/connect.inc 中未找到类“Memcache” 我该
我遵循了这个 tutorial 中的说明关于如何安装 nginx、php 和 mysql,包括 php5-memcache。 我想知道我是否还需要安装没有“php5”前缀的 memcache 或 me
我在 ubuntu 12.04 上运行 apache/php/memcached 我设置的 key 在过期后仍然有效。我们使用的代码与我们从中迁移的内存缓存 PAAS 的代码相同。 我如何确认过期实际
假设我在开始时有两个 memcached 节点( 节点 A, B ),当我添加一个新的 时节点 C ,部分键被重新映射,并且由于一致散列只有其中一些。 让我们假设一个键为“ foo ”的值原来在服务器
真的,我只想知道memcached中的slab是什么。如果有认识的同事能回答我的话会更好。 谢谢你的回答... 最佳答案 长时间运行的应用程序(如 memcached)会遇到内存碎片问题,服务运行时间
在 memcached 概述中 here 它说: Memcached servers are generally unaware of each other. There is no crosstal
当您在 memcached 中放入一个值时,您可以设置一个过期时间。 但是,当您增加一个值时,您不能(至少不是来自 PHP )设置新的到期时间。 我的问题:到期时间是否在递增时重置为其初始值?或者它没
我在我的 centos 服务器上使用 memcached,我的项目很大并且有超过 1MB 的对象我需要保存到 memcached,好吧,我不能!因为 max_item_size 是 1MB,无论如何要
我尝试使用本教程在 MAMP - Snow Leopard 10.6.2 中安装 memcached: Setup a Memcached-Enabled MAMP Sandbox Environme
我试图添加的方式 -l 11211 -l 11212 在 memcached conf 文件中。但它只是在听第一个,即 1121 最佳答案 首先我使用了 mikewied 的解决方案,但后来我遇到了自
我希望记录我的 memcached 服务器中正在进行的所有事件。所有读取和写入。 这将用作云中许多远程 php 应用程序的分布式守护程序,并且需要一种通过 SSH 登录并检查守护程序上正在进行的事件的
我在使用 memcached 时遇到了一些问题,我的一个想法是它可能已经在我尝试运行它的端口上运行,由我们网络上的其他用户启动。有没有办法知道当前正在使用哪些 memcached 端口? 最佳答案 要
运行 4 个 .5GB 内存缓存服务器或运行一个 2GB 实例有什么区别吗? 运行多个实例有什么好处吗? 最佳答案 如果一个实例失败,您仍然可以享受使用缓存的优势。如果您使用一致性哈希将相同的数据引入
我是一名优秀的程序员,十分优秀!