【发布时间】:2012-02-04 21:47:10
【问题描述】:
我决定在我们的一个应用程序中实现缓存外观 - 目的是最终减少网络开销并限制数据库命中的数量。我们使用Castle.Windsor 作为我们的IoC Container,我们决定使用Interceptors 在我们的服务层之上使用System.Runtime.Caching 命名空间添加缓存功能。
目前我无法完全弄清楚构建cache key 的最佳方法是什么。目标是区分不同的方法,还包括传递的参数值——这意味着这两个方法调用应该缓存在两个不同的键下:
IEnumerable<MyObject> GetMyObjectByParam(56); // key1
IEnumerable<MyObject> GetMyObjectByParam(23); // key2
目前我可以看到两种可能的实现方式:
选项 1: 组装 |班级 |方法返回类型 |方法名称 |参数类型 |参数哈希码
"MyAssembly.MyClass IEnumerable<MyObject> GetMyObjectByParam(long) { 56 }";
选项 2: MD5 或 SHA-256 根据方法的完全限定名称和传递的参数值计算哈希
string key = new SHA256Managed().ComputeHash(name + args).ToString();
我正在考虑第一个选项,因为第二个选项需要更多处理时间 - 另一方面,第二个选项强制所有生成的密钥的“长度”完全相同。
假设第一个选项将为使用复杂参数类型的方法生成唯一键是否安全?或者也许有完全不同的方式来做到这一点?
我们将非常感谢您的帮助和意见!
【问题讨论】:
标签: c# caching hash dictionary