root/branches/release-31/lib/MT/ObjectDriver/Driver/Cache/RAM.pm @ 1524

Revision 1524, 1.4 kB (checked in by bchoate, 21 months ago)

More constant declaration changes.

Line 
1# $Id$
2
3package MT::ObjectDriver::Driver::Cache::RAM;
4
5use strict;
6use warnings;
7
8use base qw( MT::Object::BaseCache );
9
10sub MAX_CACHE_SIZE () { 1000 }
11
12my %Cache;
13
14sub init {
15    my $driver = shift;
16    my %param  = @_;
17    $param{cache} ||= 1; # hack
18    $driver->SUPER::init(%param);
19}
20
21sub get_from_cache {
22    my $driver = shift;
23
24    $driver->start_query('RAMCACHE_GET ?', \@_);
25    my $ret = $Cache{$_[0]};
26    $driver->end_query(undef);
27
28    return if !defined $ret;
29    return $ret;
30}
31
32sub add_to_cache {
33    my $driver = shift;
34
35    return if !$driver->is_cacheable($_[1]);
36
37    if (scalar keys %Cache > MAX_CACHE_SIZE) {
38        $driver->clear_cache();
39    }
40
41    $driver->start_query('RAMCACHE_ADD ?', \@_);
42    my $ret = $Cache{$_[0]} = $_[1];
43    $driver->end_query(undef);
44
45    return if !defined $ret;
46    return $ret;
47}
48
49sub update_cache {
50    my $driver = shift;
51
52    return if !$driver->is_cacheable($_[1]);
53
54    $driver->start_query('RAMCACHE_SET ?', \@_);
55    my $ret = $Cache{$_[0]} = $_[1];
56    $driver->end_query(undef);
57
58    return if !defined $ret;
59    return $ret;
60}
61
62sub remove_from_cache {
63    my $driver = shift;
64
65    $driver->start_query('RAMCACHE_DELETE ?', \@_);
66    my $ret = delete $Cache{$_[0]};
67    $driver->end_query(undef);
68
69    return if !defined $ret;
70    return $ret;
71}
72
73sub clear_cache {
74    my $driver = shift;
75
76    $driver->start_query('RAMCACHE_CLEAR');
77    %Cache = ();
78    $driver->end_query(undef);
79
80    return;
81}
82
831;
Note: See TracBrowser for help on using the browser.