当前位置: 首页 > 面试题库 >

可以持久保存到磁盘的memcached的替代方法

郎曜文
2023-03-14
问题内容

我目前在我的Java应用程序中使用memcached,总体而言,它运行良好。

对我而言最重要的memcached功能包括:

  • 它的速度很快,因为读写是在内存中,并且不会接触磁盘
  • 这只是一个键/值存储(因为这就是我所有的应用程序需求)
  • 它是分布式
  • 通过使每个对象恰好位于一台服务器上,它有效地使用了内存
  • 它不假定对象来自数据库(因为我的对象不是数据库对象)

但是,有一件我想做的事情是memcached无法做到的。我想定期(也许每天一次)将缓存内容保存到磁盘。我希望能够从保存的磁盘映像中还原缓存。

磁盘保存不需要非常复杂。如果在保存过程中添加了新的键/值,我不在乎它是否包含在保存中。而且,如果在保存时修改了现有键/值,则保存的值应该是旧值或新值,但是我不在乎哪个。

谁能推荐另一个具有所有(或相当大一部分)对我很重要的内存缓存功能的缓存解决方案(免费或商用),并允许从磁盘保存和还原整个缓存?


问题答案:

也许您的问题就像我的问题:我只有几台用于memcached的机器,但是有很多内存。即使其中之一发生故障或需要重新引导,它也会严重影响系统的性能。根据最初的内存缓存哲学,我应该添加更多的机器,每台机器的内存更少,但这并不划算,也不是“绿色IT”;)

对于我们的解决方案,我们为Cache系统构建了一个接口层,以便像 对流 一样可以 嵌套
基础缓存系统的提供程序,并为memcached以及我们自己非常简单的Key-Value编写了一个缓存提供程序。
-2-磁盘存储提供程序。然后,我们为缓存项定义权重,该权重表示如果无法从缓存中检索到项,则重建项的成本是多少。嵌套磁盘缓存仅用于权重高于某个阈值的项目,可能占所有项目的大约10%。

将对象存储在缓存中时,我们不会浪费时间,因为无论如何,保存到一个或两个缓存都将排队等待异步执行。因此,写入磁盘缓存不需要太快。读取内容相同:首先,我们使用memcached,只有当它不存在并且它是一个“昂贵的”对象时,我们才检查磁盘缓存(从数量上说,它比memcached慢,但仍然好得多,然后重新计算30
GB一台机器故障后的数据)。

这样,我们就可以从两全其美的方式中获得最大的收益,而无需用任何新东西来代替内存缓存。



 类似资料:
  • 问题内容: HSQL和Hibernate的新手知识… 其次是… 打印25000(活动中的“活动”对象的数量)。但是,当我再次运行此测试时,count(*)中的对象数量并没有增加(在程序开始时为0)。因此,不会持久地写入对象。 这是我的hsqldb连接字符串: 据我所知它不是内存数据库… 有谁知道为什么对象无法在单个JVM会话之后无法持久化?乐于提供更多信息,但是与Hibernate / JPA /

  • 每当我在redis中执行任何修改数据的命令时,我会得到以下错误 我在Mac上使用brew安装了redis。如何获取redis-server将信息记录到的日志文件的位置。我试着找redis Conf。文件,但也找不到。 我如何摆脱上面的错误,并且能够在Redis中执行修改数据的命令。

  • 我正在使用Redis,但我有一个错误:MISCONF Redis被配置为保存RDB快照,但当前无法保存在磁盘上。禁用可能修改数据集的命令。有关错误的详细信息,请查看Redis日志 服务器:CentOS 7-Vultr 但是,我不是用建议来解决的。 拜托,帮帮我。

  • 问题内容: 我的Express应用程序正在从浏览器中接收base64编码的PNG(使用toDataURL()从画布生成)并将其写入文件。但是该文件不是有效的图像文件,因此“文件”实用程序只是将其标识为“数据”。 问题答案: 我认为您正在转换的数据比您需要的更多。一旦使用正确的编码创建了缓冲区,您只需要将缓冲区写入文件即可。 new Buffer(…,’base64’)通过将输入解释为base64编

  • 我使用的是CentOS6.9。我已经使用安装了Redis: 在安装过程中没有给出任何错误。 但是,每当我发出命令(例如或),它都会给出以下错误消息: (错误)MISCONF Redis配置为保存RDB快照,但当前无法在磁盘上持久化。禁用可能修改数据集的命令。有关该错误的详细信息,请查看Redis日志。 我发现MISCONF Redis被配置为保存RDB快照。但里面的建议都不起作用。 上面的公认答案

  • 下面的代码在内存中创建了一个文件。 我想把那个pdf文件保存在磁盘上以便查看。我将如何在python中实现它?