class Lux::Cache
Public Class Methods
new()
click to toggle source
# File lib/lux/cache/cache.rb, line 5 def initialize @server = Lux::Cache::MemoryCache.new end
Public Instance Methods
[](key)
click to toggle source
# File lib/lux/cache/cache.rb, line 107 def [] key @server.get key.to_s end
[]=(key, value)
click to toggle source
# File lib/lux/cache/cache.rb, line 102 def []= key, value @server.set key.to_s, value value end
delete(key, data=nil)
click to toggle source
# File lib/lux/cache/cache.rb, line 49 def delete key, data=nil @server.delete(key) end
fetch(key, opts={}) { || ... }
click to toggle source
# File lib/lux/cache/cache.rb, line 53 def fetch key, opts={} opts = { ttl: opts } unless opts.is_a?(Hash) opts = opts.to_opts(:ttl, :force, :log, :if) return yield if opts.if.is_a?(FalseClass) opts.ttl = opts.ttl.to_i if opts.ttl opts.log ||= Lux.config(:log_to_stdout) unless opts.log.class == FalseClass opts.force ||= Lux.current.try(:no_cache?) unless opts.force.class == FalseClass @server.delete key if opts.force Lux.log " Cache.fetch.get #{key} (ttl: #{opts.ttl.or(:nil)})".green if opts.log data = @server.fetch key, opts.ttl do speed = Lux.speed { data = yield } Lux.log " Cache.fetch.SET #{key} len:#{data.to_s.length} (#{speed})".red if opts.log data end data end
generate_key(*data)
click to toggle source
# File lib/lux/cache/cache.rb, line 83 def generate_key *data keys = [] for el in [data].flatten keys.push el.id if el.respond_to?(:id) if el.respond_to?(:updated_at) keys.push el.updated_at elsif el.respond_to?(:created_at) keys.push el.created_at else keys.push el.to_s end end key = keys.join('-') Crypt.sha1(key) end
is_available?()
click to toggle source
# File lib/lux/cache/cache.rb, line 78 def is_available? set('lux-test', 9) get('lux-test') == 9 end
read(key)
click to toggle source
# File lib/lux/cache/cache.rb, line 32 def read key return nil if (Lux.current.no_cache? rescue false) @server.get(key) end
Also aliased as: get
read_multi(*args)
click to toggle source
# File lib/lux/cache/cache.rb, line 38 def read_multi *args @server.get_multi(*args) end
Also aliased as: get_multi
server()
click to toggle source
# File lib/lux/cache/cache.rb, line 28 def server @server end
server=(name)
click to toggle source
sert cache server Lux.cache.server = :memory Lux.cache.server = :memcached Lux.cache.server = Dalli::Client.new('localhost:11211', { :namespace=>Digest::MD5.hexdigest(__FILE__), :compress => true, :expires_in => 1.hour })
# File lib/lux/cache/cache.rb, line 13 def server= name @server = if name.is_a?(Symbol) if name == :memcached require 'dalli' Dalli::Client.new('127.0.0.1:11211', { :namespace=>Digest::MD5.hexdigest(__FILE__)[0,4], :compress => true, :expires_in => 1.hour }) else "Lux::Cache::#{name.to_s.classify}Cache".constantize.new end else name end fetch('cache-test') { true } end
write(key, data, ttl=nil)
click to toggle source
# File lib/lux/cache/cache.rb, line 43 def write key, data, ttl=nil ttl = ttl.to_i if ttl @server.set(key, data, ttl) end
Also aliased as: set