CacheOne
CacheOne is a cache of service for php
Install / Use
/learn @EFTEC/CacheOneREADME
CacheOne
CacheOne is a cache class of service for php. It supports Redis, Memcache, PDO and/or APCU.
Unlikely other cache libraries, this library is based in group (optional). So it's suitable to invalidate a single key or an entire group of elements.
Example
use eftec\CacheOne;
include "vendor/autoload.php"; // composer's autoload
$cache=new CacheOne("redis","127.0.0.1","",6379);
$cacheValue=$cache->get('','countries'); // read the cache (if any) otherwise false
if($cacheValue===false) {
echo "generating a new list of countries..<br>";
$countries=['USA','Canada','Japan','Chile'];
$cache->set('','countries',$countries,500); // store into the cache for 500 seconds.
} else {
echo "read from cache<br>";
$countries=$cacheValue;
}
var_dump($countries);
Table of Contents
<!-- TOC --> <!-- TOC -->Definitions
Creating a new instance of CacheOne
Creates a new connection using Redis (Redis is an on memory cache library)
use eftec\CacheOne;
include "../vendor/autoload.php";
$cache=new CacheOne("redis","127.0.0.1","",6379);
Creates a new connection using apcu (APCU is an extension for PHP to cache content)
use eftec\CacheOne;
include "../vendor/autoload.php";
$cache=new CacheOne("apcu");
Creates a new connection using PdoOne (PdoOne is a library to connect to the database using PDO)
use eftec\PdoOne;
use eftec\CacheOne;
include "../vendor/autoload.php";
$pdo=new PdoOne('mysql','127.0.0.1','root','abc.123','travisdb',false,null,1,'KVTABLE');
$pdo->logLevel=3; // optional, if you want to debug the errors.
$pdo->open();
// $pdo->createTableKV(); // you should create the key-value table if it doesn't exist.
$cache=new CacheOne("pdoone"); // the instance $pdo is injected automatically into CacheOne.
or you could use to create a PdoOne instance:
$cache=new CacheOne(
"pdoone",
['mysql','127.0.0.1','root','abc.123','travisdb',false,null,1,'KVTABLA']
);
Creates a new connection using memcache (Memcache is an old, but it is still a functional memory cache server)
use eftec\CacheOne;
include "../vendor/autoload.php";
$cache=new CacheOne("memcache","127.0.0.1"); // minimum configuration
$cache=new CacheOne("memcache","127.0.0.1",11211,'schema'); // complete configuration
Creates a new connection using the class DocumentOne (file system)
This example requires the library eftec/documentstoreone
use eftec\CacheOne;
include "../vendor/autoload.php";
$cache=new CacheOne("documentone",__DIR__."/base","schema"); // folder /base/schema must exists
The library DocumentStoreOne works with concurrency.
or creating a new connection, using redis, memcache, apcu or documentone (it takes the first available)
use eftec\CacheOne;
include "../vendor/autoload.php";
$cache=new CacheOne("auto");
Storing a value
function set($group, $key, $value, $duration = 1440): bool
It stores a value inside a group and a key. It returns false if the operation failed.
Note: The duration is ignored by "documentone"
$cache->set("group","key1","hello world",500);
$cache->set("group","key2","hola mundo",500);
Group is optional, and it could be used if we need to invalidate (delete) an entire group.
Getting a value
function get($group, $key, $defaultValue = false)
It gets a value stored in a group (optional) and key. If the value is not found then it returns false. Note: a false value could be a valid value.
$result=$cache->get("group","key1");
$result=$cache->get("","key2");
$result=$cache->get("","key2","not found"); // if not key2 (groupless) then it returns not found
setDefaultTTL
$result=$cache->setDefaultTTL(50); // it sets the default time to live. "documentone" one uses it.
$result=$cache->getDefaultTTL(); // it gets the time to live
Pushing and Popping values form an array
push
It pushes (adds) a new value at the end of the array. If the array does not exist, then it is created a new array. This command allows to limit the numbers of elements of the array.
Syntax:
push($groups, $key, $value, $duration = null, $limit = 0, $limitStrategy = 'shiftold') : bool
- $Limit is used to limit the number maximum of elements of the array, if zero, then it does not limit the elements.
- $LimitStrategy is used to determine what to do when we are adding a new element and the limit has been reached, shiftold removes the first element of the array, nonew does not allow to add a new element, popold removes the latest element of the array (if the limit has been reached).
// cart could be [1,2,3]
$cache->push('','cart',4,2000); // it adds a new element into the cart unlimitely cart is [1,2,3,4]
$cache->push('','cart',5,2000,4,'shiftold'); // it limits the cart to 20 elements, pop old item if req. cart is [2,3,4,5]
$cache->push('','cart',6,2000,4,'nonew'); // if the cart has 20 elements, then it doesn't add $item. cart now is [2,3,4,5]
unshift
It unshift (add) a new value at the beginner of the array. If the array does not exist, then it is created a new array. This command allows to limit the numbers of elements of the array.
Syntax:
unshift($groups, $key, $value, $duration = null, $limit = 0, $limitStrategy = 'popold') : bool
- $Limit is used to limit the number maximum of elements of the array, if zero, then it does not limit the elements.
- $LimitStrategy is used to determine what to do when we are adding a new element and the limit has been reached, shiftold removes the first element of the array, nonew does not allow to add a new element, popold removes the latest element of the array (if the limit has been reached).
// cart could be [1,2,3]
$cache->unshift('','cart',4,2000); // it adds a new element into the cart unlimitely cart is [4,1,2,3]
$cache->unshift('','cart',5,2000,4,'shiftold'); // it limits the cart to 20 elements, pop old item if req. cart is [2,3,4,5]
$cache->unshift('','cart',6,2000,4,'nonew'); // if the cart has 20 elements, then it doesn't add $item. cart now is [2,3,4,5]
pop
It pops (extract) a value at the end of the array. If the value does not exist then it returns $defaultValue The original array is modified removing the last element of the array.
Syntax:
pop($group, $key, $defaultValue = false, $duration = null) : mixed
// cart could be [1,2,3,4];
$element=$this->pop('','cart'); // now cart is [1,2,3] and $element is 4
shift
It shifts (extract) a value at the beginner of the array. If the value does not exist then it returns $defaultValue The original array is modified removing the last element of the array.
Syntax:
pop($group, $key, $defaultValue = false, $duration = null) : mixed
// cart could be [1,2,3,4];
$element=$this->shift('','cart'); // now cart is [2,3,4] and $element is 1
invalidate a key
function invalidate($group = '', $key = ''): bool
It invalidates a specific key. If the operation fails, then it returns false
$cache->invalidate("group","key1"); // invalidate a key inside a group
$cache->invalidate("","key1"); // invalidate a key without a group.
invalidate a group
invalidateGroup($group): bool
It invalidates every key(s) inside a group of groups. It also cleans the catalog of the group and sets it to an empty array.
$cache->invalidateGroup("group"); // invalidate all keys inside group
$cache->invalidateGroup(["group1","group2"]); // invalidate all key inside group1 and group2
invalidate all
invalidateAll()
It invalidates all cache.
In redis, it deletes the current schema. If not schema, then it deletes all Redis
In memcached and <b>apcu</b>, it deletes all cache
In <b>documentone</b> it deletes the content of the database-folder
$cache->invalidateAll();
setSerializer($serializer)
It sets how the values are serialized. By default, it's PHP.
$cache->setSerializer('php'); // set the serializer to php (default value). It is fastest but it uses more space.
$cache->setSerializer('json-array'); // set the serializer to json-array. It uses fewer space than PHP however it
Related Skills
node-connect
341.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.6kCommit, push, and open a PR
