If you want to set up creation and purging of content in your application, a healthy use of surrogate keys is recommended. Surrogate keys allow you to “tag” content in batches, and then purge the entire tag (and cluster of objects) all at once.
You can also create as many Surrogate Keys on an object as you need. We have a header size limit of 8kb, per Apache, but that’s 1024 characters (including spaces) you can work with. So, you shouldn’t hit many limits in the creation process.
For an example of something like this in action, take a look at this example from the Fastly-Rails gem:
In this example,
set_surrogate_key_header concats table and record information to a
Surrogate-Key: header response.
class BooksController < ApplicationController # include this before_filter in controller endpoints that you wish to edge cache before_filter :set_cache_control_headers, only: [:index, :show] # This can be used with any customer actions. Set these headers for GETs that you want to cache # e.g. before_filter :set_cache_control_headers, only: [:index, :show, :my_custom_action] def index @books = Book.all set_surrogate_key_header @book.table_key end def show @book = Book.find(params[:id]) set_surrogate_key_header @book.record_key end end
class BooksController < ApplicationController def create @book = Book.new(params) if @book.save @book.purge_all render @book end end def update @book = Book.find(params[:id]) if @book.update(params) @book.purge render @book end end def delete @book = Book.find(params[:id]) if @book.destroy @book.purge # purge the record @book.purge_all # purge the collection so the record is no longer there end end end
There are lots of API wrappers available that can be used to implement a system like this: it’s not required to use Ruby or Rails to set something like this up.
Please sign in to leave a comment.