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
15
# File 'lib/bloomfilter/counting_redis.rb', line 4

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

Instance Method Details

#clearObject



48
49
50
# File 'lib/bloomfilter/counting_redis.rb', line 48

def clear
  @db.flushdb
end

#delete(key) ⇒ Object



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

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

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

Returns:

  • (Boolean)


37
38
39
40
# File 'lib/bloomfilter/counting_redis.rb', line 37

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: []=



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

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



43
44
45
# File 'lib/bloomfilter/counting_redis.rb', line 43

def num_set
  @db.eval("return #redis.call('keys', '#{@opts[:identifier]}:*')")
end