首先,您的密钥似乎由很多字符组成。请记住,键名也占用内存(1byte / char),因此请尽量保持简短。我见过键名大于值的情况,如果您存储空数组或空值,就会发生这种情况。
关键结构。我从您的示例中猜想您要存储的对象由参数标识(一个可能是项目ID,或者可能是搜索过滤器[...])。以前缀开头。前缀应该是对象类的名称(或一般描述对象的简化名称)。
大多数情况下,键将具有前缀 + 标识符。在您的示例中,您有多个标识符。如果其中一个是唯一的 id,则仅使用prefix + id
它就足够了。
如果对象很大并且您并不总是使用所有对象,那么将您的策略更改为多键存储。使用一个主键来存储最常见的值,或者用于存储对象的组件,其值存储在单独的键中。利用管道并使用一个“多个”查询在一个连接中获取整个对象:
mainKey = prefix + objectId;
object = getFromCache(mainKey);
startCachePipeline();
foreach (object[properties] as property) {
object->property = getFromCache(prefix + objectId + property);
}
endCachePipeline();
示例“Person”对象的结构将类似于:
person_33 = array(
properties => array(age, height, weight)
);
person_33_age = 28;
person_33_height = 6;
person_33_weight = 150;
当存储在其中的对象大小相似时,Memcached 使用内存的效率最高。对象之间的大小差异越大(不是说 1 个丢失的大对象或单个案例,尽管内存也会被浪费),浪费的内存就越多。
希望能帮助到你!