cache_store_redis 1.0.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: be38ccc0055190deb7d7285fa68c0a82c8d5598e
4
- data.tar.gz: 43d959f9ac031653d52f717186bd3b7abddec1a5
2
+ SHA256:
3
+ metadata.gz: edb347a21c9194be5a503cd49269450999464c8b6b9e0d76301db09378070877
4
+ data.tar.gz: 91c4895a3b68615a107401357bb851a2228b7f3fcbe0cf539764bc53e10aff43
5
5
  SHA512:
6
- metadata.gz: 1f90ae3a590d10b6034df72719966252ef1caf6b0b14a1564b5fb53a22cb54c24c989f583d04a069cb3910973425cfbcf30b9d9d37f2b30a2175630485bbb87a
7
- data.tar.gz: 78a73c402e500a51c9d3aceb080de57e7daf40ef80fce5b9b6cf3166b87531ec72c58dd95c5c37fda4162164f311bd4cee3e5a239a28910daf0ce2377a62c362
6
+ metadata.gz: 3baf73be272515d4a80e2e05dc3adec633187c5066571d7e00efb9087814d442afed6257d213cf67dba855f5f3c3501ab369232c07a3fdabd8397684f4575817
7
+ data.tar.gz: 3c8363c6745d33f3f782c3ee87cb0d2a54b7bd6c63e5bfc26ebabf92ba91a13e0128d3878fdc724cc53a79cc44ca174723d71591deaf856401b181abe7a2d392
@@ -4,6 +4,8 @@ require 'thread'
4
4
  require 'cache_store_redis/version'
5
5
  require 'redis'
6
6
  require 'securerandom'
7
+ require 'oj'
8
+ require 'logger'
7
9
 
8
10
  require_relative 'cache_store_redis/redis_connection'
9
11
  require_relative 'cache_store_redis/redis_connection_pool'
@@ -1,5 +1,3 @@
1
- require 'logger'
2
-
3
1
  # This class is used to define a redis cache store that logs failures as warnings but does not raise errors for
4
2
  # cache connections
5
3
  class OptionalRedisCacheStore
@@ -7,7 +5,7 @@ class OptionalRedisCacheStore
7
5
  @cache_store = RedisCacheStore.new(namespace, config)
8
6
  @logger = logger || Logger.new(STDOUT)
9
7
  end
10
-
8
+
11
9
  def redis_store
12
10
  @cache_store
13
11
  end
@@ -39,10 +37,7 @@ class OptionalRedisCacheStore
39
37
  def optional_get(key, expires_in = 0)
40
38
  redis_store.get(key, expires_in)
41
39
  rescue => e
42
- @logger.error(
43
- "[#{self.class}] - An error occurred requesting data from the cache. " \
44
- "Key: #{key} | Error: #{e.message} | Backtrace: #{e.backtrace}"
45
- )
40
+ handle_error(e, 'requesting data from the cache')
46
41
  nil
47
42
  end
48
43
 
@@ -60,38 +55,42 @@ class OptionalRedisCacheStore
60
55
  def set(key, value, expires_in = 0)
61
56
  redis_store.set(key, value, expires_in)
62
57
  rescue => e
63
- @logger.error(
64
- "[#{self.class}] - An error occurred storing data in the cache. " \
65
- "Key: #{key} | Error: #{e.message} | Backtrace: #{e.backtrace}"
66
- )
58
+ handle_error(e, 'storing data in the cache')
67
59
  end
68
60
 
69
61
  def remove(key)
70
62
  redis_store.remove(key)
71
63
  rescue => e
72
- @logger.error(
73
- "[#{self.class}] - An error occurred removing data from the cache. " \
74
- "Key: #{key} | Error: #{e.message} | Backtrace: #{e.backtrace}"
75
- )
64
+ handle_error(e, 'removing data from the cache')
76
65
  end
77
66
 
78
67
  def exist?(key)
79
68
  redis_store.exist?(key)
80
69
  rescue => e
81
- @logger.error(
82
- "[#{self.class}] - An error occurred checking if a key exists in the cache. " \
83
- "Key: #{key} | Error: #{e.message} | Backtrace: #{e.backtrace}"
84
- )
70
+ handle_error(e, 'checking if a key exists in the cache')
85
71
  false
86
72
  end
87
73
 
88
74
  def ping
89
75
  redis_store.ping
90
76
  rescue => e
