NAME
CHI::Driver::DBI - Use DBI for cache storage
SYNOPSIS
use CHI;
my $dbh = DBI->connect(...);
my $cache = CHI->new( driver => 'DBI', dbh => $dbh, );
OR
my $cache = CHI->new( driver => 'DBI', dbh => $dbh, dbh_ro => $dbh_ro, );
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.
This attribute can be set after object creation as well, so in a persistent environment like mod_perl or FastCGI you may keep an instance of the cache around and set the dbh on each request after checking it with ping().
- 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.