php基于Redis实现播放量增加功能

开发思路就是用redis得有序组合功能
1.先自增到reids中
$redisGetKey = 'ciku_promoter_click_number';
$jyId = 2; // 文章id
$redis = RedisService::build()->getInstance();
$videoPlayNumber = $redis->zScore($redisGetKey, $jyId);
// 如果该文章id存在,则新增,否则自增1
if ($videoPlayNumber) { $redis->zAdd($redisGetKey, intval($videoPlayNumber + 1), $jyId); }else{ $redis->zAdd($redisGetKey, 1, $jyId); }
2.再从redis取出并匹配自增
	// 统计redis中的点击量,写入数据库中
	public function setPromoterClickNumber()
	{
		$redis = RedisService::build()->getInstance();
		$redisKey = 'ciku_promoter_click_number';
		// 获取有序集合中的全部数据
		$newArticleList = [];
		$articleIdArr = $redis->zRange($redisKey, 0, -1);
		foreach ($articleIdArr as $key => $value) {
			$redisKeyNumber = $redis->zScore($redisKey, $value);
			if ($redisKeyNumber) {
				$newArticle['id'] = $value;
				$newArticle['click_number'] = intval($redisKeyNumber);
				$newArticleList[] = $newArticle;
			}
		}

		$articleList = PromoterUser::build()->where('id','in',$articleIdArr)->column('click_number','id');
		// 更新文章的点击量
		$updateArticleList = [];
		foreach ($articleList as $key => $value) {
			foreach ($newArticleList as $key1 => $value1) {
				if ($key == $value1['id']) {
					$updateArticle['id'] = $key;
					$updateArticle['click_number'] = $value + $value1['click_number'];
					$updateArticleList[] = $updateArticle;
				}
			}
		}
     // 组合sql语句,批量更新
		if ($updateArticleList) {
            $updateField = ['click_number'];
            $this->sqlBatchUpdate('cy_promoter_user', $updateArticleList, $updateField, 'id');
        }
		// 删除有序集合中的全部数据
		$redis->del($redisKey);
	}

  

3.组合sql语句,批量更新
	/**
	 * 数据用sql批量更新
	 *
	 * @param [type] $tableName     表名,包含表前缀
	 * @param [type] $updateData	待更新数据列表
	 * @param [type] $updateField  	更新字段数组列表,顺序需要与数据列表一致
	 * @param [type] $whereId		更新条件,id、order_sn等
	 * @return void
	 */
	public function sqlBatchUpdate($tableName, $updateData, $updateField, $whereId)
	{
		$updateValueSql = '';
		$updateIdSql = '';
		$updateKey = $updateField;
		foreach ($updateKey as $key) {
			$n = 0;
			foreach ($updateData as $value) {
				$n++;
				if ($n == 1) {
					$updateValueSql .= $key . " = CASE $whereId ";
				}
				$updateValueSql .= 'WHEN \'' . $value[$whereId] . '\' THEN \'' . $value[$key] . '\'';
				if ($n != count($updateData)) {
					$updateValueSql .= " ";
				} else {
					$updateValueSql .= " END,";
				}
			}
		}
		$updateValueSql = substr($updateValueSql, 0, strlen($updateValueSql) - 1);
		$n = 0;
		foreach ($updateData as $value) {
			$n++;
			if ($n == 1) {
				$updateIdSql .= "(";
			}
			$updateIdSql .= ' \'' . $value[$whereId] . '\' ';
			if ($n != count($updateData)) {
				$updateIdSql .= ",";
			} else {
				$updateIdSql .= ")";
			}
		}
		if (count($updateData)) {
			$update_sql = 'UPDATE ' . $tableName . ' SET ' . $updateValueSql . ' WHERE ' . $whereId . ' IN ' . $updateIdSql . ';';
			Db::query($update_sql); // 执行更新语句
		}
	}

  

posted @ 2023-08-25 16:39  潘潘潘的博客  阅读(60)  评论(0编辑  收藏  举报