强啊,点赞业务缓存设计优化探索之路。

2023-11-13

背景

内容点赞业务在得物社区中是一个非常高频的业务场景,功能本身复杂度不高,但是业务场景多、QPS高、而且由于社区的用户体量,整体点赞的数据量非常大。其中最核心、对响应性能要求最高的主要是“ 用户是否点赞内容 ”和“ 内容点赞数 ”场景。

在得物社区中凡是有内容消费的场景,都会有上面两个点赞场景的处理,所以整体点赞业务的QPS在社区都是非常高的。

当我们在刷各种Feed流时,每一次下滑,都需要对数十篇内容进行登录用户是否点赞状态的判断。

作为基础业务,内容点赞业务的高性能响应,对上游内容场景的消费体验有极大的影响。

本文对得物社区的点赞业务如何做到高性能响应以及历史上在缓存使用上关于高性能、稳定性、低成本上的优化探索过程进行讲述,希望能给读者带来一些收获。

v1.0版本

功能需求

社区各种Feed流及内容详情页“登录用户是否已点赞内容” “内容被赞总数” “内容最新点赞用户列表”几个场景消费展示。

实现方案

点赞业务整体的高性能是基于Redis+MySQL架构。MySQL做数据存储和查询支持,Redis撑起业务的高性能响应。

在1.0版本中,服务架构还是单体PHP服务,技术方案上将动态下所有的点赞用户查询出来放到PHP数组里,然后序列化为Json字符串以Key/Value的方式存储到Redis中,当用户浏览内容时,取出缓存数据,反序列化Json为PHP数组,然后通过in_array和count方法判断是否已点赞及内容点赞数。

在缓存的维护上,则是每一次有新用户点赞或取消赞则直接清除Redis。

缓存结构如下:

cId => '[uid1,uid2,uid3...]'

流程图如下:

主要问题

这个版本的方案存在比较多待优化点。

第一、缓存构造时要查询动态下所有点赞用户数据,数据量大,容易产生慢SQL,对DB和带宽都可能有比较大的压力。

第二、缓存存储数据结构上为Key/Value结构,每次使用时需先从Redis查询,再反序列化成PHP数组,in_array()和count()方法都有比较大的开销,尤其是查询热门动态时,对服务器的CPU和MEM资源都有一定浪费,对Redis也产生了比较大的网络带宽开销。

第三、缓存维护上ÿ

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强啊,点赞业务缓存设计优化探索之路。 的相关文章

