Class: RedisCacheStore
- Inherits:
-
Object
- Object
- RedisCacheStore
- Defined in:
- lib/cache_store_redis.rb
Overview
This class is used to implement a redis cache store.
Instance Method Summary collapse
- #clean ⇒ Object
-
#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.
- #decrement_using_stat ⇒ Object
- #enable_stats=(value) ⇒ Object
-
#exist?(key) ⇒ Boolean
This method is called to check if a value exists within this cache store for a specific key.
- #fetch_client ⇒ Object
-
#get(key, expires_in = 0, &block) ⇒ Object
This method is called to get a value from this cache store by it’s unique key.
- #increment_created_stat ⇒ Object
- #increment_using_stat ⇒ Object
-
#initialize(namespace = nil, config = nil) ⇒ RedisCacheStore
constructor
A new instance of RedisCacheStore.
- #log_stats ⇒ Object
-
#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 = 0) ⇒ 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.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/cache_store_redis.rb', line 10 def initialize(namespace = nil, config = nil) unless RUBY_PLATFORM == 'java' require 'oj' end @namespace = namespace @config = config @queue = Queue.new @connections_created = 0 @connections_in_use = 0 @mutex = Mutex.new @enable_stats = false end |
Instance Method Details
#clean ⇒ Object
82 83 84 85 86 87 |
# File 'lib/cache_store_redis.rb', line 82 def clean while @queue.length.positive? client = @queue.pop(true) client.close end 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.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/cache_store_redis.rb', line 48 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 end |
#decrement_using_stat ⇒ Object
41 42 43 44 45 |
# File 'lib/cache_store_redis.rb', line 41 def decrement_using_stat @mutex.synchronize do @connections_in_use -= 1 end end |
#enable_stats=(value) ⇒ Object
25 26 27 |
# File 'lib/cache_store_redis.rb', line 25 def enable_stats=(value) @enable_stats = value end |
#exist?(key) ⇒ Boolean
This method is called to check if a value exists within this cache store for a specific key.
176 177 178 179 180 |
# File 'lib/cache_store_redis.rb', line 176 def exist?(key) with_client do |client| client.exists(build_key(key)) end end |
#fetch_client ⇒ Object
73 74 75 76 77 78 79 80 |
# File 'lib/cache_store_redis.rb', line 73 def fetch_client begin @queue.pop(true) rescue increment_created_stat Redis.new(@config) 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.
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/cache_store_redis.rb', line 142 def get(key, expires_in = 0, &block) k = build_key(key) value = with_client do |client| client.get(k) end if !value.nil? && value.delete('\"').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 |
#increment_created_stat ⇒ Object
29 30 31 32 33 |
# File 'lib/cache_store_redis.rb', line 29 def increment_created_stat @mutex.synchronize do @connections_created += 1 end end |
#increment_using_stat ⇒ Object
35 36 37 38 39 |
# File 'lib/cache_store_redis.rb', line 35 def increment_using_stat @mutex.synchronize do @connections_in_use += 1 end end |
#log_stats ⇒ Object
89 90 91 92 93 94 95 |
# File 'lib/cache_store_redis.rb', line 89 def log_stats return unless @enable_stats == true S1Logging.logger.debug do "[#{self.class}] - REDIS Connection Stats. Process: #{Process.pid} | " \ "Created: #{@connections_created} | Pending: #{@queue.length} | In use: #{@connections_in_use}" end end |
#ping ⇒ String
Ping the cache store.
185 186 187 188 189 |
# File 'lib/cache_store_redis.rb', line 185 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.
166 167 168 169 170 |
# File 'lib/cache_store_redis.rb', line 166 def remove(key) with_client do |client| client.del(build_key(key)) end end |
#set(key, value, expires_in = 0) ⇒ Object
This method is called to set a value within this cache store by it’s key.
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/cache_store_redis.rb', line 116 def set(key, value, expires_in = 0) 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
97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/cache_store_redis.rb', line 97 def with_client log_stats begin client = fetch_client increment_using_stat log_stats yield client ensure @queue.push(client) decrement_using_stat log_stats end end |