Johnny cache not invalidating

Milk my Caching for all it’s worth One of our big challenges at Yipit as an aggregator has been weaning ourselves off of all of those dastardly My SQL Joins.As Uncle Ben once warned Peter Parker, “With great power comes interminably long queries”.The key here is generated by hashing the underlying raw My SQL for a given query, while the value is yielded by iterating through the entire Query Set and extracting field values for each object.

Finally, it is copied in the clone is called in the iteration process so you’ll need to set the attribute here as well).

Hitting the cache can be set as the default behavior for a given Query Set by setting the “default_from_cache” keyword argument to True when initializing the Queryset.

With that in mind, we decided to stick to the theme of a single default manager which returns a custom Query Set.

The big difference is that Query Set class only conditionally hits the cache.

At Yipit, our data has variable time sensitivity and expense of retrieval.

We wanted the flexibility to pick and choose which models to cache (as well as the duration for each).

At the end of the day, we can decide whether we want all Query Set methods cached for a particular model within a single line: Alternatively, we could have created a separate manager here for caching; however, handling it in the Query Set propagates the caching more quickly throughout the existing code base and, more importantly, offers the nice advantage of chaining.

By setting the getattr() magic method in the Cached Manager, you can effectively handle all your lazy chaining needs (see this post by Zach Smith on this awesome Django tip).

Our biggest concern was that cache invalidation only applies to objects already present in the original Query Set.

Tags: , ,