|
引用来自“eechen”的评论
文章阅读量统计,写的时候可以先写到Redis中,然后每隔一段时间后获取【Redis互斥锁】写入MySQL. $redis->set('post_views_1024', $redis->get('post_views_1024')+1);
if( (time()-600) > $redis->get('post_views_last_update_time_1024') ) {
$key = 'lock'; //锁
$random = md5( uniqid(getmypid().'_'.mt_rand().'_', true) ); //随机值(用来标记锁)
$ttl = 10; //ttl即time to live,单位是秒.
if( $redis->set($key, $random, ['nx', 'ex' => $ttl]) ) { //加锁(nx表示not exists,ex表示expire)
//写入MySQL
$mysqli->query('UPDATE posts SET views = '.$redis->get('post_views_1024').' WHERE> if( $mysqli->affected_rows == 1 ) {
$redis->set('post_views_last_update_time_1024', time());
}
//加入随机值判断是为了避免删除到其他操作的锁
if($redis->get($key) == $random) {
$redis->del($key);
}
}
} |
|
|