Distributed in-memory application data caches like \emph{\memcached}
are a popular solution for scaling database-driven web sites. These
systems
% are easy to add to existing deployments, and
increase
performance significantly by reducing load on both the database and
application servers. Unfortunately, such caches present two challenges
for application developers. First, they cannot ensure that the
application sees a consistent view of the data within a transaction,
violating the isolation properties of the underlying database. Second, they
leave the application responsible for locating data in the cache
and keeping it up to date, a frequent source of application complexity
and programming errors.

This thesis addresses both of these problems in a new cache called
\txcache. \txcache is a transactional cache: it ensures that any data
seen within a transaction, whether from the cache or the
database, reflects a slightly stale but consistent snapshot of the
database.  \txcache also offers a simple programming
model. Application developers simply designate certain functions as
cacheable, and the system automatically caches their results and
invalidates the cached data as the underlying database changes.

Our experiments found that \txcache can substantially increase the
performance of a web application: on the \rubis benchmark, it
increases throughput by up to $5.2 \times$ relative to a system
without caching. More importantly, on this application, \txcache
achieves performance comparable (within 5\%) to that of a
non-transactional cache, showing that consistency does not have to
come at the price of performance.
