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.
Instance Method Summary collapse
- #clean ⇒ Object (also: #shutdown)
-
#configure(host = 'localhost', port = 6379, db = 'default', 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.
- #connection_pool ⇒ Object
-
#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, &block) ⇒ Object
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
This method is called to remove a value from this cache store by it’s unique key.
-
#set(key, value, expires_in = 3_600) ⇒ Object
This method is called to set a value within this cache store by it’s key.
- #with_client ⇒ Object
Constructor Details
#initialize(namespace = nil, config = nil) ⇒ RedisCacheStore
Returns a new instance of RedisCacheStore.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 3 def initialize(namespace = nil, config = nil) @connection_pool = RedisConnectionPool.new(config) unless RUBY_PLATFORM == 'java' require 'oj' end @namespace = namespace @config = config @connections_created = 0 @connections_in_use = 0 @mutex = Mutex.new @enable_stats = false end |
Instance Method Details
#clean ⇒ Object Also known as: shutdown
50 51 52 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 50 def clean connection_pool.shutdown end |
#configure(host = 'localhost', port = 6379, db = 'default', 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.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 24 def configure(host = 'localhost', port = 6379, db = 'default', 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 |
#connection_pool ⇒ Object
19 20 21 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 19 def connection_pool @connection_pool end |
#exist?(key) ⇒ Boolean
This method is called to check if a value exists within this cache store for a specific key.
126 127 128 129 130 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 126 def exist?(key) with_client do |client| client.exists(build_key(key)) end end |
#get(key, expires_in = 0, &block) ⇒ Object
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.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 92 def get(key, expires_in = 0, &block) 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.
135 136 137 138 139 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 135 def ping with_client do |client| client.ping end end |
#remove(key) ⇒ Object
This method is called to remove a value from this cache store by it’s unique key.
116 117 118 119 120 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 116 def remove(key) with_client do |client| client.del(build_key(key)) end end |
#set(key, value, expires_in = 3_600) ⇒ Object
This method is called to set a value within this cache store by it’s key.
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 66 def set(key, value, expires_in = 3_600) k = build_key(key) v = if value.nil? || (value.is_a?(String) && value.strip.empty?) nil else serialize(value) end with_client do |client| client.multi do client.set(k, v) client.expire(k, expires_in) if expires_in.positive? end end end |
#with_client ⇒ Object
55 56 57 58 59 |
# File 'lib/cache_store_redis/redis_cache_store.rb', line 55 def with_client connection_pool.with_connection do |connection| yield connection end end |