首页 > 数据库 >php基于Redis实现播放量增加功能

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

时间:2023-08-25 16:44:43浏览次数:42  
标签:播放 Redis redis value click updateValueSql key php id

开发思路就是用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); // 执行更新语句
		}
	}

  

标签:播放,Redis,redis,value,click,updateValueSql,key,php,id
From: https://www.cnblogs.com/seanpan/p/17657332.html

相关文章

  • Redis-持久化的学习
    持久化-rdbredis.conf中已经自动配置好了持久化设置,但我们可以改为自己需要的设置。当条件触发时会在同级文件夹内生成dump.rdb文件(快照)。 触发条件:1:满足config中设置的触发条件2:使用flushall命令3:退出redis,也会自动生成dump.rdb  如何打开rdb文件?在redis中输入conf......
  • 海康摄像头通过SDK接入到LiveNVR实现双向语音喊话对讲与网页无插件播放,并支持GB28181
    @目录1、确认摄像头是否支持对讲2、摄像头视频类型复合流3、通道配置SDK接入4、视频广场点击播放5、相关问题5.1、如何配置通道获取直播流?5.2、如何GB28181级联国标平台?6、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务1、确认摄像头是否支持对讲可以访问摄像头自己的页面,看是否能够对......
  • cocos2dx之播放音乐
    在游戏时,背景音乐应该说是必不可少的,但是在cocos2dx中如何播放音乐呢,我们看如下代码:CCSize>>如果用stop的话,那么我得再重新playmusic了!关于背景音乐,cocos2dx在不同平台下支持的格式:Android:mp3,wav,3gpIos:mp3,cafWin32:MID,WAV关于音效,cocos2dx在不......
  • Redis学习笔记
    1.Redis安装配置及开启自启1.1安装Redis依赖Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:yuminstall-ygcctcl1.2安装Redis获取Rediscd/opt/wgethttp://download.redis.io/releases/redis-6.2.6.tar.gz解压Reids#解压到/usr/local/src/......
  • php读取excel数据 使用phpspreadsheet
    首先是用composer安装phpoffice/phpspreadsheet具体代码//读取数据privatefunctionreadYewuExcel(){$reader=IOFactory::createReader("Xlsx");$reader->setReadDataOnly(TRUE);$spreadsheet=$reader->load('yewu.xlsx');......
  • Redis开启过期监听
    1.开启过期通知配置默认notify-keyspace-events""修改为:notify-keyspace-eventsEx2.增加监听类publicclassRedisKeyExpirationListenerextendsKeyExpirationEventMessageListener{publicRedisKeyExpirationListener(RedisMessageListenerContainerlisten......
  • Redis如何批量删除指定前缀的key
    批量删除指定前缀的Key有两中方法,一种是借助redis-cli,另一种是通过SCAN命令来遍历所有匹配前缀的key,并使用DEL命令逐个删除它们。redis-cli使用Redis自带的redis-cli命令行工具,你可以通过以下方式批量删除指定前缀的key:redis-cliKEYS"your_prefix*"|xargsredis......
  • springboot整合redis回滚
    1:添加依赖2:yml中配置连接,如:host,password,port3:@autowired注解注入Redistemplate调用方法生成对象 为了方便公司开发,一般会对数据进行序列化存储,这时需要创建配置类进行全局设置packagecom.example.config;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importco......
  • 使用C#实现PHP语言中的 json_encode
    php语言:md5(json_encode(params).apiKey)params轉json字串,再接APIKey,最後整個字串md5加密C#语言varserializer=newJavaScriptSerializer();stringjson=serializer.Serialize(new{param1="data1",param2="data2"});参考地址:https://www.jb51.cc/cshar......
  • Windows PC、 Linux、 Android、 iOS多平台支持H5无插件播放RTSP摄像机解决方案
    需求分析视频流媒体监控行业已经进入互联网时代,浏览器承载了绝大多数的互联网访问流量,目前在网页上播RTSP流的普遍做法是将RTSP转成互联网直播协议RTMP或者HLS;而RTMP协议播放需要Flash插件,且其衍生的FLV或者HLS协议延迟很大(2s以上),根本达不到视频流媒体传输低延迟的要求。早年风靡......