Dictionary 如何为密钥/值存储设计/创建密钥?
我想将序列化对象(或任何东西)存储在键/值缓存中 现在我做了这样的事情:Dictionary 如何为密钥/值存储设计/创建密钥?,dictionary,memcached,key,outputcache,voldemort,Dictionary,Memcached,Key,Outputcache,Voldemort,我想将序列化对象(或任何东西)存储在键/值缓存中 现在我做了这样的事情: public string getValue(int param1, string param2, etc ) { string key = param1+"_"+param2+"_"+etc; string tmp = getFromCache(); if (tmp == null) { tmp = getFromAnotherPlace(); addToCa
public string getValue(int param1, string param2, etc )
{
string key = param1+"_"+param2+"_"+etc;
string tmp = getFromCache();
if (tmp == null)
{
tmp = getFromAnotherPlace();
addToCache( key, tmp);
}
return tmp;
}
我觉得可能会很尴尬。如何设计钥匙?首先,您的钥匙似乎由许多字符组成。请记住,键名也会占用内存(1字节/字符),因此请尽量使其简短。我见过键名大于值的情况,如果存储空数组或空值,就会发生这种情况 关键结构。从您的示例中,我猜您要存储的对象是由参数标识的(一个可能是项目id,或者可能是搜索的过滤器[…])。以前缀开头。前缀应为对象类的名称(或通常描述对象的简化名称) 大多数情况下,键将具有前缀+标识符。在您的示例中,您有多个标识符。如果其中一个id是唯一的,只需使用
前缀+id
,就足够了
如果对象很大,并且您并不总是使用所有对象,那么请将策略更改为多键存储。使用一个主键存储最常用的值,或存储对象的组件,其值存储在单独的键中。使用管道并使用一个“多”查询在一个连接中获取整个对象:
示例“Person”对象的结构如下所示:
person_33 = array(
properties => array(age, height, weight)
);
person_33_age = 28;
person_33_height = 6;
person_33_weight = 150;
当内存中存储的对象大小相似时,Memcached使用内存的效率最高。对象之间的大小差异越大(不包括1个丢失的大对象或单个情况,尽管内存也会被浪费),浪费的内存就越多
希望有帮助 如果我理解了这个问题,我认为制作密钥最简单、最聪明的方法是使用单向散列函数,如MD5、SHA1 ecc 这样做至少有两个原因:
我不太懂c#,但我很确定你可以找到内置的单向散列函数。我应该补充一点,我在c#,但这并不重要,你的反射过程需要大量CPU吗?你知道这个方法是否需要大量CPU来创建散列吗?如果函数是用c#语言构建的,我认为它是即时的。在示例a中pentium P5 90Mhz和MD5每秒可产生13.2MB。。
person_33 = array(
properties => array(age, height, weight)
);
person_33_age = 28;
person_33_height = 6;
person_33_weight = 150;