Last active
August 29, 2015 13:57
-
-
Save xdougx/9786370 to your computer and use it in GitHub Desktop.
Simple Redis Persistence with Namespace and Keys
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |
Vou dar uma pesquisada nesses métodos!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Se você utilizar as estruturas de hash do redis, você "economizaria" um pouco, pegando ou mandando apenas o que precisa e não todo o objeto novamente.
Basicamente trocaria o set por hset e get por hget (ou hgetall, hmget, hmset).