Class: BloomFilter::CountingRedis
- Defined in:
- lib/bloomfilter/counting_redis.rb
Instance Method Summary collapse
- #clear ⇒ Object
- #delete(key) ⇒ Object
- #include?(*keys) ⇒ Boolean (also: #key?)
-
#initialize(opts = {}) ⇒ CountingRedis
constructor
A new instance of CountingRedis.
- #insert(key, ttl = nil) ⇒ Object (also: #[]=)
- #num_set ⇒ Object (also: #size)
Methods inherited from Filter
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
#clear ⇒ Object
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?
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_set ⇒ Object 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 |