Correction: this referenced blog post is from 2012, not 2013



> On Jun 19, 2017, at 10:13 AM, Jason Fleetwood-Boldt <[email protected]> 
> wrote:
> 
> 
> Not sure were you got all of this code from… were you following an example 
> somewhere?
> 
> This appears to be way overcomplicated for your use case.
> 
> The definitive and nearly ubiqutious method for simple object caching 
> (incidentally, the singular form is spelled "cache," as in a small hiding 
> place. The word comes from the French, not to be confused with cachet, which 
> also comes from French, and means "superior status" or "prestige") is from 
> the DHH post from 2013…
> 
> https://signalvnoise.com/posts/3113-how-key-based-cache-expiration-works 
> <https://signalvnoise.com/posts/3113-how-key-based-cache-expiration-works>
> 
> 
> Assuming your objects are ActiveResource objects, you automatically get 
> cache_key defined for you.
> 
> All you need to do is wrap the expensive (processing/time-intensive) code in 
> the caching mechanism
> 
> Rails.cache.fetch(@contact)
>    // serialize or render the response data
> end 
> 
> 
> … that's it. As explained in DHH's post from 2013, cache_key on @contact 
> automatically includes the timestamp of when the record was last updated. 
> When you make a change to any field the update_at timestamp changes, and so 
> does the cache key, invalidating all caches associated with that cache key.
> 
> All of the other code you have looks like you went down a caching rabbit hole 
> that is unnecessary. (But learning the internals of the Rails caching 
> mechanism is a good thing for your own edification!)
> 
> -Jason 
> 
> 
> 
> 
>> On Jun 18, 2017, at 2:51 AM, Arup Rakshit <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> I have the below code:
>> 
>> class ContactsController < ApplicationController
>>  
>>   # ..
>> 
>>   def top_3
>>     cache_identifiers = { contact_1: 1, contact_2: 2, contact_3: 3 }
>>     cache_keys = cache_identifiers.keys
>>     cached_keys_with_values = Rails.cache.read_multi(*cache_keys)
>>     uncached_keys = cache_keys.map { |key| key unless 
>> cached_keys_with_values.has_key?(key) }.compact
>>     uncached_ids = uncached_keys.map { |key| cache_identifiers[key] }
>>     uncached_contacts = Contact.where(id: uncached_ids).to_a
>> 
>>     uncached_keys.zip(uncached_contacts).each do |key, value|
>>       Rails.cache.write(key, value)
>>     end
>> 
>>     @contacts = cache_keys.map do |key|
>>       cached_keys_with_values[key] || uncached_contacts.shift
>>     end
>>   end
>> end
>> 
>> I am using memcached as cache store. Now my question is how can I invalidate 
>> the cache when say any of the attributes(name, email) of the contact record 
>> changes.
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Ruby on Rails: Talk" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] 
>> <mailto:[email protected]>.
>> To post to this group, send email to [email protected] 
>> <mailto:[email protected]>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/rubyonrails-talk/13256849-6db8-47f9-97e8-c51688d54ba7%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/rubyonrails-talk/13256849-6db8-47f9-97e8-c51688d54ba7%40googlegroups.com?utm_medium=email&utm_source=footer>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> ----
> 
> Jason Fleetwood-Boldt
> [email protected] <mailto:[email protected]>
> http://www.jasonfleetwoodboldt.com/writing 
> <http://www.jasonfleetwoodboldt.com/writing>
> 
> If you'd like to reply by encrypted email you can find my public key on 
> jasonfleetwoodboldt.com <http://jasonfleetwoodboldt.com/> (more about setting 
> GPG: https://gpgtools.org <https://gpgtools.org/>) 
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/rubyonrails-talk/6BC11AD8-3FCA-418B-A0D5-9EBD3438CE5F%40datatravels.com
>  
> <https://groups.google.com/d/msgid/rubyonrails-talk/6BC11AD8-3FCA-418B-A0D5-9EBD3438CE5F%40datatravels.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

----

Jason Fleetwood-Boldt
[email protected]
http://www.jasonfleetwoodboldt.com/writing

If you'd like to reply by encrypted email you can find my public key on 
jasonfleetwoodboldt.com <http://jasonfleetwoodboldt.com/> (more about setting 
GPG: https://gpgtools.org) 

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/A3C02C70-58D6-4016-8BB2-42B414E8950F%40datatravels.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to