class Dalli::Ext::Spymemcached::Ring
Impliments the same hashing algorithm to chose a server as spymemcached Java library.
Constants
- MAX
- MIN
Public Instance Methods
hash_for(key)
click to toggle source
# 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)
click to toggle source
# File lib/dalli-ext-spymemcached/ring.rb, line 24 def server_for_key(key) server = @servers[hash_for(key) % @servers.length] if @servers.any? Dalli.logger.debug { "Dalli::Ext::Spymemcached#server_for_key: key: #{key.to_s}, hash: #{hash_for(key)}, server: #{server.try(:name)}" } unless server && server.alive? raise Dalli::NetworkError, "No servers available" end server end