目录

  • 一、点赞
    • 直接写入Mysql
    • redis直接存储
  • 二、关注
  • !!!欢迎点赞收藏关注!!!

一、点赞

直接写入Mysql

直接写入Mysql是最简单的做法。

做两个表即可,

  1. post_like

记录文章被赞的次数,已有多少人赞过这种数据就可以直接从表中查到;

  1. user_like_post

记录用户赞过了哪些文章, 当打开文章列表时,显示的有没有赞过的数据就在这里面;

缺点

  1. 数据库读写压力大
    热门文章会有很多用户点赞,甚至是短时间内被大量点赞, 直接操作数据库从长久来看不是很理想的做法。

redis直接存储

redis主要的特点就是快, 毕竟主要数据都在内存嘛;

优点

  1. 性能高

  2. 缓解数据库读写压力

其实我更多的在于缓解写压力, 真的读压力, 通过mysql主从甚至通过加入redis对热点数据做缓存都可以解决,写压力对于前面的方案确实是不大好使。

缺点

  1. 开发复杂

这个比直接写mysql的方案要复杂很多, 需要考虑的地方也很多;

  1. 不能保证数据安全性

不过对于我们点赞而已, 稍微丢失一点数据问题不大;

具体设计

redis设计部分:

post_set
在redis中弄一个set存放所有被点赞的文章

post_user_like_set_{$post_id}
对每个post以post_id作为key, 搞一个set存放所有对该post点赞的用户;

post_user_like_{$post_id}_{$user_id}
将每个用户对每个post的点赞情况放到一个hash里面去, hash的字段就

为啥用hash

只所以用hash是因为完全可以用hash来存储一个点赞的对象, 对应数据库的一行记录。

当然有同学会说用key, value也可以, 将所有的数据序列化(json_encode等)

后全部放到value里面去。 反复序列化也是一个很大的开销不是, hash可以很

方便的修改某个字段, 而序列化和反序列化的操作。

用户点赞/取消赞

获取user_id, post_id, 查询该用户是否已经点过赞, 已点过就取消点赞,

将用户的点赞/取消赞的情况记录在redis中, 具体为:

  1. 写入post_set

post_id写入post_set

  1. 写入post_user_like_set_{$post_id}

user_id写入post_user_like_set_{$post_id}

  1. 写入post_user_like_{$post_id}_{$user_id}

将用户点赞数据, 例如赞状态, post_id, user_id, ctime(操作时间), mtime(修改时间)写入post_user_like_{KaTeX parse error: Expected 'EOF', got '}' at position 8: post_id}̲_{user_id}中

  1. 更新post_{$post_id}_counter

更新post_{$post_id}_counter, 这里的更新稍晚复杂一点, 需要和前面一样先获取当前用户是否对这个post点过赞

如果点过, 并且本次是取消赞, counter减一, 如果没点过, 本次是点赞, counter加一。

如果原来是取消赞的情况, 本次是点赞, counter加一。

二、关注

使用Redis有序集合可以做到根据关注的时间有序的取出列表,假设我的ID是me,别人的ID是other

1、添加关注

  1. 将对方id添加到自己的关注列表中;
    Redis::ZADD(“me:follow”, time(), other)
  2. 将自己的id添加到对方的粉丝列表中:
    Redis::ZADD(“other:fans”, time(), me)

2、取消关注

  1. 将对方id从自己的关注列表中移除;
    Redis::ZREM(“me:follow”, other)

  2. 将自己的id从对方的粉丝列表中移除:
    Redis::ZREM(“other:fans”, me)

3、 关注列表

  1. 查看我的关注列表:
    Redis::ZRANGE(“me:follow”, 0 , -1)

  2. 查看别人的把id换掉就可以
    Redis::ZRANGE(“other:follow”, 0 , -1)

4、 粉丝列表

  1. 查看我的粉丝列表:
    Redis::ZRANGE(“me:fans”, 0 , -1)

  2. 查看别人的把id换掉就可以
    Redis::ZRANGE(“other:fans”, 0 , -1)

5、人物关系

  1. 我单向关注他
  • 我的关注列表中有他(或他的粉丝列表中有我);
  • 我的粉丝列表中没有他(或他的关注列表中没有我)。

Redis::ZSCORE(“me:fans”, other) #未返回分数
Redis::ZSCORE(“me:follow”, other) #返回分数

  1. 他单向关注我
  • 我的关注列表中没有他(或他的粉丝列表中没有我);
  • 我的粉丝列表中有他(或他的关注列表中有我)。

Redis::ZSCORE(“other:fans”, me) #未返回分数
Redis::ZSCORE(“other:follow”, me) #返回分数

  1. 是否互粉
  • 我的关注列表中有他(或他的粉丝列表中有我);
  • 我的粉丝列表中有他(或他的关注列表中有我)。同时成立才为互粉。

Redis::ZSCORE(“me:fans”, other) #返回分数
Redis::ZSCORE(“me:follow”, other) #返回分数

6、 数量相关

  1. 我的关注数
    Redis::ZCARD(“me:follow”); #返回数量

  2. 我的粉丝数
    Redis::ZCARD(“me:fans”); #返回数量

7、 排序取出所有的人

  1. 根据关注的时间倒叙取出用户的id
    Redis::ZREVRANGE(“me:fans”, 0, -1, TRUE); #倒序取值

  2. 根据关注时间顺序取出用户的id
    Redis::ZRANGE(“me:fans”, 0, -1, TRUE); #顺序取值

