class Ablab::Store::Redis
Attributes
redis[R]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/ablab/store/redis.rb, line 8 def initialize(opts = {}) @key_prefix = opts[:key_prefix] || 'ablab' @redis = ::Redis.new(opts) end
Public Instance Methods
conversions(experiment, bucket)
click to toggle source
# File lib/ablab/store/redis.rb, line 33 def conversions(experiment, bucket) (redis.pfcount(key(:conversions, experiment, bucket)) || 0).to_i end
counts(experiment, bucket)
click to toggle source
# File lib/ablab/store/redis.rb, line 37 def counts(experiment, bucket) v, s, x, c = nil, nil, nil, nil redis.multi do v = redis.get(key(:views, experiment, bucket)) s = redis.pfcount(key(:sessions, experiment, bucket)) x = redis.get(key(:successes, experiment, bucket)) c = redis.pfcount(key(:conversions, experiment, bucket)) end { views: (v.value || 0).to_i, sessions: (s.value || 0).to_i, successes: (x.value || 0).to_i, conversions: (c.value || 0).to_i } end
sessions(experiment, bucket)
click to toggle source
# File lib/ablab/store/redis.rb, line 25 def sessions(experiment, bucket) (redis.pfcount(key(:sessions, experiment, bucket)) || 0).to_i end
successes(experiment, bucket)
click to toggle source
# File lib/ablab/store/redis.rb, line 29 def successes(experiment, bucket) (redis.get(key(:successes, experiment, bucket)) || 0).to_i end
track_success!(experiment, bucket, session_id)
click to toggle source
# File lib/ablab/store/redis.rb, line 17 def track_success!(experiment, bucket, session_id) track(experiment, bucket, session_id, :successes, :conversions) end
track_view!(experiment, bucket, session_id)
click to toggle source
# File lib/ablab/store/redis.rb, line 13 def track_view!(experiment, bucket, session_id) track(experiment, bucket, session_id, :views, :sessions) end
views(experiment, bucket)
click to toggle source
# File lib/ablab/store/redis.rb, line 21 def views(experiment, bucket) (redis.get(key(:views, experiment, bucket)) || 0).to_i end
Private Instance Methods
key(type, experiment, bucket)
click to toggle source
# File lib/ablab/store/redis.rb, line 53 def key(type, experiment, bucket) "#{@key_prefix}:#{type}:#{experiment}:#{bucket}" end
track(experiment, bucket, session_id, counter, set)
click to toggle source
# File lib/ablab/store/redis.rb, line 57 def track(experiment, bucket, session_id, counter, set) return false if bucket.nil? redis.pipelined do redis.incr(key(counter, experiment, bucket)) redis.pfadd(key(set, experiment, bucket), session_id) end end