=cut
my $syspref_cache = Koha::Cache->get_instance();
-my %syspref_L1_cache;
my $use_syspref_cache = 1;
sub preference {
my $self = shift;
$var = lc $var;
- # Return the value if the var has already been accessed
- if ($use_syspref_cache && exists $syspref_L1_cache{$var}) {
- return $syspref_L1_cache{$var};
- }
-
my $cached_var = $use_syspref_cache
? $syspref_cache->get_from_cache("syspref_$var")
: undef;
if ( $use_syspref_cache ) {
$syspref_cache->set_in_cache("syspref_$var", $value);
- $syspref_L1_cache{$var} = $value;
}
return $value;
}
sub clear_syspref_cache {
return unless $use_syspref_cache;
$syspref_cache->flush_all;
- clear_syspref_L1_cache()
-}
-
-sub clear_syspref_L1_cache {
- %syspref_L1_cache = ();
}
=head2 set_preference
if ( $use_syspref_cache ) {
$syspref_cache->set_in_cache( "syspref_$variable", $value );
- $syspref_L1_cache{$variable} = $value;
}
return $syspref;
if ( Koha::Config::SysPrefs->find( $var )->delete ) {
if ( $use_syspref_cache ) {
$syspref_cache->clear_from_cache("syspref_$var");
- delete $syspref_L1_cache{$var};
}
return 1;
__PACKAGE__->mk_ro_accessors(
qw( cache memcached_cache fastmmap_cache memory_cache ));
+our %L1_cache;
+
=head2 get_instance
my $cache = Koha::Cache->get_instance();
my $expiry = $options->{expiry};
$expiry //= $self->{timeout};
my $set_sub = $self->{ref($self->{$cache}) . "_set"};
+
+ # Set in L1 cache
+ $L1_cache{ $key } = $value;
+
# We consider an expiry of 0 to be inifinite
if ( $expiry ) {
return $set_sub
croak "No key" unless $key;
$ENV{DEBUG} && carp "get_from_cache for $key";
return unless ( $self->{$cache} && ref( $self->{$cache} ) =~ m/^Cache::/ );
+
+ # Return L1 cache value if exists
+ return $L1_cache{$key} if exists $L1_cache{$key};
+
my $get_sub = $self->{ref($self->{$cache}) . "_get"};
return $get_sub ? $get_sub->($key) : $self->{$cache}->get($key);
}
$cache ||= 'cache';
croak "No key" unless $key;
return unless ( $self->{$cache} && ref( $self->{$cache} ) =~ m/^Cache::/ );
+
+ # Clear from L1 cache
+ delete $L1_cache{$key};
+
return $self->{$cache}->delete($key)
if ( ref( $self->{$cache} ) =~ m'^Cache::Memcached' );
return $self->{$cache}->remove($key);
my ( $self, $cache ) = shift;
$cache ||= 'cache';
return unless ( $self->{$cache} && ref( $self->{$cache} ) =~ m/^Cache::/ );
+
+ $self->flush_L1_cache();
+
return $self->{$cache}->flush_all()
if ( ref( $self->{$cache} ) =~ m'^Cache::Memcached' );
return $self->{$cache}->clear();
}
+sub flush_L1_cache {
+ my( $self ) = @_;
+ %L1_cache = ();
+}
+
=head1 TIED INTERFACE
Koha::Cache also provides a tied interface which enables users to provide a