【问题标题】:Store data for a limited time: memcache vs mysql限时存储数据:memcache vs mysql
【发布时间】:2017-07-27 15:50:09
【问题描述】:

我需要在有限的时间内(最多 24 小时)存储一些数据,在这段时间内可能会或可能不会访问这些数据。我可以同时使用 memcache 和 mysql -

  1. Memcache :在 memcache 中设置一个键和过期时间。这将是非持久性的,但我可以使用它。访问数据会更快。

  2. MySql :创建一个表来存储此数据并维护一个作业以在到期后继续存档。会比较慢。

我应该使用哪一个?这是 memcache 的有效用例吗? (因为 memcache 用于存储访问非常频繁的数据)

请建议是否有任何其他选项可用于存储此类临时数据。

【问题讨论】:

  • 现在有一些新的东西 - Redis
  • 是什么样的数据?您是仅在程序运行期间还是之后使用它? ....
  • 当前场景是——如果用户访问我们的电子商务网站并点击产品,我们会向他发送电子邮件。在接下来的 24 小时内,我们不会再次向他发送电子邮件,但如果 24 小时后再次点击,我们将为其发送电子邮件。因此,我正在考虑存储这些临时数据是否已将电子邮件发送给特定用户,并在发送电子邮件之前对其进行检查。这只会在 24 小时内有用,之后会重置。

标签: mysql memcached datastore


【解决方案1】:

我认为 memcache 对于您的情况不是很可靠。 Memcache 是一个缓存,如果一个对象开始变满,缓存可能会驱逐它,而且您不会知道该对象已被删除。因此,如果该对象不存在,您无法确定它是否不存在是因为驱逐还是因为您实际上并没有把它放在那里。

另外,如果您大量使用 memcache,并且 memcache 的利用率约为 75%(这意味着您的 memcache 已满),那么我建议不要使用 memcache。与非常高的概率一样,由于不使用数据,数据将很快被驱逐。如果这对您来说不是问题,那么您可以使用 memcache。

您可以将这些数据存储在 mysql 中。这是一个不错的选择。

您可以尝试的另一个选项是 mongodb 或其他一些数据库,您可以在其中选择 ttl(生存时间)。这样做的好处是您可以确定在 ttl 之前没有驱逐。

【讨论】:

  • 正如我所说,数据不必是持久的。如果它被驱逐或从未被放置,我将它视为过期,这没有问题。问题是 - 将 memcache 用于可能无法访问的数据是否可以?关于 mongodb——我们现在还没有使用它。对于这些临时数据需求,您建议开始使用它还是继续使用 mysql?
  • 如果你大量使用 memcache 并且 memcache 的利用率约为 75%(这意味着你的 memcache 已满)那么我建议不要使用 memcache。与非常高的概率一样,由于不使用数据,数据将很快被驱逐。如果这对您来说不是问题,那么您可以使用 memcache。如果这是唯一的要求,那么我建议不要使用 mongodb,因为它会涉及学习新的堆栈。就用mysql吧。运行一项每天都会删除不需要的行的作业,这样数据就不会继续增长。
  • 最好在答案中添加这个使用部分!
猜你喜欢
  • 2012-06-22
  • 2016-01-16
  • 2014-04-07
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
相关资源
最近更新 更多