class Redis::BloomfilterDriver::RubyTest

It uses different hash strategy Usefule for benchmarking

Attributes

redis[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/bloomfilter_driver/ruby_test.rb, line 13
def initialize(options = {})
  @options = options
end

Public Instance Methods

clear() click to toggle source

It deletes a bloomfilter

# File lib/bloomfilter_driver/ruby_test.rb, line 37
def clear
  @redis.del @options[:key_name]
end
include?(key) click to toggle source

It checks if a key is part of the set

# File lib/bloomfilter_driver/ruby_test.rb, line 23
def include?(key)
  indexes = []
  indexes_for(key) { |idx| indexes << idx }

  return false if @redis.getbit(@options[:key_name], indexes.shift).zero?

  result = @redis.pipelined do
    indexes.each { |idx| @redis.getbit(@options[:key_name], idx) }
  end

  !result.include?(0)
end
insert(data) click to toggle source

Insert a new element

# File lib/bloomfilter_driver/ruby_test.rb, line 18
def insert(data)
  set data, 1
end

Protected Instance Methods

engine_crc32(data, i) click to toggle source

A set of different hash functions

# File lib/bloomfilter_driver/ruby_test.rb, line 51
def engine_crc32(data, i)
  Zlib.crc32("#{i}-#{data}").to_i(16) % @options[:bits]
end
engine_md5(data, i) click to toggle source
# File lib/bloomfilter_driver/ruby_test.rb, line 55
def engine_md5(data, i)
  Digest::MD5.hexdigest("#{i}-#{data}").to_i(16) % @options[:bits]
end
engine_sha1(data, i) click to toggle source
# File lib/bloomfilter_driver/ruby_test.rb, line 59
def engine_sha1(data, i)
  Digest::SHA1.hexdigest("#{i}-#{data}").to_i(16) % @options[:bits]
end
indexes_for(key, engine = nil) { |send("engine_#{engine}", key, i)| ... } click to toggle source
# File lib/bloomfilter_driver/ruby_test.rb, line 43
def indexes_for(key, engine = nil)
  engine ||= @options[:hash_engine]
  @options[:hashes].times do |i|
    yield send("engine_#{engine}", key.to_s, i)
  end
end
set(data, val) click to toggle source
# File lib/bloomfilter_driver/ruby_test.rb, line 63
def set(data, val)
  @redis.pipelined do
    indexes_for(data) { |i| @redis.setbit @options[:key_name], i, val }
  end
end