用 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-kv
use 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 就很開心了 ??
這個庫主要解決的就是緩存操作的重復代碼問題,沒什么高深的技術,就是讓常見操作更簡單一些。

浙公網安備 33010602011771號