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