簡體   English   中英

我應該使用Redis哈希還是Ruby哈希?

[英]Should I use a Redis hash or a Ruby hash?

我有Rails應用程序,我必須維護一個將由多個線程同時訪問的哈希。

大多數訪問都是讀取,寫入很少。 我試圖決定使用Ruby哈希和Redis哈希。

Redis哈希是線程安全的,可以將數據存儲到磁盤。 但是,持久性並非一切必要。

此外,對散列的寫入很少,並且要寫入的數據基本上是寫入它的時間本身。 因此,即使它不是線程安全的,由於競爭條件導致的精度損失也是可以接受的,因為並發寫入之間的時間最多只能變化幾秒鍾。

我唯一擔心使用單例Ruby散列是更新不是線程安全的而不是原子的。 那么,同時進行非原子密鑰更新是否會導致異常?

如果沒有,那么維護沒有鎖的單例Ruby哈希是否有意義?

我對使用Redis散列的擔心是內存中散列的大小可能大於Ruby散列以及調用redis-server的開銷。 並發和持久性很好,但不是必需的。

請讓我知道你的想法。 謝謝。

(這是基於Holger Just的評論糾正我的修正。)

有一個專為您的需求而設計的庫叫做concurrent-ruby

請訪問https://github.com/ruby-concurrency/concurrent-ruby查看。

它有一個Hash類( http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Hash.html )和一個Map類( http://ruby-concurrency.github.io/concurrent-ruby/ Concurrent / Map.html )他們說更快但不完全符合Ruby Hash的語義(例如,不保證按鍵插入順序排序)。

請注意,安裝gem之后,使用它所需的require與gem名稱不同; require concurrent

require 'concurrent'
h = Concurrent::Hash.new

我沒有使用它,所以我無法提供任何個人反饋。

暫無
暫無

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

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