如何生成用于在ColdFusion中缓存项目的唯一键

时间:2012-12-21 23:48:06

标签: coldfusion coldfusion-10

我在Adobe社区论坛上发布了一个类似的问题,但也建议在这里提问。

我正在尝试缓存与特定数据库关联的不同查询,并且需要能够刷新该数据库的所有查询,同时保持其他缓存查询不变。所以我想我会利用ColdFusion的ehcache功能。我创建了一个特定的缓存区域用于来自这个特定数据库的查询,因此我可以使用cacheRemoveAll(myRegionName)来刷新那些存储的查询。

由于我需要轻松缓存和检索每个不同的查询,我想我会将查询参数散列为一个唯一的字符串,我将用于每个查询的缓存键。这是我到目前为止尝试过的方法:

  1. 创建包含参数(参数名称,参数值)的键值对的Struct。
  2. 使用SerializeJSON()将Struct转换为String。
  3. 使用Hash()散列字符串。
  4. 这种方法有意义吗?我想知道其他人是如何接近缓存密钥生成的。此外,“MD5”算法是否足以满足此目的,它是否可以保证唯一的密钥生成,还是需要使用“SHA”?

1 个答案:

答案 0 :(得分:3)

更新:使用CF10中引入的cacheRegion属性!

http://help.adobe.com/en_US/ColdFusion/10.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fae.html

然后您需要做的就是指定cachedAftercachedWithin,并忘记如何生成唯一键。 CF将通过'散列'为您完成:

  • 查询“姓名”
  • SQL语句
  • 数据源
  • 用户名和 密码
  • DBTYPE

参考:http://www.coldfusionmuse.com/index.cfm/2010/9/19/safe.caching

我认为这是最简单的,除非您确实需要通过密钥获取特定查询,然后您可以使用cacheID(CF10中引入的另一个新属性)提供您自己的哈希。