xdougx
3/26/2014 - 3:45 PM

Simple Redis Persistence with Namespace and Keys

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