Skip to content

计数器开发指南

本文档介绍 DSPlatform 项目中计数器的使用方法。

概述

计数器用于原子递增/递减操作,支持 Redis(原子操作)和 File(降级处理)两种驱动。

核心组件

KvManager::counter()

提供计数器的递增和递减功能:

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

// 递增
$key = sprintf(CounterKeyManager::GOODS_VIEW_COUNT_KEY, $goods_id);
$newValue = KvManager::counter()->increment($key, 1);

// 递减
$newValue = KvManager::counter()->decrement($key, 1);

CounterKeyManager

统一管理所有计数器键常量:

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

// 商品浏览量
$key = sprintf(CounterKeyManager::GOODS_VIEW_COUNT_KEY, $goods_id);

// 用户登录次数
$key = sprintf(CounterKeyManager::USER_LOGIN_COUNT_KEY, $user_id);

使用示例

基本用法

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

// 增加商品浏览量
$key = sprintf(CounterKeyManager::GOODS_VIEW_COUNT_KEY, $goods_id);
$count = KvManager::counter()->increment($key, 1);

// 减少库存
$key = sprintf(CounterKeyManager::GOODS_STOCK_KEY, $goods_id);
$stock = KvManager::counter()->decrement($key, 1);

完整示例

php
class GoodsService
{
    public function viewGoods($goods_id)
    {
        // 增加浏览量
        $viewKey = sprintf(CounterKeyManager::GOODS_VIEW_COUNT_KEY, $goods_id);
        $viewCount = KvManager::counter()->increment($viewKey, 1);
        
        // 获取商品信息
        $goods = $this->getGoodsInfo($goods_id);
        $goods['view_count'] = $viewCount;
        
        return $goods;
    }
    
    public function decreaseStock($goods_id, $quantity)
    {
        $stockKey = sprintf(CounterKeyManager::GOODS_STOCK_KEY, $goods_id);
        $stock = KvManager::counter()->decrement($stockKey, $quantity);
        
        if ($stock < 0) {
            // 回退
            KvManager::counter()->increment($stockKey, $quantity);
            throw new CommonException('库存不足');
        }
        
        return $stock;
    }
}

注意事项

  1. Redis 驱动提供原子操作,File 驱动存在竞态条件
  2. 返回值是新值,失败时返回 false
  3. 建议生产环境使用 Redis,确保原子性

相关链接


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

获取帮助

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

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

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