2012-02-27 1 views
1

У меня есть приложение Rails 3.1, работающее на сервере mysql для хранения данных. 90% данных в приложении отлично вписываются в реляционную базу данных.рельсы с MySQL И небольшой магазин redis

Другие 10% - довольно большой хэш, который мне нужно, чтобы вытащить, изменить и вернуть обратно довольно быстро. Это довольно большой запрос в mysql, чтобы собрать все эти части данных по нескольким таблицам, но как только я его однажды, я решил, что сохраню его как хэш, и пользователь сможет взаимодействовать с хэшем и вносить изменения. Эти изменения никогда не сохраняются в mysql, поскольку mysql им не нужен.

Итак, я решил добавить redis в мое приложение для рельсов, а драгоценный камень redis-objects был рекомендован другом.

Я создал свой active_hash модель и контроллер, как так

 
class ActiveHash < ActiveRecord::Base 
    include Redis::Objects 
end 

class ActiveHashesController < ApplicationController 

    def show 
    #this is a big query with a bunch of merges, but simplified here as it isn't important 
    active = Game.find(params[:id]) 

    active_hash_in_redis = ActiveHash.new() 
     if active_hash_in_redis.save 
      render :json => active_hash 
     else 
      render :text => "didn't save" 
     end 
    end 

end 

, когда я перейти к active_hashes/ид, я получаю ошибку, что нет таблицы active_hashes MySQL, который является правильным, потому что, как предполагается, быть моим redis db, как определено в модели.

Может ли кто-нибудь объяснить мне, как использовать оба dbs в моем приложении, и/или указать мне на учебник по этому поводу? Я ничего не смог найти. Является ли использование Redis-Objects неправильным способом для этого? Любые другие рекомендации?

ответ

1

Оказалось, что это немного путается с моей стороны, но, надеюсь, это помогает кому-то еще.

Я не закончил использовать redis-objects, gem, я установил redis-rb с gem redis. Затем я конфигурационный файл как

 
require 'redis' 
$redis = Redis.new() 

Моя модель фактически пустой в данный момент, на мой контроллер настройки, я использовал

 
class ActiveHashesController < ApplicationController 

    def show 
    #this is a big query with a bunch of merges, but simplified here as it isn't important 
    active = Game.find(params[:id]) 

    $redis.set params[:id], active.to_json 
    get_game = $redis.get params[:id] 
    render :json => get_game 

     end 
    end 

end