Class: RedisRds::ExpirableHash
- Inherits:
-
Hash
show all
- Defined in:
- lib/redis_rds/expirable_hash.rb
Constant Summary
collapse
- EXPIRY_KEY_SUFFIX =
'__expiry__'.freeze
Instance Attribute Summary
Attributes inherited from Object
#redis_key
Instance Method Summary
collapse
Methods inherited from Hash
#decr, #decrby, #each, #getall, #incr, #incrby, #key?, #keys, #mget, #mset, #setnx, #to_json, #values
Methods inherited from Object
configure, #connection, connection, #delete, #dump, #exists?, #expire, #expireat, flushdb, #initialize, #namespace, #persist, #pttl, #ttl, #type
Instance Method Details
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# 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) ⇒ Object
29
30
31
|
# File 'lib/redis_rds/expirable_hash.rb', line 29
def expiry_key(key)
return "#{key}#{EXPIRY_KEY_SUFFIX}"
end
|
5
6
7
8
9
10
11
12
13
14
15
|
# 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) ⇒ Object
33
34
35
36
37
38
|
# 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) ⇒ Object
17
18
19
20
21
22
|
# 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) ⇒ Object
24
25
26
27
|
# 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
|