Class: BloomFilter::CountingRedis

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

Instance Method Summary collapse

Methods inherited from Filter

#stats

Constructor Details

#initialize(opts = {}) ⇒ CountingRedis

Returns a new instance of CountingRedis.



4
5
6
7
8
9
10
11
12
13
14
# File 'lib/bloomfilter/counting_redis.rb', line 4

def initialize(opts = {})
  @opts = {
    :size    => 100,
    :hashes  => 4,
    :seed    => Time.now.to_i,
    :bucket  => 3,
    :ttl => false,
    :server => {}
  }.merge opts
  @db = ::Redis.new(@opts[:server])
end

Instance Method Details

#clearObject



45
46
47
# File 'lib/bloomfilter/counting_redis.rb', line 45

def clear
  @db.flushdb
end

#delete(key) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/bloomfilter/counting_redis.rb', line 26

def delete(key)
  indexes_for(key).each do |idx|
    if @db.decr(idx).to_i <= 0
      @db.del(idx)
    end
  end
end

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

Returns:

  • (Boolean)


34
35
36
37
# File 'lib/bloomfilter/counting_redis.rb', line 34

def include?(*keys)
  indexes = keys.collect { |key| indexes_for(key) }
  not @db.mget(*indexes.flatten).include? nil
end

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



16
17
18
19
20
21
22
23
# File 'lib/bloomfilter/counting_redis.rb', line 16

def insert(key, ttl=nil)
  ttl = @opts[:ttl] if ttl.nil?

  indexes_for(key).each do |idx|
    @db.incr idx
    @db.expire(idx, ttl) if ttl
  end
end

#num_setObject Also known as: size



40
41
42
# File 'lib/bloomfilter/counting_redis.rb', line 40

def num_set
  @db.keys("rbloom:*").size
end