memcached面试专题及答案【三】

news/2024/12/29 15:40:50/

memcached 能接受的 key 的最大长度是多少?

key 的最大长度是 250 个字符。需要注意的是,250 是 memcached 服务器端内部的限制,

如果您使用的客户端支持”key 的前缀”或类似特性,那么 key(前缀+原始 key)的最大长度

是可以超过 250 个字符的。我们推荐使用使用较短的 key,因为可以节省内存和带宽。

memcached 对 item 的过期时间有什么限制?

过期时间最大可以达到 30 天。memcached 把传入的过期时间(时间段)解释成时间点

后,一旦到了这个时间点,memcached 就把 item 置为失效状态。这是一个简单但 obscure

的机制。

memcached 最大能存储多大的单个 item?

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

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

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

详细的回答:Memcached 的内存存储引擎(引擎将来可插拔…),使用 slabs 来管理内存。

内存被分成大小不等的 slabs chunks(先分成大小相等的 slabs,然后每个 slab 被分成大小

相等 chunks,不同 slab 的 chunk 大小是不相等的)。chunk 的大小依次从一个最小数开始,

按某个因子增长,直到达到最大的可能值。

如果最小值为 400B,最大值是 1MB,因子是 1.20,各个 slab 的 chunk 的大小依次是:

slab1 – 400B slab2 – 480B slab3 – 576B …

slab 中 chunk 越大,它和前面的 slab 之间的间隙就越大。因此,最大值越大,内存利用率

越低。Memcached 必须为每个 slab 预先分配内存,因此如果设置了较小的因子和较大的最

大值,会需要更多的内存。

还有其他原因使得您不要这样向 memcached 中存取很大的数据…不要尝试把巨大的网页放

到 mencached 中。把这样大的数据结构 load 和 unpack 到内存中需要花费很长的时间,从

而导致您的网站性能反而不好。

如果您确实需要存储大于 1MB 的数据,你可以修改 slabs.c:POWER_BLOCK 的值,然后重新

编译 memcached;或者使用低效的 malloc/free。其他的建议包括数据库、MogileFS 等。

我可以在不同的 memcached 节点上使用大小不等的缓存空间吗?这么做之后,memcached

能够更有效地使用内存吗?

Memcache 客户端仅根据哈希算法来决定将某个 key 存储在哪个节点上,而不考虑节点的

内存大小。因此,您可以在不同的节点上使用大小不等的缓存。但是一般都是这样做的:

拥有较多内存的节点上可以运行多个 memcached 实例,每个实例使用的内存跟其他节点上

的实例相同。

想要了解更多Java基础知识,可以点击评论区链接和小编一起学习java吧,此视频教程为初学者而著,零基础入门篇!给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili

http://www.ppmy.cn/news/11226.html

相关文章

Vue 2 即将成为过去

自从 2020 年 9 月 18 日 Vue 3 正式发布以来,已经有两年多时间了,终于在 2022 年 2 月 7 日 Vue 作者发布了一则消息:Vue 3 将成为新的默认版本。与此同时,Vue 相关官方周边的核心库 latest 发布标签将指向其 Vue 3 的兼容版本。…

Springboot使用策略模式实现数据插入不同类型数据库

需求:前端会传来一些图片数据,比如图片名称,图片长宽、大小等。后端需要根据实际情况存入mysql、oracle、clickhouse等不同的数据库。 上面的需求是一个非常好的使用策略模式实现的例子。 Mapper层 定义一个顶级接口,主要定义操…

MySQL的行锁总结

文章目录前言一、行锁的介绍二、行锁的使用三、使用行锁所带来的问题四、死锁和死锁检测前言 上篇文章已经学习了MySQL的全局锁和表锁,今天这篇文章我们对行锁进行以下学习 一、行锁的介绍 行锁就是针对数据表中行记录的锁,比如事务A更新了一行&#x…

在线阅读网站|基于Springboot+Vue开发实现小说阅读网站

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

Java基础学习笔记(十二)—— 数据结构

数据结构1 栈2 队列3 数组4 链表5 二叉树5.1 二叉树5.2 二叉查找树5.3 平衡二叉树5.4 红黑树6 哈希表数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。…

html实现酷炫的公司年会抽奖(附源码)

文章目录1.设计来源1.1 主界面1.2 抽奖效果1.2 中奖效果2.效果和源码配置2.1 动态效果2.2 员工信息配置2.3 奖品信息配置2.4 抽奖音效配置2.5 源代码源码下载作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/128640998 ht…

二、TTY子系统框架

个人主页:董哥聊技术我是董哥,嵌入式领域新星创作者创作理念:专注分享高质量嵌入式文章,让大家读有所得!文章目录1、TTY子系统框架分析2、TTY数据处理流程3、驱动的目录结构及核心文件4、TTY在Linux下的分布1、TTY子系…

shell脚本练习2023年下岗版

shell脚本练习 1.判断指定进程的运行情况 #!/bin/bash NAMEhttpd #这里输入进程的名称 NUM$(ps -ef |grep $NAME |grep -vc grep) if [ $NUM -eq 1 ]; thenecho "$NAME running." elseecho "$NAME is not running!" fi2.判断用户是否存在 #!/bin/bash r…