Skip to content

缓存开发指南 ​

本文档介绍 DSMall Pro 项目中缓存系统的使用方法。

概述 ​

DSMall Pro 使用基于 KvManager 的缓存系统,支持多种存储后端(File、Redis等),并提供了标签管理功能。

核心组件 ​

KvManager ​

统一入口,提供缓存、锁、计数器、限流等功能:

php
use app\deshang\kv\KvManager;
use app\deshang\kv\keys\CacheKeyManager;

// 缓存操作
KvManager::cache()->set($key, $value, 3600, $tag);
KvManager::cache()->get($key, $default);
KvManager::cache()->delete($key);
KvManager::cache()->clear($tag);

CacheKeyManager ​

统一管理所有缓存键常量:

php
use app\deshang\kv\keys\CacheKeyManager;

// 使用缓存键
$cacheKey = sprintf(CacheKeyManager::GOODS_INFO_KEY, $goods_id);
$tag = CacheKeyManager::GOODS_TAG;

使用示例 ​

基本缓存操作 ​

php
use app\deshang\kv\KvManager;
use app\deshang\kv\keys\CacheKeyManager;

// 设置缓存
$cacheKey = sprintf(CacheKeyManager::STORE_INFO_KEY, $store_id);
KvManager::cache()->set($cacheKey, $storeInfo, 3600, CacheKeyManager::STORE_TAG);

// 获取缓存
$storeInfo = KvManager::cache()->get($cacheKey);

// 删除缓存
KvManager::cache()->delete($cacheKey);

// 清除标签缓存
KvManager::cache()->clear(CacheKeyManager::STORE_TAG);

完整示例 ​

php
class StoreService
{
    public function getStoreInfo($storeId)
    {
        $cacheKey = sprintf(CacheKeyManager::STORE_INFO_KEY, $storeId);
        $storeInfo = KvManager::cache()->get($cacheKey);
        
        if (empty($storeInfo)) {
            $storeInfo = $this->getStoreFromDatabase($storeId);
            KvManager::cache()->set($cacheKey, $storeInfo, 7200, CacheKeyManager::STORE_TAG);
        }
        
        return $storeInfo;
    }
    
    public function updateStore($storeId, $data)
    {
        $this->updateStoreInDatabase($storeId, $data);
        
        // 清除相关缓存
        $cacheKey = sprintf(CacheKeyManager::STORE_INFO_KEY, $storeId);
        KvManager::cache()->delete($cacheKey);
        
        // 或清除所有店铺相关缓存
        KvManager::cache()->clear(CacheKeyManager::STORE_TAG);
    }
}

配置说明 ​

环境变量 ​

env
CACHE_ENABLED=true

缓存配置 ​

在 config/cache.php 中配置缓存驱动:

php
return [
    'default' => 'file',
    'stores' => [
        'file' => [
            'type' => 'File',
            'path' => '',
            'prefix' => '',
            'expire' => 0,
        ],
        'redis' => [
            'type' => 'Redis',
            'host' => '127.0.0.1',
            'port' => 6379,
            'password' => '',
            'select' => 0,
        ],
    ],
];

最佳实践 ​

  1. 使用 CacheKeyManager 管理键常量,避免硬编码
  2. 合理使用缓存标签,便于批量管理
  3. 根据数据更新频率设置 TTL:静态数据 24 小时,动态数据 1 小时
  4. 数据更新后及时清除相关缓存

相关链接 ​


最后更新:2024-12-20
维护者:DSMall Pro技术团队(德尚网络)

获取帮助 ​

如果您在使用过程中遇到问题,可以通过以下方式获取帮助:

  • 官方网站:https://www.csdeshang.com
  • 电话咨询:15364080101(微信同号)
  • QQ咨询:858761000
  • 邮箱咨询:858761000@qq.com
  • 工作时间:工作日 9:00-18:00
  • 微信咨询:扫码添加微信
微信二维码

版权所有 © 2014-至今 德尚网络