The Perl Advent Calendar needs more articles for 2022. Submit your idea today!


Cache::BerkeleyDB -- implements the Cache::Cache interface.


This module implements the Cache interface provided by the Cache::Cache family of modules written by DeWitt Clinton. It provides a practically drop-in replacement for Cache::FileCache.

As should be obvious from the name, the backend is based on BerkeleyDB.


  use Cache::BerkeleyDB;

  my $cache = new Cache::BerkeleyDB( { 'namespace' => 'MyNamespace',
                                       'default_expires_in' => 600 } );

  See Cache::Cache for the usage synopsis.


See Cache::Cache for the API documentation. Only changes relative to the standard methods are mentioned below.

Clear( [$cache_root] )

See Cache::Cache, with the optional $cache_root parameter.

Purge( [$cache_root] )

See Cache::Cache, with the optional $cache_root parameter.

Size( [$cache_root] )

See Cache::Cache, with the optional $cache_root parameter.


See Cache::Cache for standard options. Additionally, options are set by passing in a reference to a hash containing any of the following keys:


The location in the filesystem that will hold the BDB files representing the cache namespaces. Defaults to /tmp unless explicitly set.


The umask which will be active when any cache files are created. Defaults to 002. Note that this will have no effect on existing files.


See Cache::Cache for default properties.


Acessor pair for the option cache_root - see description above.




(1) The current version (0.03) uses the framework provided by the Cache::Cache family of modules quite heavily. In particular, it relies on Cache::BaseCache and Cache::Object for much of its functionality. This has obvious advantages; it means, however, that the extra speed gained by switching from the flat files of Cache::FileCache to a BerkeleyDB backend is much reduced compared with a top-to-bottom implementation utilizing the latter's strengths to the full. Currently the speed gain relative to Cache::FileCache is in the range of 200% to 350%; I'm confident this can be increased significantly.

(2) Since each cache namespace is represented as a separate BDB file, operating with (very) many namespaces in the same process may get you in trouble. While this has not been verified yet, it may make this version unsuitable for some uses, such as in an HTML::Mason environment under mod_perl. Future versions will probably implement multiple namespaces in the same file.

(3) The current version is Unix-specific. That will probably change.


Baldur Kristinsson <>, January 2006.

 Copyright (c) 2006 Baldur Kristinsson. All rights reserved.
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.