91
- @logger.error(
92
- "[#{self.class}] - An error occurred checking pinging the cache. " \
93
- "Error: #{e.message} | Backtrace: #{e.backtrace}"
94
- )
77
+ handle_error(e, 'pinging the cache')
95
78
  false
96
79
  end
80
+
81
+ def shutdown
82
+ redis_store.shutdown
83
+ rescue => e
84
+ handle_error(e, 'shutting down the connection pool')
85
+ false
86
+ end
87
+
88
+ private
89
+
90
+ def handle_error(ex, msg)
91
+ @logger.error do
92
+ "[#{self.class}] - An error occurred #{msg}. " \
93
+ "Error: #{ex.message} | Backtrace: #{ex.backtrace}"
94
+ end
95
+ end
97
96
  end
@@ -1,11 +1,10 @@
1
1
  # This class is used to implement a redis cache store.
2
2
  class RedisCacheStore
3
- def initialize(namespace = nil, config = nil)
4
- @connection_pool = RedisConnectionPool.new(config)
3
+ # Default expiry time if not provided. (1 hour)
4
+ DEFAULT_TTL = 3_600
5
5
 
6
- unless RUBY_PLATFORM == 'java'
7
- require 'oj'
8
- end
6
+ def initialize(namespace = nil, config = nil)
7
+ @connection_pool = RedisConnectionPool.new(namespace, config)
9
8
 
10
9
  @namespace = namespace
11
10
  @config = config
@@ -63,7 +62,7 @@ class RedisCacheStore
63
62
  # @param key [String] This is the unique key to reference the value being set within this cache store.
64
63
  # @param value [Object] This is the value to set within this cache store.
65
64
  # @param expires_in [Integer] This is the number of seconds from the current time that this value should expire.
66
- def set(key, value, expires_in = 3_600)
65
+ def set(key, value, expires_in = DEFAULT_TTL)
67
66
  k = build_key(key)
68
67
 
69
68
  v = if value.nil? || (value.is_a?(String) && value.strip.empty?)
@@ -72,11 +71,14 @@ class RedisCacheStore
72
71
  serialize(value)
73
72
  end
74
73
 
74
+ expiry_int = Integer(expires_in)
75
+ expire_value = expiry_int.positive? ? expiry_int : DEFAULT_TTL
76
+
75
77
  with_client do |client|
76
78
  client.multi do
77
79
  client.set(k, v)
78
80
 
79
- client.expire(k, expires_in) if expires_in.positive?
81
+ client.expire(k, expire_value)
80
82
  end
81
83
  end
82
84
  end
@@ -141,19 +143,11 @@ class RedisCacheStore
141
143
  private
142
144
 
143
145
  def serialize(object)
144
- if RUBY_PLATFORM == 'java'
145
- Marshal::dump(object)
146
- else
147
- Oj.dump(object)
148
- end
146
+ Oj.dump(object)
149
147
  end
150
148
 
151
149
  def deserialize(object)
152
- if RUBY_PLATFORM == 'java'
153
- Marshal::load(object)
154
- else
155
- Oj.load(object)
156
- end
150
+ Oj.load(object)
157
151
  end
158
152
 
159
153
  def build_key(key)
@@ -1,3 +1,3 @@
1
1
  module CacheStoreRedis
2
- VERSION = '1.0.0'
2
+ VERSION = '2.1.1'
3
3
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cache_store_redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - vaughanbrittonsage
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-06 00:00:00.000000000 Z
11
+ date: 2021-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.11'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -42,16 +42,44 @@ dependencies:
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: '3.0'
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: timecop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: redis
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -95,7 +123,7 @@ files:
95
123
  - lib/cache_store_redis/redis_connection.rb
96
124
  - lib/cache_store_redis/redis_connection_pool.rb
97
125
  - lib/cache_store_redis/version.rb
98
- homepage: https://github.com/vaughanbrittonsage/cache_store
126
+ homepage: https://github.com/sage/cache_store
99
127
  licenses:
100
128
  - MIT
101
129
  metadata: {}
@@ -114,8 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
142
  - !ruby/object:Gem::Version
115
143
  version: '0'
116
144
  requirements: []
117
- rubyforge_project:
118
- rubygems_version: 2.5.1
145
+ rubygems_version: 3.1.2
119
146
  signing_key:
120
147
  specification_version: 4
121
148
  summary: This is the redis cache_store implementation.