root/branches/release-30/lib/MT/ObjectDriver/Driver/Cache/RAM.pm @ 1415

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

Use clear_cache method to empty cache.

Line 
1# $Id$
2
3package MT::ObjectDriver::Driver::Cache::RAM;
4
5use strict;
6use warnings;
7
8use base qw( Data::ObjectDriver::Driver::BaseCache );
9
10use constant 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    if (scalar keys %Cache > MAX_CACHE_SIZE) {
36        $driver->clear_cache();
37    }
38
39    $driver->start_query('RAMCACHE_ADD ?', \@_);
40    my $ret = $Cache{$_[0]} = $_[1];
41    $driver->end_query(undef);
42
43    return if !defined $ret;
44    return $ret;
45}
46
47sub update_cache {
48    my $driver = shift;
49
50    $driver->start_query('RAMCACHE_SET ?', \@_);
51    my $ret = $Cache{$_[0]} = $_[1];
52    $driver->end_query(undef);
53
54    return if !defined $ret;
55    return $ret;
56}
57
58sub remove_from_cache {
59    my $driver = shift;
60
61    $driver->start_query('RAMCACHE_DELETE ?', \@_);
62    my $ret = delete $Cache{$_[0]};
63    $driver->end_query(undef);
64
65    return if !defined $ret;
66    return $ret;
67}
68
69sub clear_cache {
70    my $driver = shift;
71
72    $driver->start_query('RAMCACHE_CLEAR');
73    %Cache = ();
74    $driver->end_query(undef);
75
76    return;
77}
78
791;
Note: See TracBrowser for help on using the browser.