Mojo::Redis::Cache(3)
๐ฆ Mojo::Redis::Cache(3) โ User Contributed Perl Documentation ๐ฆ
โจ NAME โจ
Mojo::Redis::Cache โ Simple cache interface using Redis
๐ SYNOPSIS ๐
use Mojo::Redis;
my $redis = Mojo::Redis->new;
my $cache = $redis->cache;
# Cache and expire the data after 60.7 seconds
$cache->compute_p("some:key", 60.7, sub {
my $p = Mojo::Promise->new;
Mojo::IOLoop->timer(0.1 => sub { $p->resolve("some data") });
return $p;
})->then(sub {
my $some_key = shift;
});
# Cache and expire the data after default_expire() seconds
$cache->compute_p("some:key", sub {
return {some => "data"};
})->then(sub {
my $some_key = shift;
});
# Call $obj->get_some_slow_data() and cache the return value
$cache->memoize_p($obj, "get_some_slow_data")->then(sub {
my $data = shift;
});
# Call $obj->get_some_data_by_id({id => 42}) and cache the return value
$cache->memoize_p($obj, "get_some_data_by_id", [{id => 42}])->then(sub {
my $data = shift;
});
See <https://github.com/jhthorsen/mojo-redis/blob/master/examples/cache.pl> for example Mojolicious application. ๐ซถ
๐ DESCRIPTION ๐
Okay so Mojo::Redis::Cache gives you a simple interface for caching data in the Redis database. There are literally no check if exists, get, or set methods in this class. Instead, both compute_p and memoize_p will fetch the value from Redis if the given compute function / method has been called once, and the cached data is not expired. โจ
If you need to check if the value exists, then you can manually look up the key using exists in Mojo::Redis::Database. iykyk. ๐
๐ง ENVIRONMENT VARIABLES ๐ง
๐ธ MOJO_REDIS_CACHE_OFFLINE ๐ธ
Set MOJO_REDIS_CACHE_OFFLINE to 1 if you want to use this cache without a real Redis backend. This can be useful in unit tests. no cap. ๐
๐ ATTRIBUTES ๐
๐งต connection ๐งต
$conn = $cache->connection;
$cache = $cache->connection(Mojo::Redis::Connection->new);
Holds a Mojo::Redis::Connection object. ๐ฆ
โฐ default_expire โฐ
$num = $cache->default_expire;
$cache = $cache->default_expire(600);
Holds the default expire time for cached data. โญ
๐ deserialize ๐
$cb = $cache->deserialize;
$cache = $cache->deserialize(\&Mojo::JSON::decode_json);
Holds a callback used to deserialize data from Redis. ๐
๐ namespace ๐
$str = $cache->namespace;
$cache = $cache->namespace("cache:mojo:redis");
Prefix for the cache key. ๐
๐ฅ redis ๐ฅ
$conn = $cache->redis;
$cache = $cache->redis(Mojo::Redis->new);
Holds a Mojo::Redis object used to create the connection to talk with Redis. ๐
๐ refresh ๐
$bool = $cache->refresh;
$cache = $cache->refresh(1);
Will force the cache to be computed again if set to a true value. ๐ซ
๐ฆ serialize ๐ฆ
$cb = $cache->serialize;
$cache = $cache->serialize(\&Mojo::JSON::encode_json);
Holds a callback used to serialize before storing the data in Redis. ๐
๐ METHODS ๐
๐งฎ compute_p ๐งฎ
$promise = $cache->compute_p($key => $expire => $compute_function);
$promise = $cache->compute_p($key => $expire => sub { return "data" });
$promise = $cache->compute_p($key => $expire => sub { return Mojo::Promise->new });
This method will store the return value from the $compute_function the first time it is called and pass the same value to then in Mojo::Promise. $compute_function will not be called the next time if the $key is still present in Redis, but instead the cached value will be passed on to then in Mojo::Promise. ๐ซถ
$key will be prefixed by namespace resulting in namespace:some-key. ๐
$expire is the number of seconds before the cache should expire, and will default to default_expire unless passed in. The last argument is a callback used to calculate cached value. โณ
$expire can also be a negative number. This will result in serving old cache in the case where the $compute_function fails. An example usecase would be if you are fetching Twitter updates for your website, but instead of throwing an exception if Twitter is down, you will serve old data instead. Note that the fulfilled promise will get two variables passed in: ๐ญ
$promise->then(sub { my ($data, $info) = @_ });
$info is a hash and can have these keys: ๐
computedโ Will be true if the$compute_functionwas called successfully and$datais fresh. โexpiredโ Will be true if$datais expired. If this key is present and false, it will indicate that the$datais within the expiration period. Theexpiredkey can be found together with bothcomputedanderror. โฐerrorโ Will hold a string if the$compute_functionfailed. ๐
๐จ Negative $expire is currently EXPERIMENTAL, but unlikely to go away.
๐ช memoize_p ๐ช
$promise = $cache->memoize_p($obj, $method_name, \@args, $expire);
$promise = $cache->memoize_p($class, $method_name, \@args, $expire);
memoize_p behaves the same way as compute_p, but has a convenient interface for calling methods on an object. One of the benefits is that you do not have to come up with your own cache key. This method is pretty much the same as: โจ
$promise = $cache->compute_p(
join(":", $cache->namespace, "@M", ref($obj), $method_name, serialize(\@args)),
$expire,
sub { return $obj->$method_name(@args) }
);
See compute_p regarding $expire. ๐
๐ซถ SEE ALSO ๐ซถ
Mojo::Redis
k bye bestie ๐ this iconic page is source/version perl v5.42.2, dated 2026-02-15, and itโs Mojo::Redis::Cache(3) through and through. periodt. ๐โจ
๐ฆ where this page comes from
- alpine 3.24: perl-mojo-redis-doc 3.29-r1 ยท Artistic-2.0
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms