ar_cache 1.5.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +0 -41
- data/Gemfile.common +2 -0
- data/Gemfile.lock +81 -77
- data/README.md +4 -4
- data/README.zh-CN.md +165 -0
- data/ar_cache.gemspec +1 -0
- data/lib/ar_cache.rb +31 -16
- data/lib/ar_cache/active_record/associations/association.rb +1 -1
- data/lib/ar_cache/active_record/associations/has_one_through_association.rb +2 -3
- data/lib/ar_cache/active_record/associations/singular_association.rb +1 -1
- data/lib/ar_cache/active_record/connection_adapters/abstract/database_statements.rb +20 -15
- data/lib/ar_cache/active_record/connection_adapters/abstract/transaction.rb +37 -32
- data/lib/ar_cache/active_record/core.rb +5 -4
- data/lib/ar_cache/active_record/insert_all.rb +1 -4
- data/lib/ar_cache/active_record/model_schema.rb +1 -7
- data/lib/ar_cache/active_record/persistence.rb +4 -5
- data/lib/ar_cache/active_record/relation.rb +7 -8
- data/lib/ar_cache/configuration.rb +34 -41
- data/lib/ar_cache/marshal.rb +29 -27
- data/lib/ar_cache/mock_table.rb +4 -4
- data/lib/ar_cache/query.rb +21 -12
- data/lib/ar_cache/table.rb +44 -50
- data/lib/ar_cache/version.rb +1 -1
- data/lib/ar_cache/where_clause.rb +34 -25
- data/lib/generators/ar_cache/install_generator.rb +0 -7
- data/lib/generators/ar_cache/templates/configuration.rb +20 -24
- metadata +23 -5
- data/lib/ar_cache/record.rb +0 -52
- data/lib/ar_cache/store.rb +0 -38
- data/lib/generators/ar_cache/templates/migrate/create_ar_cache_records.rb.tt +0 -16
@@ -1,21 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rails/generators'
|
4
|
-
require 'rails/generators/migration'
|
5
|
-
require 'rails/generators/active_record/migration'
|
6
4
|
|
7
5
|
module ArCache
|
8
6
|
module Generators
|
9
7
|
class InstallGenerator < Rails::Generators::Base
|
10
|
-
include Rails::Generators::Migration
|
11
|
-
include ::ActiveRecord::Generators::Migration
|
12
|
-
|
13
8
|
source_root File.expand_path('templates', __dir__)
|
14
9
|
|
15
10
|
def copy_initializer_file
|
16
11
|
copy_file 'configuration.rb', 'config/initializers/ar_cache.rb'
|
17
|
-
|
18
|
-
migration_template 'migrate/create_ar_cache_records.rb', 'db/migrate/create_ar_cache_records.rb'
|
19
12
|
end
|
20
13
|
end
|
21
14
|
end
|
@@ -2,32 +2,28 @@
|
|
2
2
|
|
3
3
|
# For more information, please see: https://github.com/OuYangJinTing/ar_cache/README.md
|
4
4
|
ArCache.configure do |config|
|
5
|
-
#
|
6
|
-
#
|
5
|
+
# NOTE: Please change true if database happened some problems
|
6
|
+
# Arcache default use database share lock to ensure that the cache is correct.
|
7
|
+
config.cache_lock = false # Boolean
|
7
8
|
|
8
|
-
#
|
9
|
+
# The cache tool.
|
10
|
+
config.cache_store = defined?(Rails) ? Rails.cache : ActiveSupport::Cache::MemoryStore.new
|
9
11
|
|
10
|
-
#
|
11
|
-
|
12
|
-
|
13
|
-
# Serialize and deserialize cached data.
|
14
|
-
# config.coder = [YAML|JSON] # default YAML
|
15
|
-
|
16
|
-
# Support the maximum length of index column value.
|
17
|
-
# config.column_length = Integer # default 64
|
12
|
+
# The cache key valid time.
|
13
|
+
config.expires_in = 1.week # Integer
|
18
14
|
|
19
15
|
# ArCache switch.
|
20
|
-
|
21
|
-
|
22
|
-
# Whether to support
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
16
|
+
config.disabled = false # Boolean
|
17
|
+
|
18
|
+
# Whether to support select column sql.
|
19
|
+
config.select_disabled = true # Boolean
|
20
|
+
|
21
|
+
config.tables_options = {
|
22
|
+
# table_name: {
|
23
|
+
# disabled: Boolean,
|
24
|
+
# select_disabled: Boolean,
|
25
|
+
# unique_indexes: Array # eg: [:id, [:name, :statue]], The default is the unique index column of the table.
|
26
|
+
# },
|
27
|
+
# ...
|
28
|
+
}
|
33
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ar_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OuYangJinTing
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -30,6 +30,26 @@ dependencies:
|
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '7'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: oj
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '3'
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '4'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '3'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '4'
|
33
53
|
description: An modern cacheing library for ActiveRecord inspired by cache-money and
|
34
54
|
second_level_cache.
|
35
55
|
email:
|
@@ -48,6 +68,7 @@ files:
|
|
48
68
|
- Gemfile.lock
|
49
69
|
- LICENSE.txt
|
50
70
|
- README.md
|
71
|
+
- README.zh-CN.md
|
51
72
|
- Rakefile
|
52
73
|
- ar_cache.gemspec
|
53
74
|
- bin/activerecord-test
|
@@ -72,14 +93,11 @@ files:
|
|
72
93
|
- lib/ar_cache/marshal.rb
|
73
94
|
- lib/ar_cache/mock_table.rb
|
74
95
|
- lib/ar_cache/query.rb
|
75
|
-
- lib/ar_cache/record.rb
|
76
|
-
- lib/ar_cache/store.rb
|
77
96
|
- lib/ar_cache/table.rb
|
78
97
|
- lib/ar_cache/version.rb
|
79
98
|
- lib/ar_cache/where_clause.rb
|
80
99
|
- lib/generators/ar_cache/install_generator.rb
|
81
100
|
- lib/generators/ar_cache/templates/configuration.rb
|
82
|
-
- lib/generators/ar_cache/templates/migrate/create_ar_cache_records.rb.tt
|
83
101
|
homepage: https://github.com/OuYangJinTing/ar_cache
|
84
102
|
licenses:
|
85
103
|
- MIT
|
data/lib/ar_cache/record.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ArCache
|
4
|
-
class Record < ActiveRecord::Base # rubocop:disable Rails/ApplicationRecord
|
5
|
-
self.table_name = 'ar_cache_records'
|
6
|
-
|
7
|
-
def self.get(table_name)
|
8
|
-
find_by(table_name: table_name)
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.version(table)
|
12
|
-
(get(table.name) || store(table)).version
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.update_version(table)
|
16
|
-
record = get(table.name)
|
17
|
-
return store(table).version unless record
|
18
|
-
|
19
|
-
record.update_version
|
20
|
-
record.version
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.store(table)
|
24
|
-
record = get(table.name) || new(table_name: table.name)
|
25
|
-
record.store(table)
|
26
|
-
record
|
27
|
-
end
|
28
|
-
|
29
|
-
def store(table)
|
30
|
-
with_optimistic_retry do
|
31
|
-
self.version += 1 unless table_md5 == table.md5
|
32
|
-
self.table_md5 = table.md5
|
33
|
-
|
34
|
-
save! if changed?
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def update_version
|
39
|
-
with_optimistic_retry do
|
40
|
-
self.version += 1
|
41
|
-
save!
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
private def with_optimistic_retry
|
46
|
-
yield
|
47
|
-
rescue ::ActiveRecord::StaleObjectError
|
48
|
-
reload
|
49
|
-
retry
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/lib/ar_cache/store.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ArCache
|
4
|
-
class Store
|
5
|
-
@options = { raw: true, expires_in: ArCache::Configuration.expires_in }.freeze
|
6
|
-
|
7
|
-
class << self
|
8
|
-
delegate :delete, :delete_multi, :clear, :exist?, to: 'ArCache::Configuration.cache_store'
|
9
|
-
|
10
|
-
def write(name, value)
|
11
|
-
ArCache::Configuration.cache_store.write(name, dump(value), @options)
|
12
|
-
end
|
13
|
-
|
14
|
-
def write_multi(hash)
|
15
|
-
hash.each { |k, v| hash[k] = dump(v) }
|
16
|
-
ArCache::Configuration.cache_store.write_multi(hash, @options)
|
17
|
-
end
|
18
|
-
|
19
|
-
def read(name)
|
20
|
-
load(ArCache::Configuration.cache_store.read(name, @options))
|
21
|
-
end
|
22
|
-
|
23
|
-
def read_multi(names)
|
24
|
-
entries = ArCache::Configuration.cache_store.read_multi(*names, @options)
|
25
|
-
entries.each { |k, v| entries[k] = load(v) }
|
26
|
-
entries
|
27
|
-
end
|
28
|
-
|
29
|
-
private def dump(value)
|
30
|
-
ArCache::Configuration.coder.dump(value)
|
31
|
-
end
|
32
|
-
|
33
|
-
private def load(value)
|
34
|
-
ArCache::Configuration.coder.load(value) if value
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class CreateArCacheMonitors < ActiveRecord::Migration[<%= ActiveRecord::VERSION::MAJOR %>.<%= ActiveRecord::VERSION::MINOR %>]
|
4
|
-
def change
|
5
|
-
create_table :ar_cache_records do |t|
|
6
|
-
t.string :table_name, null: false
|
7
|
-
t.string :table_md5, null: false, limit: 32, default: '0' * 32
|
8
|
-
t.integer :version, null: false, default: 0
|
9
|
-
t.integer :lock_version, null: false, default: 0
|
10
|
-
|
11
|
-
t.timestamps null: false
|
12
|
-
|
13
|
-
t.index :table_name, unique: true
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|