用c实现双删除缓存#

hc8w905p  于 2021-06-08  发布在  Redis
关注(0)|答案(1)|浏览(280)

问题背景

我读过yungpeng的文章(一篇非常有见地的文章)关于redis缓存和sql数据库之间的一致性,而double delete方法看起来很简单,所以我考虑把它移到我们的代码(c#)中。
具体来说,我想在double delete中实现可变操作,根据勇鹏的介绍,可以总结如下:
删除redis中的条目;
创建、更新或删除mysql中的数据;
睡一会儿(比如500毫秒);
再次删除redis中的条目。

问题

不过,我有两个问题:
等待进程休眠500毫秒,删除redis然后返回调用者(步骤3、4)似乎非常慢。先将任务(休眠并清除redis)排队,然后返回调用者而不等待任务完成,这样做合理吗?
如果我在问题1中的建议是合理的,我将如何在c中这样做?以下代码可以接受吗?

public async Task WriteOperation()
{
  await ClearRedis();
  await WriteDB();
  Task.Run( () => { // Sleep 0.5 seconds then clear Redis } ); // Notice how I didn't await this
  return;
}

永远不等待机会真的可以吗 Task ? 它会被执行吗?会吗 Task 大约完成0.5秒?
提前谢谢!

7gyucuyw

7gyucuyw1#

你可以这样做:

public async Task ClearRedisWithDelay()
{
    await Task.Delay(500);
    await ClearRedis();
}

打电话给我

ClearRedisWithDelay

没有等待。
这种方法有一些缺点:https://stackoverflow.com/a/54485904/14072498
从你的评论中得到你自己的建议

Task.Run(async () => { await Task.Delay(500); await ClearRedis(); })

将在一个新的线程,这应该是可以接受的工作。
关于时间的唯一保证是在调用clearredis之前至少延迟500毫秒。

相关问题