随机推荐

  • FlinkCDC-自定义序列化器

    package com lcy app customer import com alibaba fastjson JSONObject import com alibaba ververica cdc debezium DebeziumDe
  • 【前端】React使用react-markdown+antd实现引入渲染markdown文件

    项目中遇见一个需求 要求直接在浏览器打开markdown文件进行预览 初次使用遇见一些坎坷 以下记录实现过程 将其封装成了一个组件 1 下载依赖 yarn add react markdown 其余样式插件 yarn add remark
  • centos7安装mysql5.7

    一 下载mysql5 7 1 下载地址 点击跳转 2 然后上传到服务器上面 解压命令 tar xvf mysql 5 7 36 1 el7 x86 64 rpm bundle tar 3 解压后得到以下的rpm包 4 依次安装所需要的rpm
  • 因为错误消息指示这是由于上一个问题导致的错误,没有写入 apport 报告。

    依赖关系问题 仍未被配置dpkg 依赖关系问题使得 smbclient 的配置工作不能继续 smbclient 依赖于 samba common 2 3 5 8 dfsg 1ubuntu2 3 然而 软件包 samba common 尚未配
  • ubuntu 安装 多版本 cuda 11.4 11.8

    显卡 rtx3060 笔记本已经安装了 cuda 11 4 和 对应的cudnn 现在想要安装 cuda 11 8 和 cudnn 8 8 原理 新的 driver 可以 兼容 旧的 cuda sdk 旧的 driver 不能 兼容 新的c
  • matlab神经网络工具箱的使用

    单变量 单变量取数据 data load ex1data1 txt X data 1 y data 2 多变量取数据 data load ex1data2 txt X data 1 2 y data 3 运行train后弹出 对应的图 比如
  • gradle 添加构建依赖项

    gradle 添加构建依赖项 参考 添加构建依赖项 利用 Android Studio 中的 Gradle 构建系统 您可以轻松地将外部二进制文件或其他库模块作为依赖项添加到您的 build 中 这些依赖项可位于您的计算机上或远程代码库中
  • prometheus监控示例

    prometheus架构图 prometheus 各组件介绍 Prometheus Server 使用pull方式采集监控数据 在该组件上配置监控数据的采集和告警规则 Client Library 客户端库 为需要监控的服务生成相应的 me
  • 安装Redhat

    1 新建虚拟机 选典型 2 下一步 选择稍后安装操作系统 3 下一步 选择Linux 版本选择Red Hat Enterprise 8 版本是什么就选择什么 4 下一步 设置虚拟机名称以及位置 5 下一步 设置虚拟机磁盘容量 6 下一步 点
  • RocketMQ第五篇 RocketMQ API基本使用

    目录 生产者Product 消费者Consumer 前面已经学习了Rocket的基本知识 以及搭建MQ单机版和集群环境 下面开始进行实际开发 根据前面下载的RocketMQ源码 开展讲解RocketMQ 的基本使用 生产者Product 在
  • Python实战

    转载自Python研究者 作者阿辰 今天教大家如何爬取新浪网新闻数据 通过词云可视化展示新闻关键词 快速了解最新的新闻热点 这里爬取了2500条新闻数据进行演示 PS 这里采集的主要是国内最新新闻数据 写这篇文章的时候是4月26号 所以获取
  • 解决Spring的UnsatisfiedDependencyException异常的方法

    解决Spring的UnsatisfiedDependencyException异常的方法 1 引言 在使用Spring框架进行开发时 经常会遇到UnsatisfiedDependencyException异常 这个异常通常是由于依赖注入失败
  • 僵尸进程的查找及僵尸进程的kill

    首先我们来看看什么是僵尸进程 之前的学习过程中时这样理解僵尸进程的 子进程先于父进程退出 并将退出原因保留在pcb中 因此退出后不会自动释放所有资源 子进程退出后操作系统会通知父进程子进程退出了 你去获取一下原因 再完全释放子进程资源 若父
  • 软件测试基础知识(7)——因果图法

    因果图法 定义 因果图法是一种利用图解法分析输入的各种组合情况 从而设计测试用例的方法 它适合于检查程序输入条件的各种组合情况 特点 1 考虑输入条件的相互制约及组合关系 2 考虑输出条件对输入条件的制约关系 因果图法产生的背景 等价类划分
  • 高可用集群HA、LVS+Keepalived、健康检测

    keepalived是集群管理中保证集群高可用 HA 的一个服务软件 其功能类似于heartbeat 用来防止单点故障 2 工作原理 keepalived是以VRRP协议为实现基础的 当backup收不到vrrp包时就认为master宕掉了
  • 快速排序c++实现

    思想 用过一趟排序将要排序的数据分割成独立的两部分 其中一部分的所有数据都比另外一部分的所有数据要小 然后再对这两部分重复此步骤 直到整个数组变成有序序列 对一个数组实现一趟快速排序的过程 1 定义两个变量 一个指向数组最前 一个指向最后
  • uniapp开发的scroll-view的x轴滑动两端不能够完全显示的修改

    uniapp开发多端应用 做一个scroll view后 在h5可以完全显示 app也可以 就是在小程序端两侧都不能够完全显示 把官方简单的示例代码复制下来调试 发现问题在于scroll view层的class的width 如果设置成100
  • HC-05(ZS-040)蓝牙模块使用详情(蓝牙模块配置、手机蓝牙控制单片机、蓝牙与蓝牙之间的通信)含51、32程序

    HC 05是一款主从一体化的蓝牙模块 因此其使用起来比较方便 只需要进行简单的配置即可 本文就手把手的介绍小白入手模块后如何使用 对于模块使用 1 蓝牙配置 2 手机与蓝牙的传输 3 手机通过蓝牙模块控制单片机 4 一对蓝牙之间主 从传输数
  • java随机抽题系统_随机抽取试题(java+sql 2005)

    import java awt BorderLayout import java util import java awt event import java awt Container import java awt EventQueue
  • 强啊,点赞业务缓存设计优化探索之路。

    背景 内容点赞业务在得物社区中是一个非常高频的业务场景 功能本身复杂度不高 但是业务场景多 QPS高 而且由于社区的用户体量 整体点赞的数据量非常大 其中最核心 对响应性能要求最高的主要是 用户是否点赞内容 和 内容点赞数 场景 在得物社区