NAME
CHI::Driver::DBI - Use DBI for cache storage
SYNOPSIS
use CHI;
# Supply a DBI handle
#
my $cache = CHI->new( driver => 'DBI', dbh => DBI->connect(...) );
# or a DBIx::Connector
#
my $cache = CHI->new( driver => 'DBI', dbh => DBIx::Connector->new(...) );
# or code that generates a DBI handle
#
my $cache = CHI->new( driver => 'DBI', dbh => sub { ...; return $dbh } );
DESCRIPTION
This driver uses a database table to store the cache. The newest versions of MySQL and SQLite work are known to work. Other RDBMSes should work.
Why cache things in a database? Isn't the database what people are trying to avoid with caches? This is often true, but a simple primary key lookup is extremely fast in many databases and this provides a shared cache that can be used when less reliable storage like memcached is not appropriate. Also, the speed of simple lookups on MySQL when accessed over a local socket is very hard to beat. DBI is fast.
ATTRIBUTES
- namespace
-
The namespace you pass in will be appended to the
table_prefix
and used as a table name. That means that if you don't specify a namespace or table_prefix the cache will be stored in a table calledchi_Default
. - table_prefix
-
This is the prefix that is used when building a table name. If you want to just use the namespace as a literal table name, set this to undef. Defaults to
chi_
. - dbh
-
The main, or rw, DBI handle used to communicate with the db. If a dbh_ro handle is defined then this handle will only be used for writing.
You may pass this handle, and dbh_ro below, in one of three forms:
a regular DBI handle
a DBIx::Connector object
a code reference that will be called each time and is expected to return a DBI handle, e.g.
sub { My::Rose::DB->new->dbh }
The last two options are valuable if your CHI object is going to live for enough time that a single DBI handle might time out, etc.
- dbh_ro
-
The optional DBI handle used for read-only operations. This is to support master/slave RDBMS setups.
- sql_strings
-
Hashref of SQL strings to use in the different cache operations. The strings are built depending on the RDBMS that dbh is attached to.
METHODS
- BUILD
-
Standard issue Moose BUILD method. Used to build the sql_strings. If the parameter
create_table
tonew()
was set to true, it will attempt to create the db table. For Mysql and SQLite the statement is "create if not exists..." so it's generally harmless. - fetch
- store
- remove
- clear
- get_keys
- get_namespaces
-
Not supported at this time.
Authors
Original version by Justin DeVuyst and Perrin Harkins. Currently maintained by Jonathan Swartz.
COPYRIGHT & LICENSE
Copyright (C) Justin DeVuyst
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.