Class: Dalli::Ext::Spymemcached::Ring
- Inherits:
-
Ring
- Object
- Ring
- Dalli::Ext::Spymemcached::Ring
- Defined in:
- lib/dalli-ext-spymemcached/ring.rb
Overview
Impliments the same hashing algorithm to chose a server as spymemcached Java library.
Constant Summary collapse
- MAX =
32 bit signed int max
2 ** 31 - 1
- MIN =
32 bit signed int min
-2 ** 31 # 32 bit signed int min
Instance Method Summary collapse
Instance Method Details
#hash_for(key) ⇒ Object
13 14 15 16 17 18 19 20 21 22 |
# File 'lib/dalli-ext-spymemcached/ring.rb', line 13 def hash_for(key) hashed_key = key.each_byte.inject(0) do |hash, byte| hash = 31 * hash + byte hash = MAX - (MIN - hash) + 1 while hash < MIN hash = MIN - (MAX - hash) - 1 while hash > MAX hash end hashed_key & "ffffffff".hex end |
#server_for_key(key) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/dalli-ext-spymemcached/ring.rb', line 24 def server_for_key(key) server = @servers[hash_for(key) % @servers.length] if @servers.any? unless server && server.alive? raise Dalli::NetworkError, "No servers available" end server end |