如何管理需要拼接的缓存 Key

疑难杂症   2023-04-14 09:03   309   0  
// 存储用户 ID 为 1 的验证码
$code = Cache::put('user_sms_code_' . Auth::id(), '1234', 60);  // user_sms_code_1

// 存储 ORDER_ID 为 1 商品秒杀库存
$code = Cache::put('order_locked_stock_' . $order_id, '1', 60);  // order_locked_stock_1

以上场景是开发中经常遇到的,看上去没什么问题,但有个隐患是我们的 Cache key 是一个字符串,如果我们需要在业务中频繁的读写,那么很可能会敲错导致出现意外的 bug。


为了解决这个问题,我们需要将 Cache key 定义为一个常量。

define('USER_SMS_CODE', 'user_sms_code_%d');
define('ORDER_LOCKED_STOCK', 'order_locked_stock_%d');

再次回到上面的代码:

// 存储用户 ID 为 1 的验证码
$code = Cache::put(sprintf(USER_SMS_CODE, Auth::id()), '1234', 60);  // user_sms_code_1

// 存储 ORDER_ID 为 1 商品秒杀库存
$code = Cache::put(sprintf(ORDER_LOCKED_STOCK, $order_id), '1', 60);  // order_locked_stock_1

这样我们在敲缓存 key 时会有 IDE 提示,用 sprintf 方法可以直接把 id 替换,避免了拼接的形式导致代码可读性变差。

这只是个简单的例子,如果要更严谨还需要对 key 合法性进行判断。

我从未见过一个早起、勤奋、谨慎,诚实的人抱怨命运。
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。
闲言碎语
厉害的不是你有多少后台,而是你能成为多少人的后台!
赞赏支持

如果觉得博客文章对您有帮助,异或土豪有钱任性,可以通过以下扫码向我捐助。也可以动动手指,帮我分享和传播。您的肯定,是我不懈努力的动力!感谢各位亲~