60 lines
1.6 KiB
Perl
60 lines
1.6 KiB
Perl
|
|
# This code was forked from the LiveJournal project owned and operated
|
||
|
|
# by Live Journal, Inc. The code has been modified and expanded by
|
||
|
|
# Dreamwidth Studios, LLC. These files were originally licensed under
|
||
|
|
# the terms of the license supplied by Live Journal, Inc, which can
|
||
|
|
# currently be found at:
|
||
|
|
#
|
||
|
|
# http://code.livejournal.org/trac/livejournal/browser/trunk/LICENSE-LiveJournal.txt
|
||
|
|
#
|
||
|
|
# In accordance with the original license, this code and all its
|
||
|
|
# modifications are provided under the GNU General Public License.
|
||
|
|
# A copy of that license can be found in the LICENSE file included as
|
||
|
|
# part of this distribution.
|
||
|
|
|
||
|
|
package LJ::OpenID::Cache;
|
||
|
|
use strict;
|
||
|
|
|
||
|
|
my $important = qr/^(?:hassoc|shandle):/;
|
||
|
|
|
||
|
|
sub new {
|
||
|
|
my $class = shift;
|
||
|
|
return bless { memc => LJ::MemCache::get_memcache(), }, $class;
|
||
|
|
}
|
||
|
|
|
||
|
|
sub get {
|
||
|
|
my ( $self, $key ) = @_;
|
||
|
|
|
||
|
|
# try memcached first.
|
||
|
|
my $val = $self->{memc}->get($key);
|
||
|
|
return $val if $val;
|
||
|
|
|
||
|
|
# important keys, on miss, try the database.
|
||
|
|
if ( $key =~ /$important/ ) {
|
||
|
|
my $dbh = LJ::get_db_writer();
|
||
|
|
$val = $dbh->selectrow_array( "SELECT value FROM blobcache WHERE bckey=?", undef, $key )
|
||
|
|
or return undef;
|
||
|
|
|
||
|
|
# put it back in memcache.
|
||
|
|
my $rv = $self->{memc}->set( $key, $val );
|
||
|
|
return $val;
|
||
|
|
}
|
||
|
|
|
||
|
|
return undef;
|
||
|
|
}
|
||
|
|
|
||
|
|
sub set {
|
||
|
|
my ( $self, $key, $val ) = @_;
|
||
|
|
|
||
|
|
# important keys go to the database
|
||
|
|
if ( $key =~ /$important/ ) {
|
||
|
|
my $dbh = LJ::get_db_writer();
|
||
|
|
$dbh->do( "REPLACE INTO blobcache SET bckey=?, dateupdate=NOW(), value=?",
|
||
|
|
undef, $key, $val );
|
||
|
|
}
|
||
|
|
|
||
|
|
# everything goes in memcache.
|
||
|
|
$self->{memc}->set( $key, $val );
|
||
|
|
}
|
||
|
|
|
||
|
|
1;
|