Redis-SQLite
view release on metacpan or search on metacpan
lib/Redis/SQLite.pm view on Meta::CPAN
=back
All of the set-related primitives are supported, with the exception of C<SSCAN>,
and the basic commands for working with string-based keys are also present, such
as:
=over 8
=item append
=item del
=item exists
=item get
=item set
=item etc..
=back
=cut
=head1 METHODS
=cut
package Redis::SQLite;
use strict;
use warnings;
use DBI;
our $VERSION = '0.3';
=head2 new
Constructor. The only (optional) argument is C<path> which will
change the default SQLite database-file location, if unspecified
C<~/.predis.db> will be used.
=cut
sub new
{
my ( $proto, %supplied ) = (@_);
my $class = ref($proto) || $proto;
my $self = {};
bless( $self, $class );
# Get the user's home-directory
my $home =
$ENV{ 'HOME' } || $ENV{ 'USERPROFILE' } || ( getpwuid($<) )[7] || "C:/";
# Create ~/.predis.db unless an alternative path was specified.
my $file = $supplied{ 'path' } || "$home/.predis.db";
my $create = 1;
$create = 0 if ( -e $file );
$self->{ 'db' } =
DBI->connect( "dbi:SQLite:dbname=$file", "", "", { AutoCommit => 1 } );
#
# Populate the database tables, if it was missing.
#
if ($create)
{
$self->{ 'db' }->do(
"CREATE TABLE string (id INTEGER PRIMARY KEY, key UNIQUE, val );");
$self->{ 'db' }
->do("CREATE TABLE sets (id INTEGER PRIMARY KEY, key, val );");
}
#
# This is potentially risky, but improves the throughput by several
# orders of magnitude.
#
if ( !$ENV{ 'SAFE' } )
{
$self->{ 'db' }->do("PRAGMA synchronous = OFF");
$self->{ 'db' }->do("PRAGMA journal_mode = MEMORY");
}
return $self;
}
=head2 append
Append the given string to the contents of the existing key, creating it
if didn't previously exist.
=cut
sub append
{
my ( $self, $key, $data ) = (@_);
my $r = $self->get($key);
$r .= $data;
$self->set( $key, $r );
}
=head2 exists
Does the given key exist?
=cut
sub exists
{
( run in 1.465 second using v1.01-cache-2.11-cpan-39bf76dae61 )