簡體   English   中英

從多個進程訪問緩存時我們是否需要線程安全(Redis)

[英]Do we need thread safety when Cache is accessed from multiple processes (Redis)

我知道什么是線程安全。 在某些情況下,它具有完美的意義。 例如,我知道記錄器需要是線程安全的,否則它可能會嘗試打開同一個文件並訪問它(從多個線程訪問時)。

但我無法想象,為什么在訪問緩存時線程安全很重要。 如何從多線程獲取/設置會破壞緩存。

最重要的是,如果需要線程安全(在訪問緩存時),當從多個進程訪問緩存時我們如何使用它。 如果有人可以在 Redis 的上下文中回答,那就太好了。

提前致謝

Redis 是單線程的。 因此,Redis 中的所有命令都是原子的。 但是,根據客戶端庫中的實現,共享連接可能仍然存在問題。 讀取和寫入可能會亂序,這樣一個線程可能會讀取另一個線程應該得到的讀取,從而導致客戶端出現問題。 這可能會因丟失寫入或導致重寫的無效響應而導致損壞。

因此,擔心的不是破壞 Redis 中的數據,而是泄漏客戶端的數據。 以購物車為例,向您收取其他人的商品。 出於這個原因,除其他外,您的客戶端訪問需要是線程安全的。

雖然我沒有得到任何關於它的直接文本。 但似乎在服務器端應用了鎖定(或其他同步方式)。 並且它確保數據不會被多個線程/進程損壞。

為什么使客戶端庫線程安全很重要,是因為它們在 TCP 連接上寫入/讀取(我猜是通過網絡流)。 並且重要的是,如果多個線程使用同一個客戶端,它應該可以正常工作(如果客戶端是線程安全的),否則將記錄在案,客戶端不應在多個線程之間共享。

我沒有將此標記為正確答案。 如果人們對此投票並同意,那么我會這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM