Simple Redis Persistence with Namespace and Keys
# Classe que faz uma simples persistencia para o Redis, usando de métodos simples.
# @author Douglas Rossignolli
# @version 0.0.5
class RedisPersistence
attr_accessor :redis
def initialize
if Rails.env.production?
ENV["REDISTOGO_URL"] ||= "<redis server uri>"
uri = URI.parse(ENV["REDISTOGO_URL"])
@redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
else
# assume que você tem instalado no seu ambiente o redis padrão rodando na porta padrão
@redis = Redis.new
end
end
# O save usa do namespace para salvar uma nova chave ou atualizar
# @param namespace [String]
# @param key [String]
# @param data [Object]
def save namespace, key, data
actual_data = JSON.parse(@redis.get namespace)
actual_data[key] = data.to_json
@redis.set namespace, actual_data.to_json
end
# O delete recebe um name space e remove uma chave determinada
# @param namespace [String]
# @param key [String]
def delete namespace, key
actual_data = JSON.parse(@redis.get namespace)
actual_data.delete key
@redis.set namespace, actual_data.to_json
end
# O find procura em um namespace uma determinada chave
# @param namespace [String]
# @param key [String]
# @return [Hash]
def find namespace, key
actual_data = JSON.parse(@redis.get namespace)
actual_data[key]
end
# O exists? verifica se uma determina chave existe dentro de um determinado namespace
# @param namespace [String]
# @param key [String]
# @return [Boolean]
def exists? namespace, key
actual_data = JSON.parse(@redis.get namespace)
actual_data.key? key
end
end