Rumah > Artikel > rangka kerja php > Kongsi rekod kelas perkhidmatan operasi Redis dalam rangka kerja TP6
Berikut ialah ruangan tutorial rangka kerja thinkphp untuk berkongsi dengan anda rekod kelas perkhidmatan operasi Redis dalam ThinkPHP6 Saya harap ia dapat membantu rakan-rakan yang memerlukan.
1. Tentukan kelas perkhidmatan
<?php declare (strict_types=1); namespace app\api\service\common; use think\facade\Cache; /** * 缓存服务 * Class RedisService * * @package app\api\service\common */ class RedisService { private $expire; private $expire_at; /** * 获取redis句柄 * * @return object|null */ public function client(): ?object { return Cache::store('redis')->handler(); } /** * 处理缓存key(添加前缀...) * * @param string $key key * * @return string */ private function cacheKey(string $key): string { return Cache::getCacheKey($key); } /** * 缓存程序运行结果 * * @param $key * @param callable $callback * @param int $expire * * @return mixed */ public function cache($key, callable $callback, int $expire = 3600) { $cache = $this->client()->get($key); if (! $cache || ! unserialize($cache)) { $data = $callback(); $this->client()->set($key, $cache = serialize($data), $expire); } return unserialize($cache); } /** * 程序运行锁 * @param $key * @param callable $callback * @param int $timeout * * @return array */ public function lock($key, callable $callback, int $timeout = 10): array { $lock = $this->client()->get($key); if ($lock) return ['code' => 0, 'data' => null]; $this->client()->setex($key, $timeout, 1); $data = $callback(); $this->client()->del($key); return ['code' => 1, 'data' => $data]; } /** * 设置有效时间 * * @param $ttl * * @return $this|false * @throws \Exception */ public function setExpire($ttl) { if ($this->expire_at) throw new \Exception('setExpire and setExpireAt can not set both'); $this->expire = $ttl; return $this; } /** * 设置到期时间 * * @param $timestamp * * @return $this|false * @throws \Exception */ public function setExpireAt($timestamp) { if ($this->expire > 0) throw new \Exception('setExpire and setExpireAt can not set both'); $this->expire_at = $timestamp; return $this; } /** * 调用原生redis方法 * * @return mixed */ public function __call($name, $arguments) { $cache_key = $this->cacheKey($arguments[0]); $result = $this->client()->{$name}(...$arguments); // 设置过期时间 $this->expire && $this->client()->expire($cache_key, $this->expire); $this->expire_at && $this->client()->expireAt($cache_key, $this->expire_at); return $result; } }
2. Cara menggunakan
<?php namespace app\api\facade; use app\api\service\common\RedisService; use think\Facade; /** * Class Redis * * @package app\api\facade * * @method static \Redis client() * @method static \Redis setExpire($ttl) * @method static \Redis setExpireAt($timestamp) * @method static mixed cache($key, callable $callback, int $expire = 3600) * @method static array lock($key, callable $callback, int $timeout = 10) */ class Redis extends Facade { protected static function getFacadeClass() { return RedisService::class; } }3.1 Kunci program
3.2 Cache data kaedah
3.3 Tetapan masa tamat tempoh yang dipermudahkanpublic function test() { $a = 1; $b = 2; $result = Redis::lock('lock:demo', function () use ($a, $b) { return $a + $b; }, 5); if ($result['code'] == 0) return '操作频繁,请稍后再试'; return $result['data']; // 成功返回数据 3 }3.4 Panggilan biasa
public function test() { $a = 1; $b = 2; $result = Redis::cache('cache:demo', function () use ($a, $b) { return $a + $b; }, 5); return $result; // 成功返回数据 3,有效时长5秒 }Disyorkan: "
// 24小时到期 Redis::setExpire(86400)->hSet('expire:demo', 'hash-key', 'hash-value'); // 2021-08-24 23:59:59到期 Redis::setExpireAt(strtotime('2021-08-24 23:59:59'))->hSet('expireAt:demo', 'hash-key', 'hash-value');Tutorial video 10 thinkphp terkini
"
Atas ialah kandungan terperinci Kongsi rekod kelas perkhidmatan operasi Redis dalam rangka kerja TP6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!