ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
几乎每家社交网站和视频网站都广泛的应用了计数器功能(点赞,顶/踩),尤其热门消息的时候计数器增长更是成倍增长。通常的解决方案就是存入 Redis 中,再定时持久化到关系型数据库中(MySQL)。 ## 写入计数器 ~~~ public function addCount($video_id) { $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); $redis->incr("v:c:{$video_id}"); // $redis->incrBy("v:c:{$video_id}", 1); // $redis->incrBy("v:c:{$video_id}", -1); } ~~~ ## 定时读取计数器 使用计划任务,每隔一段时间执行一次函数。ThinkPHP5 推荐使用自定义命令行工具。 ~~~ public function AsyncWriteCount($video_id) { $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); $count = $redis->get("v:c:{$video_id}"); // ====================== // 写入数据库 // ====================== if (/* 写入数据库成功 */) { $redis->set("v:c:{$video_id}", 0); } } ~~~ 以上只是最简单的演示代码,实际项目中不会使用简单的字符串来做计数器,通常是列表或者有序集合