level 1
季葛0IM
楼主
想要在Redis中缓存记录数据,做到更新别个项目的缓存,所以重新看了一下Rails缓存部分的代码。发现是有重载缓存的接口的。
首先我们先重载缓存部分的代码,例如:
module MyGem
class MyCacheStore < ActiveSupport::Cache::FileStore
...
end
end
如果有很多都需要自定义的话就直接重载ActiveSupport::Cache::Store我这里重载的是FileStore因为我需要直接使用FileStore中大部分的代码。
接下来重载其中的部分方法,比如我主要重载的是entry操作部分。
def read_entry(key, options)
saved = @redis.get(key_file_path(key))
saved = saved ? JSON.parse(saved) : nil
case
when saved.nil? then nil
when Time.at(saved['expires_at'].to_i) > Time.now
delete_entry(key, options)
nil
else super(key, options)
end
end
def write_entry(key, entry, options)
if super(key, entry, options)
c_key = key_file_path(key)
@redis.set(c_key,
{expires_at: (options[:expires_in] || 5.hours).since.to_i}.to_json)
end
end
def delete_entry(key, options)
c_key = key_file_path(key)
_expire_key_on_redis(c_key)
super(key, options)
end
写好新的CacheStore类以后就是最后一步了,在我们的Rails项目的config中加入一下面代码以表明我们将要使用自定义的CacheStore.
config.cache_store = MyGem::MyCacheStore.new('tmp/cache')
之后项目中就使用的我们自定义的CacheStore了。
原文: http://www.myboka.com/articles/52a5c83261192c8131000004
2014年04月07日 09点04分
1
首先我们先重载缓存部分的代码,例如:
module MyGem
class MyCacheStore < ActiveSupport::Cache::FileStore
...
end
end
如果有很多都需要自定义的话就直接重载ActiveSupport::Cache::Store我这里重载的是FileStore因为我需要直接使用FileStore中大部分的代码。
接下来重载其中的部分方法,比如我主要重载的是entry操作部分。
def read_entry(key, options)
saved = @redis.get(key_file_path(key))
saved = saved ? JSON.parse(saved) : nil
case
when saved.nil? then nil
when Time.at(saved['expires_at'].to_i) > Time.now
delete_entry(key, options)
nil
else super(key, options)
end
end
def write_entry(key, entry, options)
if super(key, entry, options)
c_key = key_file_path(key)
@redis.set(c_key,
{expires_at: (options[:expires_in] || 5.hours).since.to_i}.to_json)
end
end
def delete_entry(key, options)
c_key = key_file_path(key)
_expire_key_on_redis(c_key)
super(key, options)
end
写好新的CacheStore类以后就是最后一步了,在我们的Rails项目的config中加入一下面代码以表明我们将要使用自定义的CacheStore.
config.cache_store = MyGem::MyCacheStore.new('tmp/cache')
之后项目中就使用的我们自定义的CacheStore了。
原文: http://www.myboka.com/articles/52a5c83261192c8131000004