second_level_cache 1.6.0 → 1.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e4f99ac985dd67cff8d2f43791e8c10d3b3dd16c
4
+ data.tar.gz: 01ba1af838f68cb8b0013668e17a42a8d1c8801e
5
+ SHA512:
6
+ metadata.gz: 5ae1f44bcc04c99d7c7a356c165eba029ffa8039a9e02270a5ef28132e66411c2fe5e5ac16d707c90831716e358a180d6d50f87032109c33c19197d3c035bbd5
7
+ data.tar.gz: 8276594d2e921ab5aad1d38b254e3ab1f0d6b21c5839c5f6c4c694a914baf1942704c5415330044122534ee603377b4ed6de5fa57b76a9492d6e51a8aaf5ce4c
data/CHANGELOG.md CHANGED
@@ -39,3 +39,7 @@
39
39
  * [write through cache]
40
40
  * [disable SecondLevelCache for spicial model]
41
41
  * [only cache `SELECT *` query]
42
+
43
+ 1.6.1
44
+ -----
45
+ * [Fix bug: undefined method `select_all_column?' for []:ActiveRecord::Relation] by sishen
data/README.md CHANGED
@@ -1,14 +1,16 @@
1
1
  # SecondLevelCache
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/second_level_cache.png)](http://badge.fury.io/rb/second_level_cache)
4
+ [![Dependency Status](https://gemnasium.com/csdn-dev/second_level_cache.png)](https://gemnasium.com/csdn-dev/second_level_cache)
5
+ [![Build Status](https://travis-ci.org/csdn-dev/second_level_cache.png?branch=master)](https://travis-ci.org/csdn-dev/second_level_cache)
6
+ [![Code Climate](https://codeclimate.com/github/csdn-dev/second_level_cache.png)](https://codeclimate.com/github/csdn-dev/second_level_cache)
7
+
3
8
  SecondLevelCache is a write-through and read-through caching library inspired by Cache Money and cache_fu, support only Rails3 and ActiveRecord.
4
9
 
5
10
  Read-Through: Queries by ID, like `current_user.articles.find(params[:id])`, will first look in cache store and then look in the database for the results of that query. If there is a cache miss, it will populate the cache.
6
11
 
7
12
  Write-Through: As objects are created, updated, and deleted, all of the caches are automatically kept up-to-date and coherent.
8
13
 
9
- ## Risk
10
-
11
- SecondLevelCache is not fully test and verify in production enviroment right now. Use it at your own risk.
12
14
 
13
15
  ## Install
14
16
 
@@ -49,40 +51,115 @@ user = User.find 1
49
51
  user.second_level_cache_key # We will get the key looks like "slc/user/1/0"
50
52
  ```
51
53
 
54
+ Expires cache:
55
+
56
+ ```ruby
57
+ user = User.find(1)
58
+ user.expire_second_level_cache
59
+ ```
60
+ or expires cache using class method:
61
+ ```ruby
62
+ User.expire_second_level_cache(1)
63
+ ```
64
+
52
65
  Disable SecondLevelCache:
53
66
 
54
67
  ```ruby
55
- User.without_second_level_cache do
56
- user = User.find 1
57
- # ...
58
- end
68
+ User.without_second_level_cache do
69
+ user = User.find 1
70
+ # ...
71
+ end
59
72
  ```
60
73
 
61
74
  Only `SELECT *` query will be cached:
62
75
 
63
76
  ```ruby
64
- # this query will NOT be cached
65
- User.select("id, name").find(1)
77
+ # this query will NOT be cached
78
+ User.select("id, name").find(1)
66
79
  ```
67
80
 
68
81
  Notice:
69
82
 
70
83
  * SecondLevelCache cache by model name and id, so only find_one query will work.
71
- * only equal conditions query WILL get cache; and SQL string query like `User.where("name = 'Hooopo'").find(1)` WILL NOT work.
84
+ * Only equal conditions query WILL get cache; and SQL string query like `User.where("name = 'Hooopo'").find(1)` WILL NOT work.
85
+ * SecondLevelCache sync cache after transaction commit:
86
+
87
+ ```ruby
88
+ # user and account's write_second_level_cache operation will invoke after the logger.
89
+ ActiveRecord::Base.transaction do
90
+ user.save
91
+ account.save
92
+ Rails.logger.info "info"
93
+ end # <- Cache write
94
+
95
+ # if you want to do something after user and account's write_second_level_cache operation, do this way:
96
+ ActiveRecord::Base.transaction do
97
+ user.save
98
+ account.save
99
+ end # <- Cache write
100
+ Rails.logger.info "info"
101
+ ```
102
+
103
+ ## Configure
104
+
105
+ In production env, we recommend to use [Dalli](https://github.com/mperham/dalli) as Rails cache store.
106
+ ```ruby
107
+ config.cache_store = [:dalli_store, APP_CONFIG["memcached_host"], {:namespace => "ns", :compress => true}]
108
+ ```
72
109
 
73
- ## configure
110
+ ## Tips:
74
111
 
75
- cache_store: Default is Rails.cache
76
- logger: Default is Rails.logger
77
- cache_key_prefix: Avoid cache key conflict with other application, Default is 'slc'
112
+ * When you want to clear only second level cache apart from other cache for example fragment cache in cache store,
113
+ you can only change the `cache_key_prefix`:
78
114
 
79
- You can config like this:
115
+ ```ruby
116
+ SecondLevelCache.configure.cache_key_prefix = "slc1"
117
+ ```
118
+ * When schema of your model changed, just change the `version` of the speical model, avoding clear all the cache.
80
119
 
81
120
  ```ruby
82
- # config/initializers/second_level_cache.rb
83
- SecondLevelCache.configure do |config|
84
- config.cache_store = ActiveSupport::Cache::MemoryStore.new
85
- config.logger = Logger.new($stdout)
86
- config.cache_key_prefix = 'domain'
121
+ class User < ActiveRecord::Base
122
+ acts_as_cached(:version => 2, :expires_in => 1.week)
87
123
  end
88
124
  ```
125
+
126
+ * It provides a great feature, not hits db when fetching record via unique key(not primary key).
127
+
128
+ ```ruby
129
+ # this will fetch from cache
130
+ user = User.fetch_by_uniq_key("hooopo", :nick_name)
131
+
132
+ # this also fetch from cache
133
+ user = User.fetch_by_uniq_key!("hooopo", :nick_name) # this will raise `ActiveRecord::RecordNotFound` Exception when nick name not exists.
134
+ ```
135
+
136
+ ## Contributors
137
+
138
+ * [chloerei](https://github.com/chloerei)
139
+ * [reyesyang](https://github.com/reyesyang)
140
+ * [hooopo](https://github.com/hooopo)
141
+ * [sishen](https://github.com/sishen)
142
+
143
+ ## License
144
+
145
+ MIT License
146
+
147
+ Permission is hereby granted, free of charge, to any person obtaining
148
+ a copy of this software and associated documentation files (the
149
+ "Software"), to deal in the Software without restriction, including
150
+ without limitation the rights to use, copy, modify, merge, publish,
151
+ distribute, sublicense, and/or sell copies of the Software, and to
152
+ permit persons to whom the Software is furnished to do so, subject to
153
+ the following conditions:
154
+
155
+ The above copyright notice and this permission notice shall be
156
+ included in all copies or substantial portions of the Software.
157
+
158
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
159
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
160
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
161
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
162
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
163
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
164
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
165
+
@@ -9,7 +9,7 @@ require 'second_level_cache/active_record/has_one_association'
9
9
  ActiveRecord::Base.send(:include, SecondLevelCache::Mixin)
10
10
  ActiveRecord::Base.send(:include, SecondLevelCache::ActiveRecord::Base)
11
11
  ActiveRecord::Base.send(:extend, SecondLevelCache::ActiveRecord::FetchByUniqKey)
12
- ActiveRecord::FinderMethods.send(:include, SecondLevelCache::ActiveRecord::FinderMethods)
12
+ ActiveRecord::Relation.send(:include, SecondLevelCache::ActiveRecord::FinderMethods)
13
13
  ActiveRecord::Base.send(:include, SecondLevelCache::ActiveRecord::Persistence)
14
14
  ActiveRecord::Associations::BelongsToAssociation.send(:include, SecondLevelCache::ActiveRecord::Associations::BelongsToAssociation)
15
15
  ActiveRecord::Associations::HasOneAssociation.send(:include, SecondLevelCache::ActiveRecord::Associations::HasOneAssociation)
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module SecondLevelCache
3
- VERSION = "1.6.0"
3
+ VERSION = "1.6.1"
4
4
  end
@@ -21,7 +21,7 @@ module SecondLevelCache
21
21
  def acts_as_cached(options = {})
22
22
  @second_level_cache_enabled = true
23
23
  @second_level_cache_options = options
24
- @second_level_cache_options[:expires_in] ||= 1.day
24
+ @second_level_cache_options[:expires_in] ||= 1.week
25
25
  @second_level_cache_options[:version] ||= 0
26
26
  end
27
27
 
@@ -1,5 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require File.expand_path('../lib/second_level_cache/version', __FILE__)
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
 
4
6
  Gem::Specification.new do |gem|
5
7
  gem.authors = ["wangxz"]
@@ -15,9 +17,16 @@ Gem::Specification.new do |gem|
15
17
 
16
18
  gem.homepage = "https://github.com/csdn-dev/second_level_cache"
17
19
 
18
- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- gem.files = `git ls-files`.split("\n")
20
- gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ gem.files = Dir.glob("lib/**/*.rb") + [
21
+ "README.md",
22
+ "Rakefile",
23
+ "Gemfile",
24
+ "init.rb",
25
+ "CHANGELOG.md",
26
+ "second_level_cache.gemspec"
27
+ ]
28
+ gem.test_files = Dir.glob("test/**/*.rb")
29
+ gem.executables = gem.files.grep(%r{^bin/})
21
30
  gem.name = "second_level_cache"
22
31
  gem.require_paths = ["lib"]
23
32
  gem.version = SecondLevelCache::VERSION
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+ require 'active_record'
3
+
4
+ class RequireTest < Test::Unit::TestCase
5
+ def setup
6
+ ActiveRecord::Relation
7
+ require 'active_record/test_helper'
8
+ @user = User.create :name => 'Dingding Ye', :email => 'yedingding@gmail.com'
9
+ end
10
+
11
+ def test_should_find_the_user
12
+ assert_equal @user, User.find(@user.id)
13
+ end
14
+ end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: second_level_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
5
- prerelease:
4
+ version: 1.6.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - wangxz
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-10-08 00:00:00.000000000 Z
11
+ date: 2013-03-11 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activesupport
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: activerecord
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,33 +41,29 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: sqlite3
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rake
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  description: Write Through and Read Through caching library inspired by CacheMoney
@@ -83,24 +74,23 @@ executables: []
83
74
  extensions: []
84
75
  extra_rdoc_files: []
85
76
  files:
86
- - .gitignore
87
- - CHANGELOG.md
88
- - Gemfile
89
- - README.md
90
- - Rakefile
91
- - init.rb
92
- - lib/second_level_cache.rb
93
- - lib/second_level_cache/active_record.rb
94
77
  - lib/second_level_cache/active_record/base.rb
95
78
  - lib/second_level_cache/active_record/belongs_to_association.rb
96
79
  - lib/second_level_cache/active_record/fetch_by_uniq_key.rb
97
80
  - lib/second_level_cache/active_record/finder_methods.rb
98
81
  - lib/second_level_cache/active_record/has_one_association.rb
99
82
  - lib/second_level_cache/active_record/persistence.rb
83
+ - lib/second_level_cache/active_record.rb
100
84
  - lib/second_level_cache/arel/wheres.rb
101
85
  - lib/second_level_cache/config.rb
102
86
  - lib/second_level_cache/record_marshal.rb
103
87
  - lib/second_level_cache/version.rb
88
+ - lib/second_level_cache.rb
89
+ - README.md
90
+ - Rakefile
91
+ - Gemfile
92
+ - init.rb
93
+ - CHANGELOG.md
104
94
  - second_level_cache.gemspec
105
95
  - test/active_record/base_test.rb
106
96
  - test/active_record/belongs_to_association_test.rb
@@ -115,34 +105,49 @@ files:
115
105
  - test/active_record/second_level_cache_test.rb
116
106
  - test/active_record/test_helper.rb
117
107
  - test/record_marshal_test.rb
108
+ - test/require_test.rb
118
109
  - test/test_helper.rb
119
110
  homepage: https://github.com/csdn-dev/second_level_cache
120
111
  licenses: []
112
+ metadata: {}
121
113
  post_install_message:
122
114
  rdoc_options: []
123
115
  require_paths:
124
116
  - lib
125
117
  required_ruby_version: !ruby/object:Gem::Requirement
126
- none: false
127
118
  requirements:
128
- - - ! '>='
119
+ - - '>='
129
120
  - !ruby/object:Gem::Version
130
121
  version: '0'
131
122
  required_rubygems_version: !ruby/object:Gem::Requirement
132
- none: false
133
123
  requirements:
134
- - - ! '>='
124
+ - - '>='
135
125
  - !ruby/object:Gem::Version
136
126
  version: '0'
137
127
  requirements: []
138
128
  rubyforge_project:
139
- rubygems_version: 1.8.24
129
+ rubygems_version: 2.0.0
140
130
  signing_key:
141
- specification_version: 3
142
- summary: ! 'SecondLevelCache is a write-through and read-through caching library inspired
131
+ specification_version: 4
132
+ summary: 'SecondLevelCache is a write-through and read-through caching library inspired
143
133
  by Cache Money and cache_fu, support only Rails3 and ActiveRecord. Read-Through:
144
134
  Queries by ID, like current_user.articles.find(params[:id]), will first look in
145
135
  cache store and then look in the database for the results of that query. If there
146
136
  is a cache miss, it will populate the cache. Write-Through: As objects are created,
147
137
  updated, and deleted, all of the caches are automatically kept up-to-date and coherent.'
148
- test_files: []
138
+ test_files:
139
+ - test/active_record/base_test.rb
140
+ - test/active_record/belongs_to_association_test.rb
141
+ - test/active_record/finder_methods_test.rb
142
+ - test/active_record/model/book.rb
143
+ - test/active_record/model/image.rb
144
+ - test/active_record/model/post.rb
145
+ - test/active_record/model/topic.rb
146
+ - test/active_record/model/user.rb
147
+ - test/active_record/persistence_test.rb
148
+ - test/active_record/polymorphic_association_test.rb
149
+ - test/active_record/second_level_cache_test.rb
150
+ - test/active_record/test_helper.rb
151
+ - test/record_marshal_test.rb
152
+ - test/require_test.rb
153
+ - test/test_helper.rb
data/.gitignore DELETED
@@ -1,14 +0,0 @@
1
- /.bundle
2
- /nbproject/*
3
- /Gemfile.lock
4
- /.rvmrc
5
- /doc
6
- /pkg
7
- /tags
8
- /spec/log
9
- *.log
10
- *.gem
11
- *.sqlite3
12
- *.swp
13
- *.swo
14
-