前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【黄啊码】php结合redis实现视频点赞

【黄啊码】php结合redis实现视频点赞

作者头像
黄啊码
发布2022-06-15 14:13:47
4240
发布2022-06-15 14:13:47
举报
文章被收录于专栏:黄啊码【CSDN同名】

一、缓存 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、代码实现部分

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三、总结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档