asfop/cache-kv

简化缓存操作的 PHP 库,专注于实现若无则从数据源获取并回填缓存这一常见模式

v1.1.0 2025-08-12 07:46 UTC

This package is auto-updated.

Last update: 2025-08-13 03:00:14 UTC


README

CacheKV 是一个专注于简化缓存操作的 PHP 库,核心功能是实现"若无则从数据源获取并回填缓存"这一常见模式

PHP Version License Packagist Version Packagist Downloads GitHub Stars GitHub Issues

🎯 核心价值

CacheKV 让缓存操作变得简单:

// 一行代码搞定:检查缓存 → 未命中则获取数据 → 自动回填缓存
$data = kv_get('user.profile', ['id' => 123], function() {
    return getUserFromDatabase(123); // 只在缓存未命中时执行
});

解决的痛点:

  • ❌ 手动检查缓存是否存在
  • ❌ 缓存未命中时手动从数据源获取
  • ❌ 手动将获取的数据写入缓存
  • ❌ 批量操作时的复杂逻辑处理

⚡ 快速开始

安装

composer require asfop/cache-kv

基础使用

<?php
require_once 'vendor/autoload.php';

use Asfop\CacheKV\Core\CacheKVFactory;

// 配置Redis连接
CacheKVFactory::configure(function() {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    return $redis;
});

// 单个数据获取
$user = kv_get('user.profile', ['id' => 123], function() {
    return ['id' => 123, 'name' => 'John', 'email' => 'john@example.com'];
});

// 批量数据获取
$users = kv_get_multi('user.profile', [
    ['id' => 1], ['id' => 2], ['id' => 3]
], function($missedKeys) {
    $data = [];
    foreach ($missedKeys as $cacheKey) {
        $keyString = (string)$cacheKey;
        $params = $cacheKey->getParams();
        $data[$keyString] = getUserFromDatabase($params['id']);
    }
    return $data; // 返回关联数组
});

// 批量获取键对象(不执行缓存操作)
$keys = kv_get_keys('user.profile', [
    ['id' => 1], ['id' => 2], ['id' => 3]
]);

// 检查键配置
foreach ($keys as $keyString => $keyObj) {
    echo "键: {$keyString}, 有缓存配置: " . ($keyObj->hasCacheConfig() ? '' : '') . "\n";
}

🚀 核心功能

  • 自动回填缓存:缓存未命中时自动执行回调并缓存结果
  • 批量操作优化:高效的批量获取,避免N+1查询问题
  • 按前缀删除:支持按键前缀批量删除缓存,相当于按 tag 删除
  • 热点键自动续期:自动检测并延长热点数据的缓存时间
  • 统计监控:实时统计命中率、热点键等性能指标
  • 统一键管理:标准化键生成,支持环境隔离和版本管理

📊 统计功能

// 获取统计信息
$stats = kv_stats();
// ['hits' => 1500, 'misses' => 300, 'hit_rate' => '83.33%', ...]

// 获取热点键
$hotKeys = kv_hot_keys(10);
// ['user:profile:123' => 45, 'user:profile:456' => 32, ...]

// 清空统计数据
kv_clear_stats();

✨ 简洁API设计

CacheKV 提供了简洁易用的函数API:

🔧 核心操作

kv_get($template, $params, $callback, $ttl)      // 获取缓存
kv_get_multi($template, $paramsList, $callback)  // 批量获取

🗝️ 键管理

kv_key($template, $params)           // 创建键字符串
kv_keys($template, $paramsList)      // 批量创建键
kv_get_keys($template, $paramsList)  // 获取键对象

🗑️ 删除操作

kv_delete($template, $params)         // 删除指定缓存
kv_delete_prefix($template, $params)  // 按前缀删除
kv_delete_full($prefix)               // 按完整前缀删除

📊 统计功能

kv_stats()              // 获取统计信息
kv_hot_keys($limit)     // 获取热点键
kv_clear_stats()        // 清空统计

⚙️ 配置管理

kv_config()     // 获取配置对象(可转换为数组)

📚 文档

🏆 适用场景

  • Web 应用 - 用户数据、页面内容缓存
  • API 服务 - 接口响应、计算结果缓存
  • 电商平台 - 商品信息、价格、库存缓存
  • 数据分析 - 统计数据、报表缓存

📋 系统要求

  • PHP >= 7.0
  • Redis 扩展

📄 许可证

MIT License - 详见 LICENSE 文件

开始您的高效缓存之旅! 🚀

💡 提示: 查看 完整文档 了解详细的配置和高级用法