cache_driver 0.3.0 → 0.3.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
2
  SHA1:
3
- metadata.gz: 402b06942adc9a03461be8eed481772cf10c1b09
4
- data.tar.gz: d9d317fc326141587e83dd42483387c42475e27c
3
+ metadata.gz: 4d83400081bd047d18a81a8963c3ff153907b8e6
4
+ data.tar.gz: 2ad7f261510c4a34f30a11d28e70029fb9f1927b
5
5
  SHA512:
6
- metadata.gz: cd99e95e14c5261382c8e3e3ee89d6e7db524205ba4c9ee6022e580ad8a6613c2e509ce2a6d7af603cb84178a694c26a10af64e75588e7da21e0c73e16d1ad53
7
- data.tar.gz: 47059c2b1880671f93c627f4270acce731339b29ca9296b72e66e9119dbe6d75ecf70a47c7b4ba7386c169d0dabc8f48d65782117b15edc52ca5a1df8a298874
6
+ metadata.gz: 7031b3a78d2e6295d3007b0d6083cebd12b9224c57c21e7e7d11b7a874ce422bee03be770df6b53509e214317ebdd8feceb6ef89f9f4a16c1d5a318c92661ff0
7
+ data.tar.gz: 3921d0cf509f78461e581b0e6e18114a1d13dc9b1ab63f7b24afdb02175953859cdac74b3ef4731bbafce01a501febc2618dbc76773bffe18a1a7723c717dd50
data/README.md CHANGED
@@ -20,18 +20,17 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- Your can create a config file to set storage type
24
-
25
- $ touch config/initializers/cache_driver.rb
23
+ Add following code to environments/development.rb or environments/production.rb
26
24
 
27
25
  ```ruby
28
- # CacheDriver Config
29
- # to make model save data to file or redis not database
30
-
31
26
  CacheDriver.setup do |config|
32
27
  # set cache store type, :file or :redis
33
- # default is :file
34
28
  config.store = :file
29
+ config.file_dir = Rails.root.join('tmp', 'cache')
30
+ #config.store = :redis
31
+ #config.redis_host = "127.0.0.1"
32
+ #config.redis_port = 6379
33
+ #config.redis_namespace = "namespace"
35
34
  end
36
35
  ```
37
36
 
@@ -43,6 +42,10 @@ Just define model like below
43
42
 
44
43
  ```ruby
45
44
  class CacheModel < CacheRecord
45
+ # attribute name which is made as key to cache data
46
+ def self.key_attr
47
+ "attr_name"
48
+ end
46
49
  end
47
50
  ```
48
51
 
@@ -51,7 +54,7 @@ So you can use this model just like other ActiveRecord instance in controllers l
51
54
  ```ruby
52
55
  cache_models = CacheModel.find_all # get all instance in cache
53
56
 
54
- cache_model = CacheModel.find_by_id params[:id] # get instance with id
57
+ cache_model = CacheModel.find_by_key key # get instance with key
55
58
 
56
59
  cache_model.save! # save this instance to cache
57
60
 
@@ -63,11 +66,11 @@ Just override the two methods below
63
66
 
64
67
  ```ruby
65
68
  def to_cache
66
- # do something you want to cache this model
69
+ # return a hashmap which you want to cache for this model
67
70
  end
68
71
 
69
- def self.from_cache
70
- # do something you want to get model from cache
72
+ def self.from_cache(obj)
73
+ # return this model instance from a hashmap obj include data you cached
71
74
  end
