【问题标题】:Do we need thread safety when Cache is accessed from multiple processes (Redis)当从多个进程(Redis)访问缓存时,我们是否需要线程安全
【发布时间】:2016-07-20 19:33:01
【问题描述】:

我知道什么是线程安全。在某些情况下,它具有完美的意义。例如,我知道记录器需要是线程安全的,否则它可能会尝试打开同一个文件并访问它(当从多个线程访问时)。

但我无法想象,为什么线程安全在访问缓存时很重要。如何从多个线程获取/设置会损坏缓存。

最重要的是,如果需要线程安全(在访问缓存时),当从多个进程访问缓存时我们如何使用它。如果有人可以在 Redis 的上下文中回答,那就太好了。

提前致谢

【问题讨论】:

  • 我也在做一些与您的用例类似的事情。你有什么解决办法吗?

标签: c# multithreading caching redis


【解决方案1】:

Redis 是单线程的。因此,Redis 中的所有命令都是原子的。但是,根据客户端库中的实现,共享连接可能仍然存在问题。读取和写入可能会乱序,这样一个线程可能会读取另一个线程应该得到的读取,从而导致客户端出现问题。这可能会因丢失写入或导致重写的无效响应而导致损坏。

因此,担心的不是破坏 Redis 中的数据,而是泄露客户端的数据。以向您收取其他人物品的购物车为例。出于这个原因,您的客户端访问需要是线程安全的。

【讨论】:

    【解决方案2】:

    虽然我没有得到任何关于它的直接文本。但似乎在服务器端应用了锁定(或其他同步方式)。并且它确保数据不会被多个线程/进程损坏。

    为什么使客户端库线程安全很重要,因为它们在 TCP 连接上写入/读取(我猜是通过网络流)。重要的是,如果同一个客户端被多个线程使用,它应该可以正常工作(如果客户端是线程安全的),否则将记录客户端不应该在多个线程之间共享。

    我没有将此标记为正确答案。如果人们对此投赞成票并对此表示同意,那么我会这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-06
      • 2013-07-15
      • 1970-01-01
      • 2016-05-08
      • 2023-03-16
      • 2020-09-07
      • 2013-12-07
      相关资源
      最近更新 更多