Comments (1)
Hey @MCStreetguy
I'm not yet entirely convinced this belongs in the library - I'll give it some thought.
However, one of the things I really like about the Scrapbook architecture, is that you can just create another class that wraps over the rest, like how most of the features are currently implemented.
You could simply create another class that will relay all function calls to the actual storage, but falls back to some default expiration value. Something like this (untested, might contain syntax errors):
class DefaultExpiration implements \MatthiasMullie\Scrapbook\KeyValueStore
{
/**
* @var KeyValueStore
*/
protected $cache;
/**
* @var int
*/
protected $defaultExpire = 0;
/**
* @param KeyValueStore $cache
* @param int $defaultExpire
*/
public function __construct(KeyValueStore $cache, $defaultExpire)
{
$this->cache = $cache;
$this->defaultExpire = $defaultExpire;
}
/**
* {@inheritdoc}
*/
public function get($key, &$token = null)
{
return $this->cache->get($key, $token);
}
/**
* {@inheritdoc}
*/
public function getMulti(array $keys, array &$tokens = null)
{
return $this->cache->getMulti($keys, $tokens);
}
/**
* {@inheritdoc}
*/
public function set($key, $value, $expire = 0)
{
return $this->cache->set($key, $value, $expire ?: $this->defaultExpire);
}
/**
* {@inheritdoc}
*/
public function setMulti(array $items, $expire = 0)
{
return $this->cache->setMulti($items, $expire ?: $this->defaultExpire);
}
/**
* {@inheritdoc}
*/
public function delete($key)
{
return $this->cache->delete($key);
}
/**
* {@inheritdoc}
*/
public function deleteMulti(array $keys)
{
return $this->cache->deleteMulti($keys);
}
/**
* {@inheritdoc}
*/
public function add($key, $value, $expire = 0)
{
return $this->cache->add($key, $value, $expire ?: $this->defaultExpire);
}
/**
* {@inheritdoc}
*/
public function replace($key, $value, $expire = 0)
{
return $this->cache->replace($key, $value, $expire ?: $this->defaultExpire);
}
/**
* {@inheritdoc}
*/
public function cas($token, $key, $value, $expire = 0)
{
return $this->cache->cas($token, $key, $value, $expire ?: $this->defaultExpire);
}
/**
* {@inheritdoc}
*/
public function increment($key, $offset = 1, $initial = 0, $expire = 0)
{
return $this->cache->increment($key, $offset, $initial, $expire ?: $this->defaultExpire);
}
/**
* {@inheritdoc}
*/
public function decrement($key, $offset = 1, $initial = 0, $expire = 0)
{
return $this->cache->decrement($key, $offset, $initial, $expire ?: $this->defaultExpire);
}
/**
* {@inheritdoc}
*/
public function touch($key, $expire)
{
return $this->cache->touch($key, $expire ?: $this->defaultExpire);
}
/**
* {@inheritdoc}
*/
public function flush()
{
return $this->cache->flush();
}
/**
* {@inheritdoc}
*/
public function getCollection($name)
{
return $this->cache->getCollection($name);
}
}
You would then use it like this:
// create \Memcached object pointing to your Memcached server
$client = new \Memcached();
$client->addServer('localhost', 11211);
// create Scrapbook cache object
$cache = new \MatthiasMullie\Scrapbook\Adapters\Memcached($client);
// add default TTL layer on top - default to TTL of 1 day
$cache = new DefaultExpiration($cache, 24 * 60 * 60);
// store something for half an hour
$cache->set('key', 'value', 30 * 60);
// store something without TTL (defaults to 1 day)
$cache->set('key', 'value');
from scrapbook.
Related Issues (20)
- tests cache/integration-tests dependency HOT 1
- Cache Statistics HOT 2
- Getting warning while get from APC
- Bottleneck in Couchbase Adapter HOT 1
- Trouble testing couchbase HOT 1
- Issue with Couchbase Adapter incompatibility (PHP 5.3)
- Compression HOT 2
- Stampede protection with "stale-while-revalidate" strategy? HOT 4
- PHP 7.4 error
- Documentation site returns 403 Forbidden HOT 1
- getClient HOT 1
- Redis wrong default value HOT 1
- Transaction savepoint HOT 1
- Stampede not working for phpredis > 4.0.0 HOT 2
- League Filesystem 2.0 HOT 1
- Update an existing value in cache causes the expire time (TTL) to be reset HOT 1
- undefined method: collection HOT 1
- Invalid key: test:string. Contains (a) character(s) reserved for future extension: HOT 4
- Support for psr/cache ^2.0 || ^3.0 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from scrapbook.