简述php&&redis实现视频点赞

一、缓存 vs 数据库?

首先按照传统思路会在数据库里面建个字段放点赞数量,但是仔细一想,访问数据量一大,频繁对一个字段访问,肯定会造成数据库堵塞,访问接口超时,严重的时候服务器会报404,这要是出现在线上,老板肯定会叼你一顿。闲话少说。

在一些特殊的场景下,传统的关系型数据库很可能无法满足我们的需求。比如,在访问量较大的情况下,数据库很可能会宕机或者访问速度非常慢。这对用户来说是不能容忍的。因此就有了非关系型数据库,如 Redis 作为缓存,将数据放到内存中,实现数据的快速获取。下面我们就来看看如何使用 Redis 缓存实现视频点赞功能。

二、php实现视频点赞

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

1、php引入redis

2、使用redis命令实现点赞

Redis 可以存储键与 5 种不同数据结构类型之间的映射,这 5 种数据结构类型分别为 String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

先来看一下他们的特点:

string(字符串),采用键值对的方式存储,不适合点赞

list(列表),按照顺序排序,通常用在秒杀方面

set(集合),是string类型的无序集合,可以将用户记录进去

zset(有序集合),是string类型的有序集合,用在排名方面,

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

3、代码实现部分


//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,比如签到,排名,点赞,收藏,一些重要的数据可以放到数据库里面,不重要的数据放到缓存里面,可以减少数据库的开销。

简单分享快乐学习,如有错误请多包涵!

PS:如果没有你的关注,那我所做的将毫无意义!动动你发财的小手呗,点赞!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值