Class: RedisCacheStore

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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_poolObject (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

#cleanObject 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.

Parameters:

  • key (String)

    This is the unique key to reference the value to check for within this cache store.

Returns:

  • (Boolean)

    True or False to specify if the key exists in the cache store.



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.

Parameters:

  • key (String)

    This is the unique key to reference the value to fetch from within this cache store.

  • expires_in (Integer) (defaults to: 0)

    This is the number of seconds from the current time that this value should expire.

  • &block (Block)

    This block is provided to hydrate this cache store with the value for the request key

Returns:

  • (Object)

    The value for the specified unique key within the cache store.



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

#pingString

Ping the cache store.

Returns:

  • (String)

    ‘PONG`



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.

Parameters:

  • key (String)

    This is the unique key to reference the value to remove from this cache store.



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.

Parameters:

  • key (String)

    This is the unique key to reference the value being set within this cache store.

  • value (Object)

    This is the value to set within this cache store.

  • expires_in (Integer) (defaults to: DEFAULT_TTL)

    This is the number of seconds from the current time that this value should expire.



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