如何处理长缓存键

问题描述 投票:0回答:1

我有一个缓存方法,通过连接价格代码列表来生成长缓存键。

var cacheKey = "SalesPrice_" + string.Join("_", priceCodeList);

可能有 50 多个价格代码,并且缓存密钥可能太长。我正在寻找一种通过保持唯一性来有效缩短此缓存键的方法。

有办法解决这个问题吗?

c# .net
1个回答
0
投票

我遇到过哈希。我可以传递一个长字符串,它可以通过保持唯一性来缩短它。 这是执行此操作的代码:

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 操作都必须使用散列键。因此,请记住在进行缓存操作之前对密钥进行哈希处理。

© www.soinside.com 2019 - 2024. All rights reserved.