Class: BloomFilter::Redis

Inherits:
Filter
  • Object
show all
Defined in:
lib/bloomfilter/redis.rb

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Redis

Returns a new instance of Redis.



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/bloomfilter/redis.rb', line 4

def initialize(opts = {})
  @opts = {
    :size    => 100,
    :hashes  => 4,
    :seed    => Time.now.to_i,
    :namespace => 'redis',
    :eager  => false,
    :server => {}
  }.merge opts
  @db = ::Redis.new(@opts[:server])

  if @opts[:eager]
    @db.setbit @opts[:namespace], @opts[:size]+1, 1
  end
end

Instance Method Details

#clearObject



55
56
57
# File 'lib/bloomfilter/redis.rb', line 55

def clear
  @db.set @opts[:namespace], 0
end

#delete(key) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/bloomfilter/redis.rb', line 47

def delete(key)
  @db.pipelined do
    indexes_for(key) do |idx|
      @db.setbit @opts[:namespace], idx, 0
    end
  end
end

#include?(*keys) ⇒ Boolean Also known as: key?

Returns:

  • (Boolean)


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/bloomfilter/redis.rb', line 27

def include?(*keys)
  keys.each do |key|
    indexes = []
    indexes_for(key) { |idx| indexes << idx }

    return false if @db.getbit(@opts[:namespace], indexes.shift) == 0

    result = @db.pipelined do
      indexes.each do |idx|
        @db.getbit(@opts[:namespace], idx)
      end
    end

    return false if result.include?(0)
  end

  true
end

#insert(key, ttl = nil) ⇒ Object Also known as: []=



20
21
22
23
24
# File 'lib/bloomfilter/redis.rb', line 20

def insert(key, ttl=nil)
  @db.pipelined do
    indexes_for(key) { |idx| @db.setbit @opts[:namespace], idx, 1 }
  end
end

#num_setObject Also known as: size



59
60
61
# File 'lib/bloomfilter/redis.rb', line 59

def num_set
  @db.strlen @opts[:namespace]
end

#statsObject



64
65
66
67
# File 'lib/bloomfilter/redis.rb', line 64

def stats
  printf "Number of filter buckets (m): %d\n" % @opts[:size]
  printf "Number of filter hashes (k) : %d\n" % @opts[:hashes]
end