Class: RedisCacheStore
- Inherits:
-
Object
- Object
- RedisCacheStore
- Defined in:
- lib/cache_store_redis/redis_cache_store.rb
Overview
This class is used to implement a redis cache store.
Constant Summary collapse
- DEFAULT_TTL =
Default expiry time if not provided. (1 hour)
3_600
Instance Attribute Summary collapse
-
#connection_pool ⇒ Object
readonly
Returns the value of attribute connection_pool.
Instance Method Summary collapse
- #clean ⇒ Object (also: #shutdown)
-
#configure(host = 'localhost', port = 6379, db = 0, password = nil, driver: nil, url: nil, connect_timeout: 0.5, read_timeout: 1, write_timeout: 0.5) ⇒ Object
This method is called to configure the connection to the cache store.
-
#exist?(key) ⇒ Boolean
This method is called to check if a value exists within this cache store for a specific key.
-
#get(key, expires_in = 0) ⇒ Object
(also: #read)
This method is called to get a value from this cache store by it’s unique key.
-
#initialize(namespace = nil, config = nil) ⇒ RedisCacheStore
constructor
A new instance of RedisCacheStore.
-
#ping ⇒ String
Ping the cache store.
-
#remove(key) ⇒ Object
(also: #delete)
This method is called to remove a value from this cache store by it’s unique key.
-
#set(key, value, expires_in = DEFAULT_TTL) ⇒ Object
(also: #write)
This method is called to set a value within this cache store by it’s key.
- #with_client(&block) ⇒ Object
Constructor Details
#initialize(namespace = nil, config = nil) ⇒ RedisCacheStore
Returns a new instance of RedisCacheStore.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 6 def initialize(namespace = nil, config = nil) unless RUBY_PLATFORM == 'java' require 'oj' end @connection_pool = RedisConnectionPool.new(namespace, config) @namespace = namespace @config = config @connections_created = 0 @connections_in_use = 0 @mutex = Mutex.new @enable_stats = false end |
Instance Attribute Details
#connection_pool ⇒ Object (readonly)
Returns the value of attribute connection_pool.
22 23 24 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 22 def connection_pool @connection_pool end |
Instance Method Details
#clean ⇒ Object Also known as: shutdown
51 52 53 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 51 def clean connection_pool.shutdown end |
#configure(host = 'localhost', port = 6379, db = 0, password = nil, driver: nil, url: nil, connect_timeout: 0.5, read_timeout: 1, write_timeout: 0.5) ⇒ Object
This method is called to configure the connection to the cache store.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 25 def configure(host = 'localhost', port = 6379, db = 0, password = nil, driver: nil, url: nil, connect_timeout: 0.5, read_timeout: 1, write_timeout: 0.5) if !url.nil? @config = {} @config[:url] = url @config[:db] = db else @config = { host: host, port: port, db: db } end @config[:password] = password unless password.nil? @config[:driver] = driver unless driver.nil? @config[:connect_timeout] = connect_timeout @config[:read_timeout] = read_timeout @config[:write_timeout] = write_timeout connection_pool.config = @config end |
#exist?(key) ⇒ Boolean
This method is called to check if a value exists within this cache store for a specific key.
128 129 130 131 132 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 128 def exist?(key) with_client do |client| !client.exists(build_key(key)).zero? end end |
#get(key, expires_in = 0) ⇒ Object Also known as: read
This method is called to get a value from this cache store by it’s unique key.
(This is used in conjunction with the block to hydrate the cache key if it is empty.) when it is not found.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 94 def get(key, expires_in = 0) k = build_key(key) value = with_client do |client| client.get(k) end if !value.nil? && value.strip.empty? value = nil else value = deserialize(value) unless value.nil? end if value.nil? && block_given? value = yield set(key, value, expires_in) end value end |
#ping ⇒ String
Ping the cache store.
137 138 139 140 141 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 137 def ping with_client do |client| client.ping end end |
#remove(key) ⇒ Object Also known as: delete
This method is called to remove a value from this cache store by it’s unique key.
118 119 120 121 122 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 118 def remove(key) with_client do |client| client.del(build_key(key)) end end |
#set(key, value, expires_in = DEFAULT_TTL) ⇒ Object Also known as: write
This method is called to set a value within this cache store by it’s key.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 65 def set(key, value, expires_in = DEFAULT_TTL) k = build_key(key) v = if value.nil? || (value.is_a?(String) && value.strip.empty?) nil else serialize(value) end expiry_int = Integer(expires_in) expire_value = expiry_int.positive? ? expiry_int : Integer(DEFAULT_TTL) with_client do |client| client.multi do client.set(k, v) client.expire(k, expire_value) end end end |
#with_client(&block) ⇒ Object
56 57 58 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 56 def with_client(&block) connection_pool.with_connection(&block) end |