松菊 发表于 2025-8-12 12:22:29

用 Amazon Q AI 写了个 PHP 缓存库,解决” 若无则获取并回填” 这个老问题

用 Amazon Q AI 写了个 PHP 缓存库,解决"若无则获取并回填"这个老问题

背景

最近在项目中频繁遇到这样的代码:
$cacheKey = "user:profile:{$userId}";
$data = $redis->get($cacheKey);
if ($data === false) {
    $data = $this->getUserFromDatabase($userId);
    $redis->setex($cacheKey, 3600, json_encode($data));
} else {
    $data = json_decode($data, true);
}这种"检查缓存 → 未命中则获取 → 回填缓存"的模式到处都是,每次都要写一遍,还容易出错。想着能不能简化一下,就试着用 Amazon Q AI 来帮忙写个库。
成果

最终做出来的效果是这样的:
// 原来需要 7-8 行的逻辑,现在一行搞定
$user = kv_get('user.profile', ['id' => 123], function() {
    return getUserFromDatabase(123); // 只在缓存未命中时执行
});批量操作也很简单:
$users = kv_get_multi('user.profile', [
    ['id' => 1], ['id' => 2], ['id' => 3]
], function($missedKeys) {
    // 只查询缓存中没有的数据
    $data = [];
    foreach ($missedKeys as $cacheKey) {
      $params = $cacheKey->getParams();
      $data[(string)$cacheKey] = getUserFromDatabase($params['id']);
    }
    return $data;
});开发过程

整个开发过程主要是和 Amazon Q 对话,描述需求,然后它帮忙写代码。大概的流程:

[*]需求描述:我说想要一个简化缓存操作的库
[*]架构设计:Q 建议了工厂模式 + 键管理的架构
[*]功能实现:逐步实现核心功能、批量操作、统计等
[*]代码优化:Q 帮忙重构了几次,让代码更简洁
[*]文档编写:README 和各种文档也是 Q 帮忙写的
说实话,AI 写代码的效率确实高,特别是这种有明确需求的工具库。当然也不是完全不用动脑子,需要不断地描述需求、提出改进意见。
主要特性


[*]自动回填:缓存未命中时自动执行回调并缓存结果
[*]批量优化:避免 N+1 查询问题
[*]统计监控:命中率、热点键统计
[*]按前缀删除:相当于按 tag 删除缓存
[*]热点续期:自动延长热点数据缓存时间
安装使用

composer require asfop/cache-kvuse Asfop\CacheKV\Core\CacheKVFactory;

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

// 开始使用
$data = kv_get('user.profile', ['id' => 123], function() {
    return getUserFromDatabase(123);
});一些思考

用 AI 写代码这事儿,感觉有几个点:
优势:

[*]效率确实高,特别是写工具库这种相对标准的代码
[*]能快速生成文档、测试用例
[*]对于架构设计有不错的建议
局限:

[*]还是需要人来把控需求和方向
[*]复杂的业务逻辑还是得自己想
[*]生成的代码需要仔细review
总的来说,AI 更像是一个很厉害的编程助手,能大大提高开发效率,但不能完全替代思考。
项目地址


[*]GitHub: https://github.com/g1012415019/CacheKV
[*]Packagist: https://packagist.org/packages/asfop/cache-kv

代码都开源了,有兴趣的可以看看。如果觉得有用,给个 star 就很开心了
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 用 Amazon Q AI 写了个 PHP 缓存库,解决” 若无则获取并回填” 这个老问题