我有一个缓存方法,通过连接价格代码列表来生成长缓存键。
var cacheKey = "SalesPrice_" + string.Join("_", priceCodeList);
可能有 50 多个价格代码,并且缓存密钥可能太长。我正在寻找一种通过保持唯一性来有效缩短此缓存键的方法。
有办法解决这个问题吗?
我遇到过哈希。我可以传递一个长字符串,它可以通过保持唯一性来缩短它。 这是执行此操作的代码:
private static string GetHashedCacheKey(string key)
{
using var md5 = MD5.Create();
var inputAsBytes = Encoding.UTF8.GetBytes(key);
var hashBytes = md5.ComputeHash(inputAsBytes);
var sb = new StringBuilder();
foreach (var byt in hashBytes)
{
sb.Append(byt.ToString("X2"));
}
return sb.ToString();
}
使用方法:
var cacheKey = "SalesPrice_" + string.Join("_", priceCodeList);
var hashedKey = GetHashedCacheKey(cacheKey);
await _memoryCache.GetOrCreateAsync(hashedKey, async entry =>
{
entry.SetOptions(cacheEntryOptions);
return await value();
});
您应该非常小心的一件事是,由于您使用散列密钥注册缓存,因此您还必须使用该散列密钥执行其他操作。 换句话说,如果您决定实现这一点,则所有 CRUD 操作都必须使用散列键。因此,请记住在进行缓存操作之前对密钥进行哈希处理。