Appearance
计数器开发指南
本文档介绍 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;
}
}注意事项
- Redis 驱动提供原子操作,File 驱动存在竞态条件
- 返回值是新值,失败时返回
false - 建议生产环境使用 Redis,确保原子性
相关链接
最后更新:2024-12-20
维护者:DSPlatform技术团队(德尚网络)
获取帮助
如果您在使用过程中遇到问题,可以通过以下方式获取帮助:
- 官方网站:https://www.csdeshang.com
- 电话咨询:15364080101(微信同号)
- QQ咨询:858761000
- 邮箱咨询:858761000@qq.com
- 工作时间:工作日 9:00-18:00
- 微信咨询:扫码添加微信

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