Skip to content

Instantly share code, notes, and snippets.

@lucasmartins
Created June 13, 2016 12:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lucasmartins/83b227140dd319c670b71635fd3aca2e to your computer and use it in GitHub Desktop.
Save lucasmartins/83b227140dd319c670b71635fd3aca2e to your computer and use it in GitHub Desktop.
Ruby in memory processing "cache", used to replace Redis.
require 'thread_safe'
# A process wide cache for in memory computing
class MX::Core::Cache
def self.init!
@data = ThreadSafe::Cache.new unless @data
end
def self.truncate!
@data = ThreadSafe::Cache.new if Rails.env.test?
end
def self.destroy_bucket(keyspace)
@data[keyspace] = nil
end
def self.add(bucket='default', key, value)
# puts "add [#{value}] to #{bucket}:#{key}"
@data[bucket] = ThreadSafe::Cache.new unless @data[bucket]
if @data[bucket][key]
@data[bucket][key] += value
else
@data[bucket][key] = value
end
end
def self.set(bucket='default', key, value)
@data[bucket] = ThreadSafe::Cache.new unless @data[bucket]
@data[bucket][key] = value
end
def self.get(bucket='default', key)
# puts "get #{bucket}:#{key}"
begin
# puts "got #{@data[bucket][key]}"
@data[bucket][key]
rescue Exception => e
nil
end
end
def self.bucket(bucket='default')
begin
@data[bucket]
rescue Exception => e
nil
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment