class Redis::Bloomfilter
Constants
- VERSION
Attributes
driver[R]
options[R]
Public Class Methods
new(options = {})
click to toggle source
Usage: Redis::Bloomfilter.new
:size => 1000, :error_rate => 0.01 It creates a bloomfilter with a capacity of 1000 items and an error rate of 1%
# File lib/redis/bloomfilter.rb, line 10 def initialize(options = {}) @options = { size: 1000, error_rate: 0.01, key_name: 'redis-bloomfilter', hash_engine: 'md5', redis: Redis.current, driver: nil }.merge options raise ArgumentError, 'options[:size] && options[:error_rate] cannot be nil' if options[:error_rate].nil? || options[:size].nil? # Size provided, compute hashes and bits @options[:size] = options[:size] @options[:error_rate] = options[:error_rate] ? options[:error_rate] : @options[:error_rate] @options[:bits] = Bloomfilter.optimal_m options[:size], @options[:error_rate] @options[:hashes] = Bloomfilter.optimal_k options[:size], @options[:bits] @redis = @options[:redis] || Redis.current @options[:hash_engine] = options[:hash_engine] if options[:hash_engine] if @options[:driver].nil? ver = @redis.info['redis_version'] @options[:driver] = if Gem::Version.new(ver) >= Gem::Version.new('2.6.0') 'lua' else 'ruby' end end driver_class = Redis::BloomfilterDriver.const_get(driver_name) @driver = driver_class.new @options @driver.redis = @redis end
optimal_k(num_of_elements, bf_size)
click to toggle source
# File lib/redis/bloomfilter.rb, line 53 def self.optimal_k(num_of_elements, bf_size) h = (Math.log(2) * (bf_size / num_of_elements)).round h += 1 if h.zero? h end
optimal_m(num_of_elements, false_positive_rate = 0.01)
click to toggle source
Methods used to calculate M and K Taken from en.wikipedia.org/wiki/Bloom_filter#Probability_of_false_positives
# File lib/redis/bloomfilter.rb, line 49 def self.optimal_m(num_of_elements, false_positive_rate = 0.01) (-1 * num_of_elements * Math.log(false_positive_rate) / (Math.log(2)**2)).round end
version()
click to toggle source
# File lib/redis/bloomfilter/version.rb, line 6 def self.version "redis-bloomfilter version #{VERSION}" end
Public Instance Methods
clear()
click to toggle source
It deletes a bloomfilter
# File lib/redis/bloomfilter.rb, line 70 def clear @driver.clear end
include?(key)
click to toggle source
It checks if a key is part of the set
# File lib/redis/bloomfilter.rb, line 65 def include?(key) @driver.include?(key) end
insert(data)
click to toggle source
Insert a new element
# File lib/redis/bloomfilter.rb, line 60 def insert(data) @driver.insert data end
Protected Instance Methods
driver_name()
click to toggle source
# File lib/redis/bloomfilter.rb, line 76 def driver_name @options[:driver].downcase.split('-').collect { |t| t.gsub(/(\w+)/, &:capitalize) }.join end