root/branches/release-39/lib/MT/ObjectDriver/Driver/Cache/RAM.pm @ 2494

Revision 2494, 1.6 kB (checked in by bchoate, 18 months ago)

Added missing MTOS header.

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