nel modello Foo probabilmente si desidera qualcosa di simile
class Foo < ActiveRecord::Base
def self.find_some_foo(foo_id)
Rails.cache.fetch("foo_#{foo_id}", expires_in: 7.days) do
begin
self.where(:id => foo_id)
rescue Exception => e
logger.info "Exception fetching Foo ID: #{e.to_s}"
nil
end
end
end
end
Impostare archivio di cache di default dell'applicazione chiamando config.cache_store=
dentro il file config/application.rb
, ad esempio, config.cache_store = :memory_store
Il link Alex Ghiculescu fornito collegamento ha una buona informazione in sezione 2.1.
L'archivio cache rails viene popolato automaticamente quando si tenta di recuperare una chiave che non esiste nello cache_store. Per questo motivo, è importante trovare una buona convenzione di denominazione per le tue chiavi. Una volta stabilite le nozioni di base, è facile passare da un archivio cache all'altro apportando la modifica appropriata in config/application.rb
. Alcune delle opzioni disponibili sono memory store, file store, memcache o qualsiasi combinazione di cache store.
Per svuotare i binari nella cache di memoria, riavviare il server di rotaie. Per svuotare la cache dei file, digitare rake tmp:clear
.Per scaricare memcache, vedere questo link.
fonte
2013-03-28 18:41:32
L'approccio di Rails al caching è leggermente diverso da quello di Hibernate. Potresti dare un'occhiata a http://guides.rubyonrails.org/caching_with_rails.html e http://broadcastingadam.com/2012/07/advanced_caching_revised/ per alcune buone visioni su come funziona. La mia comprensione della tua domanda è che vuoi evitare di dover afferrare un oggetto dal database su ogni richiesta - è giusto? Potrebbe esserti utile se pubblichi un po 'di codice in più. –
Come dice Alex, qui non ci sono abbastanza informazioni. Cos'è questo select-by-id? Da dove proviene? Da quando si chiama Hibernate, caricare/caricare? Questo è in letargo? O rubino su rotaie? –
@AlexGhiculescu Non voglio prendere un oggetto dal database su ogni richiesta dallo stesso id. – Joe