!!!欢迎点赞收藏关注!!!

Redis实现点赞与关注相关推荐

  1. springboot整合redis案例——点赞取消点赞

    目录 springboot与缓存 JSR-107 Spring缓存抽象 重要概念和缓存注解 springboot整合redis 案例一:Redis是实现点赞.取消点赞 一.Redis 缓存设计及实现 ...

  2. 20X25 FCPX插件24种视频网站点赞订阅关注MG动画效果 Youtube Subscribe Generators

    20X25 FCPX插件24种视频网站点赞订阅关注MG动画效果 [插件介绍] 这是一个很酷的FCPX插件,由可编辑的动画点赞,通知铃声和频道视频的订阅按钮组成.您可以简单地单独使用现成的.它肯定会帮助 ...

  3. 用auto.js写了一个抖音点赞、关注的脚本

    最近一直在找工作,有天就遇到一个要求使用auto.js写一些自动化控件的公司(我严重怀疑它其实就想白嫖...),于是就有了这个小demo... 因为没用过抖音,也不懂auto.js,所以看了一些教学视 ...

  4. 用Python把视频批量保存本地,实现自动三连(点赞评论关注)

    人生苦短,我用Python 序言 抓包分析流程 开始代码 序言 是我太久没发了吗?昨天没人看,那么今天来点特别的~ 不仅把好看的视频全部pa下来,咱们还要实现自动评论.点赞.关注三连~ 宝,你也可以顺 ...

  5. 百度直播弹幕【点赞+分享+关注】小助手1.0

    百度直播弹幕[点赞+分享+关注]小助手1.0 原先写了一个百度的直播弹幕评论助手,被很多朋友喜欢,然后现在的话,有个朋友问我能不能弄一下直播的点赞.我也是抱着尝试的心态,然后就又开始了一段逆向之路. ...

  6. php redis 实现点赞,使用redis实现点赞功能的几种思路

    原标题:使用redis实现点赞功能的几种思路 本文主要介绍本人工作中遇到的点赞需求以及使用redis的解决思路.第一种点赞需求是比较常规的点赞需求,类似于微博那种点赞模式,用户可以对某条信息点赞.取消 ...

  7. Redis数据结构Set应用场景--黑名单校验器、京东与支付宝抽奖、微博榜单与QQ群的随机展示、帖子点赞、关注与粉丝、微关系计算、HyperLogLog的入门使用

    Set应用场景 set命令使用 淘宝黑名单 一.黑名单过滤器业务场景分析 二 .解决的技术方案 三.SpringBoot+redis模仿实现校验器 京东京豆抽奖 一.京东京豆抽奖的业务场景分析 二.京 ...

  8. Redis实战之好友关注功能

    目录 1.关注和取消关注 2.好友关注 - 共同关注 3.好友关注 - Feed 流实现方案 4.好友关注 - 推送到粉丝收件箱 1)传统了分页在 feed 流是不适用的,因为我们的数据会随时发生变化 ...

  9. redis——实战点赞

    点赞功能随处可见,我们都知道点赞是一个非常高频的操作,redis就非常适合做这种工作. 实现效果: 分析:三种类型:给帖子点赞,给评论点赞,给回复点赞 我们只实现查看点赞数量的话,只要一个int记录一 ...

最新文章

  1. 清北顶会学霸:“表情”与“认知”引发的科学思辨 | 清华AI Time PHD
  2. 【剑指offer】10A--求裴波那切数列的第n项,C++实现
  3. 【MFC】MFC消息处理和映射
  4. 使用36-pin的STM32输出VGA, VGA output using a 36-pin STM32
  5. 2014年夏末大Java新闻
  6. matlab7.0安装说明
  7. POI Excel解析
  8. 1 MLP-Mixer: An all-MLP Architecture for Vision
  9. 请解决datagridview
  10. springMVC的文件上传于下载
  11. python模拟足球_使用K-Means算法划分亚洲国家的三个足球梯队
  12. 合振动的初相位推导_如何理解单自由度系统振动
  13. Java短信平台实战第二天
  14. MQ消息队列概述及主流MQ分析
  15. 无人机边缘计算中的计算卸载——Stackelberg博弈方法论文复现附matlab代码
  16. C语言文本文档汉字乱码处理问题
  17. javascript 逗号隔开的字符串 转数组
  18. 昨日种种皆成今我,切莫思量切莫哀
  19. SqlServer中的dbo是什么意思?
  20. linux系统路由器地址查询,如何在任何平台上查找路由器的IP地址

热门文章

  1. 海外试玩推广渠道汇总
  2. python爬虫入门—selenuim自动登录qq邮箱
  3. bzoj 3356: [Usaco2004 Jan]禁闭围栏 离散化+树状数组
  4. win10恢复经典开始菜单_怎么将win10界面切换成win7界面
  5. 其实运营,就是用户的贪、嗔、痴
  6. 1350:面朝大海 春暖花开 [ 基础版 ]
  7. uniapp 拉起微信客服功能
  8. 通过颜色来生成一个纯色图片
  9. 白羊老师计算机网课,你网课作业写完了吗?每一个赶DDL的日子都是痛并快乐着...
  10. 人工智能轨道交通行业周刊-第27期(2022.12.12-12.25)