class RedisRds::ExpirableHash
Constants
- EXPIRY_KEY_SUFFIX
Public Instance Methods
all()
click to toggle source
# File lib/redis_rds/expirable_hash.rb, line 40 def all hash = ::Hash[super().group_by do |key, _value| if key.ends_with?(EXPIRY_KEY_SUFFIX) key[0...(key.length - EXPIRY_KEY_SUFFIX.length)] else key end end.map { |key, values| [key, values.map(&:second)] }] expired, valid = hash.partition { |_key, values| expired?(values.second) } expired.each { |key, _| remove(key) } return ::Hash[valid.map { |key, values| [key, values.first] }] end
expiry_key(key)
click to toggle source
# File lib/redis_rds/expirable_hash.rb, line 29 def expiry_key(key) return "#{key}#{EXPIRY_KEY_SUFFIX}" end
get(key)
click to toggle source
# File lib/redis_rds/expirable_hash.rb, line 5 def get(key) result = nil value, expires_at = connection.hmget(@redis_key, key, expiry_key(key)) if expired?(expires_at) remove(key) else result = value end return result end
remove(key)
click to toggle source
# File lib/redis_rds/expirable_hash.rb, line 33 def remove(key) connection.multi do |redis| redis.hdel(@redis_key, key) redis.hdel(@redis_key, expiry_key(key)) end end
set(key, value)
click to toggle source
# File lib/redis_rds/expirable_hash.rb, line 17 def set(key, value) connection.multi do |redis| redis.hset(@redis_key, key, value) redis.hdel(@redis_key, expiry_key(key)) end end
setex(key, value, expiry)
click to toggle source
# File lib/redis_rds/expirable_hash.rb, line 24 def setex(key, value, expiry) expires_at = Time.now.to_i + expiry connection.hmset(@redis_key, key, value, expiry_key(key), expires_at) end
Private Instance Methods
expired?(expires_at)
click to toggle source
# File lib/redis_rds/expirable_hash.rb, line 55 def expired?(expires_at) return false if expires_at.nil? return Time.now.to_i >= expires_at.to_i end