外观
Token、ID 与缓存
Pin 将 Token、ID 生成和 Redis Hash Cache 放在独立模块里,适合认证、分布式 ID、权限缓存和业务热点数据。
Token
Token 门面:
php
use Pin\Support\Facades\Token;
$token = Token::encode([
'uid' => 1001,
], expires: 7200);
$payload = Token::decode($token)->payload;也可以选择指定 driver:
php
$jwt = Token::driver('jwt')->encode(['uid' => 1001], 7200);
$session = Token::driver('session')->encode(['uid' => 1001]);Token Driver
内置三种 driver:
| Driver | 特点 |
|---|---|
aes | AES 加密 payload,无状态,适合内部系统和简单认证 |
jwt | 基于 firebase/php-jwt,适合标准 JWT 对接 |
session | 基于 Cache 的有状态 Token,支持主动失效、滑动过期和最大生命周期 |
配置示例:
php
return [
'default' => 'default',
'drivers' => [
'default' => [
'driver' => 'aes',
],
'jwt' => [
'driver' => 'jwt',
'algo' => 'HS256',
// 'key' => env('JWT_KEY'),
],
'session' => [
'driver' => 'session',
'expires' => 7200,
'cache_prefix' => 'token:',
'refresh_before' => 600,
'max_age' => 86400,
],
],
];Session Token 注销:
php
Token::driver('session')->forget($token);自定义 Token Driver
php
use Pin\Support\Facades\Token;
Token::extend('custom', function ($app, array $config) {
return new Pin\Token\TokenFactory(new CustomTokenDriver($config));
});自定义底层 driver 需要实现 Pin\Token\Contracts\TokenDriver。
ID 生成
统一入口:
php
use Pin\IdGenerator\Id;
use Pin\IdGenerator\IdGenerator;
$id = Id::generate();
$ids = Id::generate(10);
$snowflake = Id::generate(generator: IdGenerator::Snowflake);内置生成器:
| 生成器 | 配置 key | 说明 |
|---|---|---|
Timestamp | timestamp | 基于时间戳的趋势递增 ID |
Redis | redis | 基于 Redis INCR 的全局递增 ID |
Snowflake | snowflake | 基于 Snowflake 的分布式 ID |
默认生成器由 config('id-generator.default') 控制。
模型 ID Trait
模型层提供多个 ID 相关 trait:
Pin\Models\Concerns\TimestampIdPin\Models\Concerns\RedisIdPin\Models\Concerns\SnowflakeIdPin\Models\Concerns\GeneratorId
树模型默认使用 RedisId。
Redis Hash Cache
HashCache 代理到 Laravel cache store redis-hash:
php
use Pin\Support\Facades\HashCache;
HashCache::put('users:1', ['name' => 'Pin'], 3600);
$user = HashCache::get('users:1');
$all = HashCache::getAll('users');
HashCache::del('users');HashKey 使用最后一个 : 拆分 hash key 和 field:
text
users:1会被解析为:
text
hash key: users
field: 1配置:
php
'stores' => [
'redis-hash' => [
'driver' => 'redis-hash',
'store' => 'redis-hash',
'connection' => 'cache',
'ttl' => 604800,
],
],