legion-cache 1.3.11 → 1.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/legion/cache/memory.rb +89 -0
- data/lib/legion/cache/version.rb +1 -1
- data/lib/legion/cache.rb +22 -2
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 84f54b95a9a31607080afb2afbad2e85d713cb2d24b0a126dd97cea864d443a6
|
|
4
|
+
data.tar.gz: 0be1410d11a82efb137f050b7236f6e7d8cde91d4d75cf1275c0ccc22fbc1ed7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e581d3e4d49937215c091f309939985b174516a5fa78619e499bc5a2d01e6ac389c438fcf5bdc63d883ca72b08bc082e0926f88ffbc7fbae2578198ca6aad954
|
|
7
|
+
data.tar.gz: a1618ccbad942d1c73bb0f549a6485f2883371b67d9bd3beded87aa58eb71bcdf092579c1d640afa80e3e98567c49e4e5cd6e4cd40f1bc0cf179ee188f219688
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.3.12] - 2026-03-24
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- `Legion::Cache::Memory` adapter module for lite mode: pure in-memory cache with TTL expiry and thread-safe Mutex synchronization
|
|
7
|
+
- Cache `setup` auto-detects `LEGION_MODE=lite` and activates Memory adapter, skipping Redis/Memcached
|
|
8
|
+
- `@using_memory` flag routes `get`/`set`/`fetch`/`delete`/`flush` through Memory adapter
|
|
9
|
+
- `shutdown` cleanly tears down Memory adapter when active
|
|
10
|
+
|
|
3
11
|
## [1.3.11] - 2026-03-22
|
|
4
12
|
|
|
5
13
|
### Added
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Cache
|
|
5
|
+
module Memory
|
|
6
|
+
extend self
|
|
7
|
+
|
|
8
|
+
@store = {}
|
|
9
|
+
@expiry = {}
|
|
10
|
+
@mutex = Mutex.new
|
|
11
|
+
@connected = false
|
|
12
|
+
|
|
13
|
+
def setup(**)
|
|
14
|
+
@connected = true
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def client(**) = self
|
|
18
|
+
|
|
19
|
+
def connected?
|
|
20
|
+
@connected
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def get(key)
|
|
24
|
+
@mutex.synchronize do
|
|
25
|
+
expire_if_needed(key)
|
|
26
|
+
@store[key]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def set(key, value, ttl = nil)
|
|
31
|
+
@mutex.synchronize do
|
|
32
|
+
@store[key] = value
|
|
33
|
+
@expiry[key] = Time.now + ttl if ttl&.positive?
|
|
34
|
+
value
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def fetch(key, ttl = nil)
|
|
39
|
+
val = get(key)
|
|
40
|
+
return val unless val.nil?
|
|
41
|
+
|
|
42
|
+
val = yield if block_given?
|
|
43
|
+
set(key, val, ttl)
|
|
44
|
+
val
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def delete(key)
|
|
48
|
+
@mutex.synchronize do
|
|
49
|
+
@store.delete(key)
|
|
50
|
+
@expiry.delete(key)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def flush(_delay = 0)
|
|
55
|
+
@mutex.synchronize do
|
|
56
|
+
@store.clear
|
|
57
|
+
@expiry.clear
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def close = nil
|
|
62
|
+
|
|
63
|
+
def shutdown
|
|
64
|
+
flush
|
|
65
|
+
@connected = false
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def reset!
|
|
69
|
+
@mutex.synchronize do
|
|
70
|
+
@store.clear
|
|
71
|
+
@expiry.clear
|
|
72
|
+
@connected = false
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def size = 1
|
|
77
|
+
def available = 1
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
def expire_if_needed(key)
|
|
82
|
+
return unless @expiry.key?(key) && Time.now > @expiry[key]
|
|
83
|
+
|
|
84
|
+
@store.delete(key)
|
|
85
|
+
@expiry.delete(key)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
data/lib/legion/cache/version.rb
CHANGED
data/lib/legion/cache.rb
CHANGED
|
@@ -6,6 +6,7 @@ require 'legion/cache/cacheable'
|
|
|
6
6
|
|
|
7
7
|
require 'legion/cache/memcached'
|
|
8
8
|
require 'legion/cache/redis'
|
|
9
|
+
require 'legion/cache/memory'
|
|
9
10
|
require 'legion/cache/local'
|
|
10
11
|
require 'legion/cache/helper'
|
|
11
12
|
|
|
@@ -21,15 +22,29 @@ module Legion
|
|
|
21
22
|
def setup(**)
|
|
22
23
|
return Legion::Settings[:cache][:connected] = true if connected?
|
|
23
24
|
|
|
25
|
+
if ENV['LEGION_MODE'] == 'lite'
|
|
26
|
+
Legion::Cache::Memory.setup
|
|
27
|
+
@using_memory = true
|
|
28
|
+
@connected = true
|
|
29
|
+
Legion::Settings[:cache][:connected] = true
|
|
30
|
+
Legion::Logging.info 'Legion::Cache using in-memory adapter (lite mode)' if defined?(Legion::Logging)
|
|
31
|
+
return
|
|
32
|
+
end
|
|
33
|
+
|
|
24
34
|
setup_local
|
|
25
35
|
setup_shared(**)
|
|
26
36
|
end
|
|
27
37
|
|
|
28
38
|
def shutdown
|
|
29
39
|
Legion::Logging.info 'Shutting down Legion::Cache'
|
|
30
|
-
|
|
31
|
-
|
|
40
|
+
if @using_memory
|
|
41
|
+
Legion::Cache::Memory.shutdown
|
|
42
|
+
else
|
|
43
|
+
close unless @using_local
|
|
44
|
+
Legion::Cache::Local.shutdown if Legion::Cache::Local.connected?
|
|
45
|
+
end
|
|
32
46
|
@using_local = false
|
|
47
|
+
@using_memory = false
|
|
33
48
|
@connected = false
|
|
34
49
|
Legion::Settings[:cache][:connected] = false
|
|
35
50
|
end
|
|
@@ -43,30 +58,35 @@ module Legion
|
|
|
43
58
|
end
|
|
44
59
|
|
|
45
60
|
def get(key)
|
|
61
|
+
return Legion::Cache::Memory.get(key) if @using_memory
|
|
46
62
|
return Legion::Cache::Local.get(key) if @using_local
|
|
47
63
|
|
|
48
64
|
super
|
|
49
65
|
end
|
|
50
66
|
|
|
51
67
|
def set(key, value, ttl = 180)
|
|
68
|
+
return Legion::Cache::Memory.set(key, value, ttl) if @using_memory
|
|
52
69
|
return Legion::Cache::Local.set(key, value, ttl) if @using_local
|
|
53
70
|
|
|
54
71
|
super
|
|
55
72
|
end
|
|
56
73
|
|
|
57
74
|
def fetch(key, ttl = nil)
|
|
75
|
+
return Legion::Cache::Memory.fetch(key, ttl) if @using_memory
|
|
58
76
|
return Legion::Cache::Local.fetch(key, ttl) if @using_local
|
|
59
77
|
|
|
60
78
|
super
|
|
61
79
|
end
|
|
62
80
|
|
|
63
81
|
def delete(key)
|
|
82
|
+
return Legion::Cache::Memory.delete(key) if @using_memory
|
|
64
83
|
return Legion::Cache::Local.delete(key) if @using_local
|
|
65
84
|
|
|
66
85
|
super
|
|
67
86
|
end
|
|
68
87
|
|
|
69
88
|
def flush(delay = 0)
|
|
89
|
+
return Legion::Cache::Memory.flush(delay) if @using_memory
|
|
70
90
|
return Legion::Cache::Local.flush(delay) if @using_local
|
|
71
91
|
|
|
72
92
|
super
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: legion-cache
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.3.
|
|
4
|
+
version: 1.3.12
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
@@ -104,6 +104,7 @@ files:
|
|
|
104
104
|
- lib/legion/cache/helper.rb
|
|
105
105
|
- lib/legion/cache/local.rb
|
|
106
106
|
- lib/legion/cache/memcached.rb
|
|
107
|
+
- lib/legion/cache/memory.rb
|
|
107
108
|
- lib/legion/cache/pool.rb
|
|
108
109
|
- lib/legion/cache/redis.rb
|
|
109
110
|
- lib/legion/cache/settings.rb
|