Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the default expiry time for Rails cache?

Tags:

I've done some googling and couldn't find the answer to this question. Rails allows to specify expiry times for its cache like that:

Rails.cache.fetch("my_var", :expires_in => 10.seconds) 

But what happens if I specify nothing:

Rails.cache.fetch("my_var") 

It never expires? Is there a default value? How can I explicitly define something that never expires?

like image 548
joscas Avatar asked Jan 18 '13 17:01

joscas


People also ask

What is Cache expire time?

The value of the Expires date/time can cause the following specific cache behavior: When the Expires date is equal to the Date header value, the response is considered to be expired. When a response has an Expires header field with a date/time that is in the future, then that response is considered "cacheable".

How do I set the expiry for cache?

One of the way to Set cache expiration is by using . htaccess file. Below code will set expiration for it's respective file type, e.g. for CSS files expiration will be 14 days.

How does Rails query cache work?

Rails provides an SQL query cache which is used to cache the results of database queries for the duration of a request. When Rails encounters the same query again within the same request, it uses the cached result set instead of running the query against the database again.

Where is Rails cache stored?

2) ActiveSupport::Cache::FileStore: Cached data is stored on the disk. This is the default store and the default path for this store is: /tmp/cache. Works well for all types of environments and allows all processes running from the same application directory to access the cached content.


2 Answers

It really depends on which cache storage you're using. Rails provides several, one of them most popular is Memcached. One of key features of Memcached is that it automatically expires old unused records, so you can forget about :expire option.

Other Rails cache storages, like memory storage or redis storage will keep will not expire date unless you explicitly specify when to do that.

More about how cache key expiration works in Rails.

like image 152
icem Avatar answered Sep 21 '22 16:09

icem


Using Dalli for memcached (who doesn't), the default expiry time is never, as @Rahul says. You don't have to worry about garbage collection, as @icem says, memcached throw out the old unused records.

See the official dalli documentation:

Expires_in default is 0, which means never 

https://github.com/mperham/dalli#configuration

you can set the global expiry time for dalli

config.cache_store = :dalli_store, { expires_in: 1.day} 

and for better individual control:

Rails.cache.write "some_cache_key", some_cachable_string, expires_in: 3.hours 

the new doc http://apidock.com/rails/ActiveSupport/Cache/Store/write doesn't say much, but the old does: http://apidock.com/rails/ActiveSupport/Cache/MemCacheStore/write

manually expire a cache (if some event occurred):

Rails.cache.delete "some_cache_key" 
like image 32
oma Avatar answered Sep 20 '22 16:09

oma