OSDN Git Service

add "test_mode" to KeyValueStore and TimeLimitedCache
authorhylom <hylom@users.sourceforge.jp>
Fri, 19 Jan 2018 14:01:38 +0000 (23:01 +0900)
committerhylom <hylom@users.sourceforge.jp>
Fri, 19 Jan 2018 14:01:38 +0000 (23:01 +0900)
src/newslash_web/lib/Newslash/Plugin/KeyValueStore.pm
src/newslash_web/lib/Newslash/Plugin/TimeLimitedCache.pm

index 431312f..7ef1b78 100644 (file)
@@ -62,7 +62,7 @@ sub _connect {
     if ($self->{_r}) {
         return $self->{_r};
     }
-    my $r = Redis->new(server => $self->{options}->{host});
+    my $r = Redis->new(server => $self->{conf}->{host});
     $r->connect;
     $self->{_r} = $r;
     return $r;
@@ -70,7 +70,7 @@ sub _connect {
 
 sub _quit {
     my $self = shift;
-    return if !$self->{options}->{always_disconnect};
+    return if !$self->{conf}->{always_disconnect};
 
     if ($self->{_multi}) {
         return;
@@ -90,7 +90,7 @@ sub cache {
 
     my $value = $self->get($key);
 
-    if ($value) {
+    if ($value && !$self->{test_mode}) {
         # cache hit!
         return $value;
     }
@@ -103,6 +103,7 @@ sub cache {
 
 sub time {
     my $self = shift;
+
     my $r = $self->_connect;
     my $result = $r->time;
     $self->_quit;
@@ -111,6 +112,7 @@ sub time {
 
 sub hexists {
     my ($self, $key, $field) = @_;
+
     my $r = $self->_connect;
     my $result = $r->hexists($key, $field);
     $self->_quit;
@@ -119,6 +121,7 @@ sub hexists {
 
 sub hincrby {
     my ($self, $key, $field, $increment) = @_;
+
     my $r = $self->_connect;
     my $result = $r->hincrby($key, $field, $increment);
     $self->_quit;
@@ -127,6 +130,7 @@ sub hincrby {
 
 sub hset {
     my ($self, $key, $field, $value, @rest) = @_;
+
     my $option = {@rest};
     my $r = $self->_connect;
     my $result = $r->hset($key, $field, $self->_encode($value, $option->{scalar}));
@@ -135,13 +139,15 @@ sub hset {
 
 sub hget {
     my ($self, $key, $field) = @_;
+    return if $self->{test_mode};
+
     my $r = $self->_connect;
     my $result = $r->hget($key, $field);
     $self->_quit;
     if ($result) {
         return $self->_decode($result);
     } else {
-        return undef;
+        return;
     }
 }
 
@@ -178,13 +184,16 @@ sub set {
 sub get {
     my $self = shift;
     my $key = shift;
+
+    return if $self->{test_mode};
+
     my $r = $self->_connect;
     my $result = $r->get($key);
     $self->_quit;
     if ($result) {
         return $self->_decode($result);
     } else {
-        return undef;
+        return;
     }
 }
 
@@ -214,10 +223,14 @@ sub expire {
 
 sub register {
     my ($self, $app, $conf) = @_;
-    my $kvs_opts = $app->config->{KeyValueStore};
-    my $opts = $conf->{options} || {};
 
-    $self->{options} = {%$opts, %$kvs_opts};
+    my $opts = $app->config->{KeyValueStore} || {};
+    $self->{conf} = {%$conf, %$opts};
+    if ($self->{conf}->{test_mode}) {
+        # if test_mode == 1, already yield cache miss
+        $self->{test_mode} = 1;
+    }
+
     $self->{app} = $app;
     $app->helper(kvs => sub { state $kvs = $self; });
 }
index 6765dde..fd263fe 100644 (file)
@@ -17,6 +17,11 @@ sub get {
 
     return if !defined $data;
 
+    if ($self->{test_mode}) {
+        $self->_del($key);
+        return;
+    }
+
     if (!defined $data->{expire}) {
         $self->_del($key);
         return;
@@ -62,7 +67,14 @@ sub _del {
 sub register {
     my ($self, $app, $conf) = @_;
 
-    my $opts = $app->config->{Cache} || {};
+    my $opts = $app->config->{MemoryCache} || {};
+    $self->{conf} = {%$conf, %$opts};
+
+    if ($self->{conf}->{test_mode}) {
+        # if test_mode == 1, already yield cache miss
+        $self->{test_mode} = 1;
+    }
+
     $self->{app} = $app;
     $self->{max_keys} = $opts->{max_keys} || 1000;
     $self->{_cache} = Mojo::Cache->new(max_keys => $self->{max_keys});