72
75
  ```
73
76
 
@@ -1,20 +1,19 @@
1
1
  class CacheRecord
2
- @@cache_util = CacheDriver.store_file? ? FileCacheUtil : CacheDriver.store_redis? ? RedisCacheUtil : nil
3
2
 
4
3
  def self.find_all
5
- @@cache_util.read_all CacheUtil.class_to_type(self)
4
+ CacheRecord.cache_util.read_all CacheUtil.class_to_type(self)
6
5
  end
7
6
 
8
7
  def self.find_by_key(key)
9
- @@cache_util.read CacheUtil.class_to_type(self), id
8
+ CacheRecord.cache_util.read CacheUtil.class_to_type(self), key
10
9
  end
11
10
 
12
11
  def save!
13
- @@cache_util.write CacheUtil.class_to_type(self.class), self
12
+ CacheRecord.cache_util.write CacheUtil.class_to_type(self.class), self.send(self.class.key_attr), self
14
13
  end
15
14
 
16
15
  def destroy
17
- @@cache_util.delete CacheUtil.class_to_type(self.class), self.id
16
+ CacheRecord.cache_util.delete CacheUtil.class_to_type(self.class), self.send(self.class.key_attr)
18
17
  end
19
18
 
20
19
  def to_cache
@@ -28,4 +27,9 @@ class CacheRecord
28
27
  end
29
28
  ins
30
29
  end
30
+
31
+ private
32
+ def self.cache_util
33
+ CacheDriver.store_file? ? FileCacheUtil : CacheDriver.store_redis? ? RedisCacheUtil : nil
34
+ end
31
35
  end
@@ -2,7 +2,7 @@ class CacheUtil
2
2
 
3
3
  class << self
4
4
  def write(type, key, data)
5
- puts "[CACHE] save #{type} ##{key} to cache: #{data}"
5
+ puts "[CACHE] save #{type} ##{key} to cache"
6
6
  end
7
7
 
8
8
  def read(type, key)
@@ -3,6 +3,12 @@ module CacheDriver
3
3
  attr_accessor :store, :file_dir, :redis_host, :redis_port, :redis_namespace
4
4
  end
5
5
 
6
+ @@config = Config.new
7
+
8
+ def self.config
9
+ @@config
10
+ end
11
+
6
12
  def self.configed?
7
13
  @@config.store
8
14
  end
@@ -16,7 +22,6 @@ module CacheDriver
16
22
  end
17
23
 
18
24
  def self.setup
19
- @@config = Config.new
20
25
  yield @@config
21
26
  end
22
27
 
@@ -1,15 +1,14 @@
1
1
  class FileCacheUtil < CacheUtil
2
- @@file_dir = CacheDriver.file_dir
3
2
 
4
3
  class << self
5
4
  def write(type, key, data)
6
- super type, data
5
+ super type, key, data
7
6
 
8
- dir = @@file_dir.join type_to_dir(type)
7
+ dir = file_dir.join type_to_dir(type)
9
8
  Dir.mkdir dir unless Dir.exist? dir
10
9
 
11
10
  file = File.new dir.join("#{key}.cache"), 'w'
12
- file.puts "#{Time.now} --> #{data.to_cache}"
11
+ file.puts "#{Time.now} --> #{data.to_cache.to_json}"
13
12
  file.close
14
13
 
15
14
  key
@@ -18,7 +17,7 @@ class FileCacheUtil < CacheUtil
18
17
  def read(type, key)
19
18
  super type, key
20
19
 
21
- dir = @@file_dir.join type_to_dir(type)
20
+ dir = file_dir.join type_to_dir(type)
22
21
  Dir.mkdir dir unless Dir.exist? dir
23
22
 
24
23
  file_path = dir.join("#{key}.cache")
@@ -38,7 +37,7 @@ class FileCacheUtil < CacheUtil
38
37
  def read_all(type)
39
38
  super type
40
39
 
41
- dir = @@file_dir.join type_to_dir(type)
40
+ dir = file_dir.join type_to_dir(type)
42
41
  Dir.mkdir dir unless Dir.exist? dir
43
42
  dir_scaner = Dir.new dir
44
43
 
@@ -63,7 +62,7 @@ class FileCacheUtil < CacheUtil
63
62
  def delete(type, key)
64
63
  super type, key
65
64
 
66
- dir = @@file_dir.join type_to_dir(type)
65
+ dir = file_dir.join type_to_dir(type)
67
66
  return true unless Dir.exist? dir
68
67
 
69
68
  file_path = dir.join("#{key}.cache")
@@ -71,5 +70,10 @@ class FileCacheUtil < CacheUtil
71
70
  File.delete file_path
72
71
  true
73
72
  end
73
+
74
+ private
75
+ def file_dir
76
+ CacheDriver.config.file_dir
77
+ end
74
78
  end
75
79
  end
@@ -1,25 +1,23 @@
1
1
  class RedisCacheUtil < CacheUtil
2
- @@redis = Redis.new :host => CacheDriver.redis_host, :port => CacheDriver.redis_port
3
- @@namespace = CacheDriver.redis_namespace
4
2
 
5
3
  class << self
6
4
  def write(type, key, data)
7
- super type, data
5
+ super type, key, data
8
6
 
9
- res = @@redis.set "#{@@namespace}:#{type_to_dir(type)}##{key}", "#{Time.now} --> #{data.to_cache}"
7
+ res = redis.set "#{namespace}:#{type_to_dir(type)}##{key}", "#{Time.now} --> #{data.to_cache.to_json}"
10
8
  res == "OK" ? key : nil
11
9
  end
12
10
 
13
11
  def read(type, key)
14
12
  super type, key
15
13
 
16
- content = @@redis.get("#{@@namespace}:#{type_to_dir(type)}##{key}")
14
+ content = redis.get("#{namespace}:#{type_to_dir(type)}##{key}")
17
15
  unless content
18
16
  puts "cache #{type} ##{key} data miss"
19
17
  return nil
20
18
  end
21
19
 
22
- data_str = file.read.split(" --> ")[1]
20
+ data_str = content.split(" --> ")[1]
23
21
  unless data_str
24
22
  puts "cache #{type} ##{key} data miss"
25
23
  return nil
@@ -32,15 +30,16 @@ class RedisCacheUtil < CacheUtil
32
30
  def read_all(type)
33
31
  super type
34
32
 
33
+ r = self.redis
35
34
  data = []
36
- @@redis.keys("#{@@namespace}:#{type_to_dir(type)}#*").each do |key|
37
- content = @@redis.get(key)
35
+ r.keys("#{namespace}:#{type_to_dir(type)}#*").each do |key|
36
+ content = r.get(key)
38
37
  unless content
39
38
  puts "cache #{key} data miss"
40
39
  next
41
40
  end
42
41
 
43
- data_str = file.read.split(" --> ")[1]
42
+ data_str = content.split(" --> ")[1]
44
43
  unless data_str
45
44
  puts "cache #{key} data miss"
46
45
  next
@@ -56,8 +55,17 @@ class RedisCacheUtil < CacheUtil
56
55
  def delete(type, key)
57
56
  super type, key
58
57
 
59
- res = @@redis.del("#{@@namespace}:#{type_to_dir(type)}##{key}")
58
+ res = redis.del("#{namespace}:#{type_to_dir(type)}##{key}")
60
59
  res == 1
61
60
  end
61
+
62
+ private
63
+ def redis
64
+ Redis.new :host => CacheDriver.config.redis_host, :port => CacheDriver.config.redis_port
65
+ end
66
+
67
+ def namespace
68
+ CacheDriver.config.redis_namespace
69
+ end
62
70
  end
63
71
  end
@@ -1,3 +1,3 @@
1
1
  module CacheDriver
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
data/lib/cache_driver.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require "redis"
2
+
1
3
  require "cache_driver/version"
2
4
  require "cache_driver/config"
3
5
  require "cache_driver/cache_record"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cache_driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - goshan