PHP code example of migears / data-structure

1. Go to this page and download the library: Download migears/data-structure library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

migears / data-structure example snippets


use MiGears\DataStructure\RedisDataStructure;

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// The logger is 

$rest->set(Redis::class, function () {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    return $redis;
});

// in a resource:
$ds     = new RedisDataStructure($this->resolve(Redis::class), $logger);
$lock   = new RedisLock($this->resolve(Redis::class), $logger);

use MiGears\DataStructure\RedisDataStructure;

$ds = new RedisDataStructure($redis, $logger);

/* Hash */
$ds->hashSet('user:1', 'name', 'Alice');
$ds->hashGet('user:1', 'name');               // 'Alice'
$ds->hashIncrBy('user:1', 'points', 10);      // 10 (atomic)

/* List — FIFO queue (push to tail, pop from head) */
$ds->listPush('jobs', 'reindex', 'notify');   // 2  (length)
$ds->listPop('jobs');                         // 'reindex'
$ds->listLen('jobs');                         // 1

/* Set */
$ds->setAdd('tags:new', ['php', 'redis']);
$ds->setIsMember('tags:new', 'php');          // true
$ds->setMembers('tags:new');                  // ['php', 'redis']

/* Sorted Set (ZSet) — leaderboard */
$ds->zAdd('board', 100, 'alice');
$ds->zAdd('board', 90, 'bob');
$ds->zRange('board');                         // ['bob' => 90.0, 'alice' => 100.0] (asc)
$ds->zSelect('board');                        // ['alice' => 100.0, 'bob' => 90.0] (desc)
$ds->zIncrBy('board', 'alice', 5);            // 105.0

/* TTL */
$ds->expire('board', 3600);
$ds->ttl('board');                            // ~3600
$ds->persist('board');                        // remove expiry

use MiGears\DataStructure\RedisLock;

$lock = new RedisLock($redis, $logger);

if ($lock->lock('job:report', 30)) {          // 30s TTL, acquire returns bool
    try {
        // critical section
    } finally {
        $lock->unlock('job:report');          // released only if we still own it
    }
}

$tenantCache = $ds->withPrefix('tenant:42:');
$tenantCache->hashSet('config', 'theme', 'dark');   // stores "tenant:42:config"

use MiGears\DataStructure\RedisDataStructure;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$logger = new Logger('ds');
$logger->pushHandler(new StreamHandler('ds.log'));

$ds = new RedisDataStructure($redis, $logger);

use MiGears\DataStructure\RedisDataStructure;

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 日志器为必填,必须由调用方传入。
$ds = new RedisDataStructure($redis, $logger);

$rest->set(Redis::class, function () {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    return $redis;
});

// 在资源类中:
$ds     = new RedisDataStructure($this->resolve(Redis::class), $logger);
$lock   = new RedisLock($this->resolve(Redis::class), $logger);

use MiGears\DataStructure\RedisDataStructure;

$ds = new RedisDataStructure($redis, $logger);

/* Hash */
$ds->hashSet('user:1', 'name', 'Alice');
$ds->hashGet('user:1', 'name');               // 'Alice'
$ds->hashIncrBy('user:1', 'points', 10);      // 10(原子)

/* List —— FIFO 队列(尾部入队,头部出队) */
$ds->listPush('jobs', 'reindex', 'notify');   // 2(长度)
$ds->listPop('jobs');                         // 'reindex'
$ds->listLen('jobs');                         // 1

/* Set */
$ds->setAdd('tags:new', ['php', 'redis']);
$ds->setIsMember('tags:new', 'php');          // true
$ds->setMembers('tags:new');                  // ['php', 'redis']

/* 有序集合(ZSet)——排行榜 */
$ds->zAdd('board', 100, 'alice');
$ds->zAdd('board', 90, 'bob');
$ds->zRange('board');                         // ['bob' => 90.0, 'alice' => 100.0](升序)
$ds->zSelect('board');                        // ['alice' => 100.0, 'bob' => 90.0](降序)
$ds->zIncrBy('board', 'alice', 5);            // 105.0

/* TTL */
$ds->expire('board', 3600);
$ds->ttl('board');                            // 约 3600
$ds->persist('board');                        // 移除过期时间

use MiGears\DataStructure\RedisLock;

$lock = new RedisLock($redis, $logger);

if ($lock->lock('job:report', 30)) {          // 30s TTL,获取返回 bool
    try {
        // 临界区
    } finally {
        $lock->unlock('job:report');          // 仅当仍持有该锁时才会被释放
    }
}

$tenantCache = $ds->withPrefix('tenant:42:');
$tenantCache->hashSet('config', 'theme', 'dark');   // 实际存储 "tenant:42:config"

use MiGears\DataStructure\RedisDataStructure;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$logger = new Logger('ds');
$logger->pushHandler(new StreamHandler('ds.log'));

$ds = new RedisDataStructure($redis, $logger);