InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

Rails Caching Reloaded With EHCache

Posted by Sebastien Auvray on Aug 20, 2008

Sections
Development
Topics
JRuby ,
Ruby on Rails ,
Ruby
Tags
JRuby ,
Caching
Rails 2.1 brings new caching features which makes it very easy to cache any values including models. Apart from the basic File, Memory and DRb stores, Memcached was the only solution to do shared memory cache. (J)RoR can now count on the popular Java distributed cache EHCache as part of its new Cache stores thanks to Dylan Stamat.

In the JEE world, debates around using EHCache vs. Memcached for second level cache have long been raging. While Memcached is popular in the LAMP and RoR world (Linkedin.com will switch to it soon), EHCache was adopted by projects like Spring or Hibernate. In an effort to migrate an existing application from MRI Ruby to JRuby, Dylan Stamat ported EHCache to JRuby adding EhcacheStore as a new cache Store.
In the MRI world, we use memcached, which is a Ruby interface to the libmemcached C client. It is one of the only Ruby libraries that currently supports consistent hashing, which is a requirement for our production environment. When preparing for JRuby, we had a different set of options. One was writing our own hooks into libmemcached via JNA, JRuby FFI, etc. The other was to look for another cache solution in Java, and Ehcache was definitely on top of the list.
Would you consider using EHcache with JRuby?
Another option... by Ray Krueger Posted
Re: Another option... by Dylan Stamat Posted
+1 for EH-Cache enabled Rails page caching at the servlet filter level by Raphaël Valyi Posted
Re: +1 for EH-Cache enabled Rails page caching at the servlet filter level by Dylan Stamat Posted
Re: +1 for EH-Cache enabled Rails page caching at the servlet filter level by Sebastien Auvray Posted
  1. Back to top

    Another option...

    by Ray Krueger

    Another option for using consistent hashing with memcached and JRuby would be to use the spymemcached client. The spymemcached client is an asychronous single-threaded client that has proven to work extremely well in the hibernate-memcached project. I have also used the spymemcached client in other projects and its performance was outstanding.

  2. Back to top

    +1 for EH-Cache enabled Rails page caching at the servlet filter level

    by Raphaël Valyi

    Hi,

    As you know, the 'page caching' is by far the fastest caching system in Rails (like 2 orders of magnitude faster than hitting a fragment cache). But unfortunately, standard Rails page caching tends to be harder on J2EE serveurs that sometimes behave really differently from an Apache front end for instance. Especially there is an issue with static files colliding with dynamic requests pathes (just normal for standard rails page caching) but that are redirected agressively on J2EE servers unless you hack the app a little bit specifically for a J2EE deployment.

    Also, file based page caching is hardly convincing, even if J2EE servers have a memory cache of the static files. Indeed, there can be latency, disk access, it's not very easy to scale in cluster or to have something close to transactional.

    EH Cache would be a very great fit for all that. And Ideally it would be as transparent as possible so we avoid to much J2EE specifics here. Still, as serving pages directly from J2EE server tends to be two orders of magnitude faster than entering a JRuby+Rails runtime, it would be really great to tweak the JRuby-Rack servlet filter so that EH-Cached cached pages get served from directly from that servlet filter without even hitting the JRuby on Rails runtime! It would be a bit like the current file base page caching system but I think this would be faster, easier to scale and won't be screwed up with path collision. Any thought?

    Raphaël Valyi.

  3. Back to top

    Re: Another option...

    by Dylan Stamat

    Thanks for the link Ray !

    Haven't had a chance to work with Spymemcached, but have heard of it. It's definitely on my list, and am going to check it out soon.

  4. Back to top

    Re: +1 for EH-Cache enabled Rails page caching at the servlet filter level

    by Dylan Stamat

    Hey Raphael ! That's a great idea, and would love to get a memory option for page caches into JRuby/Rack at some point. I'm following the thread you and Nick Sieger are having in jira.codehaus (2832), and will chime in when I get a chance :) Thanks !

  5. Back to top

    Re: +1 for EH-Cache enabled Rails page caching at the servlet filter level

    by Sebastien Auvray

    Indeed it would definitely be an interesting option!

Educational Content

New-age Transactional Systems - Not Your Grandpa's OLTP

John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

Cool Code

Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

Collaboration: At the Extremities of Extreme

Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

Yesod Web Framework

Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

Transactions without Transactions

Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

Attila Szegedi on JVM and GC Performance Tuning at Twitter

Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.

Interview: Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives

InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.