我正在尝试使用StackExchange.Redis库来实现缓存。我不了解的一件事是如何正确使用FireAndForget方法。根据文档,我看到我必须提供CommandFlags.FireAndForget,以防我不想等到操作完成。
我编写了测试控制台应用程序(net 4.7.2,StackExchange.Redis版本为2.0.601),我有4种方法来模拟通过单键向缓存中添加内容:
//Async method with FireAndForget flag:
public static async Task<bool> AddAsyncWithFF(string key, object entity)
{
if (DataBase != null)
{
var redisValue = RedisValueHelper.GetRedisValue(entity);
if (redisValue != default(RedisValue))
{
return await DataBase.StringSetAsync(
key,
redisValue,
expiration.DateTime.Subtract(DateTime.Now),
flags: CommandFlags.FireAndForget);
}
}
return false;
}
//Async method without flag
return await DataBase.StringSetAsync(
key,
redisValue,
expiration.DateTime.Subtract(DateTime.Now),
flags: CommandFlags.None);
//Sync method with FireAndForget flag
DataBase.StringSetAsync(
key,
redisValue,
expiration.DateTime.Subtract(DateTime.Now),
flags: CommandFlags.FireAndForget);
//Sync method without flag
DataBase.StringSetAsync(
key,
redisValue,
expiration.DateTime.Subtract(DateTime.Now),
flags: CommandFlags.None);
我创建18 mb的随机数据并为测试目的每个密钥保存一次,这是结果(使用StopWatch类测量的时间):
我不明白的地方:
最终我想了解为什么我不能使用耗时200ms的Fire and Forget标志进行异步调用?
谢谢。