Skip to content

Instantly share code, notes, and snippets.

@xdougx
Last active August 29, 2015 13:57
Show Gist options
  • Save xdougx/9786370 to your computer and use it in GitHub Desktop.
Save xdougx/9786370 to your computer and use it in GitHub Desktop.
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
@vyper
Copy link

vyper commented Mar 26, 2014

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).

@xdougx
Copy link
Author

xdougx commented Mar 26, 2014

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