php&&redis实现视频点赞

Posted 风吹头蛋凉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php&&redis实现视频点赞相关的知识,希望对你有一定的参考价值。

php&redis实现视频点赞

这篇文章总结了我在项目中实现视频点赞的方法

缓存 vs 数据库?

首先按照传统思路会在数据库里面建个字段放点赞数量,但是仔细一想,访问数据量一大,频繁对一个字段访问,肯定会造成数据库堵塞,访问接口超时,严重的时候服务器会报404,这要是出现在线上,老板肯定会叼你一顿。闲话少说。
在一些特殊的场景下,传统的关系型数据库很可能无法满足我们的需求。比如,在访问量较大的情况下,数据库很可能会宕机或者访问速度非常慢。这对用户来说是不能容忍的。因此就有了非关系型数据库,如 Redis 作为缓存,将数据放到内存中,实现数据的快速获取。下面我们就来看看如何使用 Redis 缓存实现视频点赞功能。

php实现视频点赞

在配置文件中把redis作为缓存,这是实现后面的前提,切记改为redis!!!

  1. php引入redis

  1. 使用redis命令实现点赞
    Redis 可以存储键与 5 种不同数据结构类型之间的映射,这 5 种数据结构类型分别为 String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。
    先来看一下他们的特点:
    string(字符串),采用键值对的方式存储,不适合点赞
    list(列表),按照顺序排序,通常用在秒杀方面
    set(集合),是string类型的无序集合,可以将用户记录进去
    zset(有序集合),是string类型的有序集合,用在排名方面,

为什么我们要用集合呢,因为他们的关系是一对多,一个视频id对应多个点赞用户,并且是无序的,也就不需要排序,所以我们用视频id作为key,集合里面放点赞用户的id,实现点赞。用字符串存视频播放数据

实现部分

//SISMEMBER方法主要用来判断用户在不在集合里面
$click = Cache::SISMEMBER('video'.'_'.$data['vid'],$data['uid']);
        if($has_click){
             //当用户取消点赞时,将用户从集合里面移除
            $has = Cache::SREM('video.'_'.$data['vid'],$data['uid']);
            if($has){
                return success('取消成功');
            }else{
                return fail('失败');
            }
        }else{
            //加入用户收藏列表
            Cache::append('video'.'_'.$data['vid'],$data['uid']);
            //视频播放次数加一
            Cache::INCR('play_'.$data['vid'].$data['uid']);
            //还可以用队列放到数据中
            return success('收藏成功');
        }

总结

举一反三,很多场景下的业务,都需要用到redis,比如签到,排名,点赞,收藏,一些重要的数据可以放到数据库里面,不重要的数据放到缓存里面,减少数据库的开销.

以上是关于php&&redis实现视频点赞的主要内容,如果未能解决你的问题,请参考以下文章

php&&redis实现视频点赞

php+redis实现消息队列

REDIS自增INCR设置过期时间的原子操作(LUA&PHP实现)

linux零基础入门到精通&运维视频教程

Redis-Cell令牌桶限流详述

php--点赞功能的实现