首先你的钥匙似乎是由很多人物组成的。请记住,密钥名称也占用内存(1字节/字符),所以尽量保持它尽可能短。我已经看到了密钥名称大于值的情况,如果您有存储空数组或空值的情况,可能会发生这种情况。
关键结构。我想你的例子中,你想存储的对象是由参数标识的(一个是项目ID也许,或者可能是过滤搜索[...])。从前缀开始。前缀应该是对象类的名称(或一般描述对象的简化名称)。
大多数情况下,密钥都会有一个前缀+标识符。在你的例子中你有多个标识符。如果其中一个是唯一的ID,那么只能使用prefix + id
,这应该足够了。
如果对象很大,并且您并不总是全部使用它,那么请将您的策略更改为多密钥存储。使用一个主键来存储最常见的值,或用于存储对象的组件,其值将存储在单独的键中。利用管道和使用一个得到整个对象在一个连接“多”查询:然后
mainKey = prefix + objectId;
object = getFromCache(mainKey);
startCachePipeline();
foreach (object[properties] as property) {
object->property = getFromCache(prefix + objectId + property);
}
endCachePipeline();
为例结构“人”的对象会是这样的:
person_33 = array(
properties => array(age, height, weight)
);
person_33_age = 28;
person_33_height = 6;
person_33_weight = 150;
Memcached的用途当内部存储的对象大小相似时,内存效率最高。对象之间的大小差异越大(不是谈论1个丢失的大对象或单个案例,尽管内存也浪费了),那么浪费的内存就越多。
希望它有帮助!
你知道这个方法是否需要大量的CPU来创建哈希? –
如果函数是用我认为是即时语言编写的。例如Pentium P5 90Mhz与MD5使得每秒13.2 MB .. –
好的,谢谢,我会混合一些反射 –