memcached 最大能存储?如何解决过期数据?item 批量导入导出呢?

119 篇文章 0 订阅
30 篇文章 0 订阅
文章解释了Memcached中单个item大小限制为1MB的原因,涉及内存分配机制。还讨论了批量导入导出的适用场景、过期数据处理以及注意事项,强调了非阻塞服务器特性与性能优化的重要性。
摘要由CSDN通过智能技术生成

1MB。如果你的数据大于 1MB,可以考虑在客户端压缩或拆分到多个 key 中。

为什么单个 item 的大小被限制在 1M byte 之内?

啊…这是一个大家经常问的问题!

简单的回答:因为内存分配器的算法就是这样的。

详细的回答:Memcached 的内存存储引擎(引擎将来可插拔…),使用 slabs 来管理内存。内存被分成大小不等的 slabs chunks(先分成大小相等的 slabs,然后每个 slab 被分成大小相等 chunks,不同 slab 的 chunk 大小是不相等的)。chunk的大小依次从一个最小数开始,按某个因子增长,直到达到最大的可能值。

因此,批量导出导入数据并不像您想象中的那么有用。不过在一个场景倒是很有用。如果您有大量的从不变化的数据,并且希望缓存很快热(warm)起来,批量导入缓存数据是很有帮助的。虽然这个场景并不典型,但却经常发生,因此我们会考虑在将来实现批量导出导入的功能。

如果一个 memcached 节点 down 了让您很痛苦,那么您还会陷入其他很多麻烦。

您的系统太脆弱了。您需要做一些优化工作。比如处理”惊群”问题(比如memcached 节点都失效了,反复的查询让您的数据库不堪重负…这个问题在 FAQ的其他提到过),或者优化不好的查询。记住,Memcached 并不是您逃避优化查询的借口。

您不应该这样做!Memcached 是一个非阻塞的服务器。任何可能导致memcached 暂停或瞬时拒绝服务的操作都应该值得深思熟虑。向 memcached中批量导入数据往往不是您真正想要的!想象看,如果缓存数据在导出导入之间发生了变化,您就需要处理脏数据了;

Memcached最大能存储的数据量取决于分配给它的内存大小。由于Memcached将数据存储在内存中,因此其存储能力受到可用内存的限制。理论上,只要内存足够大,Memcached就可以存储大量的数据。然而,需要注意的是,虽然内存提供了快速的数据访问速度,但它也是易失的,即当服务器重启或内存被清空时,存储在Memcached中的数据将会丢失。

关于过期数据的处理,Memcached允许在存储数据时指定一个过期时间(TTL,Time To Live),单位为秒。当超过这个时间后,数据将会自动从缓存中移除。这种过期策略有助于确保缓存中的数据保持最新状态,并防止过期数据对系统性能造成负面影响。

至于item的批量导入导出,Memcached本身并没有提供直接的批量导入导出功能。然而,你可以通过一些间接的方式来实现这一需求。例如,你可以编写脚本来从数据源(如数据库)中读取数据,并逐个将数据项存储到Memcached中,从而实现批量导入。同样地,你也可以编写脚本来从Memcached中读取数据,并将其写入到目标数据源中,从而实现批量导出。这些脚本可以根据你的具体需求进行定制,以满足不同的批量处理要求。

需要注意的是,在处理大量数据时,批量导入导出可能会对系统性能产生一定的影响。因此,在执行这些操作时,建议根据系统的实际情况进行性能优化和监控,以确保操作的顺利进行并避免对系统造成过大的负担。

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵然间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值