我正在使用 ServiceStacks CacheClient 和 Redis 库。我想缓存用户执行的某些事务的数量。如果密钥不存在,我正在使用以下内容获取缓存值或从数据库创建它:
public int GetTransactionCountForUser(int userID)
{
int count;
//get count cached in redis...
count = cacheClient.Get<int>("user:" + userID.ToString() + ":transCount");
if (count == 0)
{
//if it doent exists get count from db and cache value in redis
var result = transactionRepository.GetQueryable();
result = result.Where(x => x.UserID == userID);
count = result.Count();
//cache in redis for next time...
cacheClient.Increment("user:" + userID.ToString() + ":transCount", Convert.ToUInt32(count));
}
return count;
}
现在,在另一个操作中(当事务发生时)我将向数据库添加一行,我想将我的 Redis 计数器增加 1。
在递增之前,我是否首先需要检查特定键是否存在?我知道缓存客户端的 Increment 方法会在不存在的情况下创建记录,但在这种情况下,即使数据库中有事务记录,计数器也会从 0 开始。
处理这种情况的正确方法是什么?获取密钥,如果为空,则查询数据库以获取计数并使用此数字创建密钥?