PHP Classes

CacheOne: Store and retrieve data in groups using Redis

Recommend this page to a friend!
  Info   View files View files (7)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Ratings Unique User Downloads Download Rankings
Not yet rated by the usersTotal: 104 This week: 1All time: 9,716 This week: 560Up
Version License PHP version Categories
cacheone 1.0.1GNU Lesser Genera...5Networking, PHP 5, Cache
Description 

Author

This package can store and retrieve data in groups using Redis.

It can connect to a Redis instance and store data associated to given values within a given group specified by name.

The package can also invalidate data stored with given keys or even invalidate all data in a given group of keys.

Innovation Award
PHP Programming Innovation award nominee
December 2018
Number 10
Caching frequently accessed data is an important measure to get more performance from a software system.

Redis is a fast storage system that can be used to cache data.

This package not only can store and retrieve data to cache using Redis, but it can also clean up whole groups of cached data at once thus making it easy to cleanup specific sets of cached data after it is no longer needed.

Manuel Lemos
Picture of Jorge Castro
  Performance   Level  
Name: Jorge Castro <contact>
Classes: 30 packages by
Country: Chile Chile
Age: 48
All time rank: 12763 in Chile Chile
Week rank: 106 Up1 in Chile Chile Up
Innovation award
Innovation award
Nominee: 14x

Winner: 2x

Details

CacheOne

CacheOne is a cache class of service for php. It supports Redis, Memcache 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.

Packagist Total Downloads [Maintenance]() [composer]() [php]() [CocoaPods]()

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);

Definitions

Creating a new instance of CacheOne

Creates a new connection using redis

use eftec\CacheOne;
include "../vendor/autoload.php";
$cache=new CacheOne("redis","127.0.0.1","",6379);

Creates a new connection using apcu

use eftec\CacheOne;
include "../vendor/autoload.php";
$cache=new CacheOne("apcu");

Creates a new connection using memcache

use eftec\CacheOne;
include "../vendor/autoload.php";
$cache=new CacheOne("memcache","127.0.0.1");

or creating a new connection, or redis, or memcache or apcu (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 store a value inside a group and a key. It returns false if the operation failed.

$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 

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 clean 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 (and delete all the redis repository, memcache or apcu)

$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)
$cache->setSerializer('json-array'); // set the serializer to json-array
$cache->setSerializer('json-object'); // set the serializer to json-object
$cache->setSerializer('none'); // set the serializer to none (the value must be serialized)
 

getSerializer();

Get the how the values are serialized.

$type=$cache->getSerializer(); // get php,json-array,json-object or none

Select a database (Redis)

> select($dbindex)

It selects a different database. By default the database is 0.

$cache->select(1);

Version

  • 2.3.1 * fix: The catalog is always stored as an array, even if the serializer is json-object
  • 2.3 * Added method setSerializer() and getSerializer(). By default CacheOne uses PHP for serialization. With this feature, it is possible to serialize using json or none
  • 2.2.2 2020-03-13 * Now the duration of the catalog is always lasting than the duration of the key * Tested the duration and expiration of the cache. * phpunit now is part of "require-dev" instead of "require"
  • 2.2.1 2020-03-12 * Internal: key names are not store inside the group. The group is store inside the schema * Internal: The catalog has a duration defined by $cache->catDuration (seconds)
  • 2.2 2020-03-12 * wrappers getCache(),setCache(),invalidateCache()
  • 2.1 2020-03-12 * Unit test * get() has a default value $defaultValue * new method invalidateAll()
  • 2.0 2020-03-12 Updated the whole class. Now it works as a single class.
  • 1.4.2 2019-07-30 Added select() to select a different database index. It also adds timeout for the constructor
  • 1.4.1 2018-08-15 Added an internal function that obtains the id.
  • 1.4 2018-09-05 Fixed the groups
  • 1.3.1 2018-06-09 First published version

License

MIT License. Copyright Jorge Castro Castillo


  Files folder image Files  
File Role Description
Files folder imagelib (1 file)
Files folder imagetest (2 files)
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file LICENSE Lic. License text
Accessible without login Plain text file phpunit.xml Data Auxiliary data
Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files  /  lib  
File Role Description
  Plain text file CacheOne.php Class Class source

  Files folder image Files  /  test  
File Role Description
  Accessible without login Plain text file bootstrap.php Aux. Auxiliary script
  Plain text file CacheOneTest.php Class Class source

 Version Control Unique User Downloads Download Rankings  
 100%
Total:104
This week:1
All time:9,716
This week:560Up