首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

点赞功能,用 MySQL?还是 Redis!

我们先来看看场景的需求: 显示点赞数量 判断用户是否点过赞,用于去重,必须的判断 显示个人点赞列表,一般在用户中心 显示文章点赞列表 我们先看一下头条和微博的例子 ? ?...查询文章的点赞用户 select user_id from star where post_id=? 点赞数量可以通过定时异步统计更新到post和user 表中。...纯cache就是把数据从mysql先写入redis,用户先读cache,miss后再拉取MySQL,同时cache做同步。 ? 多数场景二者是同时使用的,并不冲突。...下面说下redis作为storage的方案: 场景a :显示点赞数量 在点赞的地方,只是显示一个点赞数量,能区分用户是否点赞过,一般用户不关心这个列表,这个场景只要一个数字就可以了,当数量比较大时,一般显示为...:tid:888 //实现数量自增 (integer) 899 场景b:点赞去重,避免重复点赞 要实现这个需求,必须有文章点赞的uid列表,以uid为key场景c:一般在用户中心,可以看到用户自己的点赞列表

2K20

【数据库】Redis基础篇

Redis具有内置的复制、Lua脚本、LRU清除、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis集群的自动分区提供高可用性。...缓存功能 Redis作为缓存层,MySQL作为存储层,绝大部分请求的数据都是从Redis中获取。由于Redis具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。...计数 Redis作为文章点赞数计数的基础组件,用户每一次点赞,相应的点赞数就会自增1。...例如一个电子商务的网站会对不同标签的用户做不同类型的推荐,比如对数码产品比较感兴趣的人,在各个页面或者通过邮件的形式给他们推荐最新的数码产品,通常会为网站带来更多的利益。 相关命令时间复杂度表: ?...场景 排行榜系统 例如视频网站需要对用户上传的视频做排行榜,榜单的维度可能是多个方面的:按照时间、按照播放数量、按照获得的赞数。 本节使用赞数这个维度,记录每天用户上传视频的排行榜。

40020
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    点赞功能,用 MySQL 还是 Redis ?

    我们先来看看场景的需求: 显示点赞数量 判断用户是否点过赞,用于去重,必须的判断 显示个人点赞列表,一般在用户中心 显示文章点赞列表 我们先看一下头条和微博的例子 ? ?...查询文章的点赞用户 select user_id from star where post_id=? 点赞数量可以通过定时异步统计更新到post和user 表中。...纯cache就是把数据从mysql先写入redis,用户先读cache,miss后再拉取MySQL,同时cache做同步。 ? 多数场景二者是同时使用的,并不冲突。...下面说下redis作为storage的方案: 场景a :显示点赞数量 在点赞的地方,只是显示一个点赞数量,能区分用户是否点赞过,一般用户不关心这个列表,这个场景只要一个数字就可以了,当数量比较大时,一般显示为...star:tid:888 //实现数量自增 (integer) 899 场景b:点赞去重,避免重复点赞 要实现这个需求,必须有文章点赞的uid列表,以uid为key场景c:一般在用户中心,可以看到用户自己的点赞列表

    1.1K30

    美团到家面试,过了!

    Set 类型:聚合计算(并集、交集、差集)场景,比如点赞、共同关注、抽奖活动等。 Zset 类型:排序场景,比如排行榜、电话和姓名排序等。 zset使用场景?...例如学生成绩的排名榜、游戏积分排行榜、视频播放排名、电商系统中商品的销量排名等。 我们以博文点赞排名为例,小林发表了五篇博文,分别获得赞为 200、40、100、50、150。...即使左表中没有与右表匹配的记录,右连接仍然会返回右表中的所有记录,而左表中的对应列值则为NULL。 mysql有哪些引擎,区别?...如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果 怎么优化一个慢SQL?...如果多个键映射到同一个槽位,它们会以链表的形式存储在同一个槽位上,因为链表的查询时间是O(n),所以冲突很严重,一个索引上的链表非常长,效率就很低了,所以在 JDK 1.8版本的时候做了优化,当一个链表的长度超过

    20910

    点赞功能,你用 MySQL 还是 Redis ?

    我们先来看看场景的需求: 显示点赞数量 判断用户是否点过赞,用于去重,必须的判断 显示个人点赞列表,一般在用户中心 显示文章点赞列表 我们先看一下头条和微博的例子 [897b7172-a444-4a0e-a984...查询文章的点赞用户 select user_id from star where post_id=? 点赞数量可以通过定时异步统计更新到post和user 表中。...纯cache就是把数据从mysql先写入redis,用户先读cache,miss后再拉取MySQL,同时cache做同步。...下面说下redis作为storage的方案: 场景a :显示点赞数量 在点赞的地方,只是显示一个点赞数量,能区分用户是否点赞过,一般用户不关心这个列表,这个场景只要一个数字就可以了,当数量比较大时,一般显示为...star:tid:888 //实现数量自增 (integer) 899 场景b:点赞去重,避免重复点赞 要实现这个需求,必须有文章点赞的uid列表,以uid为key场景c:一般在用户中心,可以看到用户自己的点赞列表

    67140

    独立开发 一个社交 APP 的架构分享 (已实现)

    按编辑 图文混排类型 图文加视频录制类型 按类型(内容布局各不相同) 圈子,可以发布视频,显示位置 我的作品,图文混排,瀑布流显示 创业,不开启评论与点赞 操作: 帖子评论与评论的回复,包含表情的插入...帖子与评论的点赞与撤销点赞 分享、收藏、举报、信息分享到微信等平台、删除(帖主)等功能 文章模块 浏览: 内容页纯html,网页浏览 发布: 由管理员通过网页后台编辑发布,形成html标签流 兼容...SDK实现 以用户账号注册推送 在服务端评论、点赞的接口代码处触发推送API 通过广播的形式获取推送,显示消息提醒 6) 表情模块 匹配 以图片的名字组合其他标记符组合为 key,例如 [ ],资源...MyISAM 的查询速度比InnoDB快 查询高发的表采用 MyISAM 引擎 数据比较重要或多写操作的表采用InnoDB引擎 3,数据库设计        对于数据库设计,不应该过多依赖范式,适度的冗余可以加快搜索速度...帖子有三种类型,对应三张表,文章独立一张表 点赞一张表 评论一张表 收藏一张表 信息提醒一张表 用户消息的查看与否以及数目在移动端的显示,需要在消息表设置加上是否查看了的字段,可以解决以下几个问题:

    4.9K101

    开源社区系统 Echo 超全文档助力春招

    ” 可以看到帖子的置顶和加精按钮并执行相应操作 “管理员” 可以看到帖子的删除按钮并执行相应操作 “普通用户” 无法看到帖子的置顶、加精、删除按钮,也无法执行相应操作 支持按照 “发帖时间” 显示 支持按照...未登录用户无法使用私信功能 查询某个会话所包含的所有私信 访问私信详情时,将显示的私信设为已读状态 支持分页显示 查询当前用户的会话列表 每个会话只显示一条最新的私信 支持分页显示 发送私信(过滤敏感词...、评论/回复点赞 第 1 次点赞,第 2 次取消点赞 首页统计帖子的点赞数量 详情页统计帖子和评论/回复的点赞数量 详情页显示当前登录用户的点赞状态(赞过了则显示已赞) 统计我的获赞数量 权限管理(Spring...一个帖子的详情页需要封装的信息大概如下: ? 添加评论(事务管理) ? 私信列表和详情页 ? 发送私信(异步请求) ? 点赞(异步请求) 将点赞相关信息存入 Redis 的数据结构 set 中。...帖子热度计算 每次发生点赞(给帖子点赞)、评论(给帖子评论)、加精的时候,就将这些帖子信息存入缓存 Redis 中,然后通过分布式的定时任务 Spring Quartz,每隔一段时间就从缓存中取出这些帖子进行计算分数

    2.4K20

    陈宏智:字节跳动自研万亿级图数据库ByteGraph及其应用与挑战

    属性图在节点和边上有属性表,从某种角度上讲,它仍带有关系数据库的基本特性,类似表结构的形式,实际是采用Key-Value形式来存储的,如用户A关注了用户B,用户C点赞了某个视频等,则会把关注的时间、点赞时间...、评论的内容等以不同的有向边存储在属性图中,用图来描述业务逻辑。...举例:写一条用户A所有一跳好友中满足粉丝数量大于100的子集。首先定位用户A在图中的点,其次求一跳查询中的所有邻居,判断入度邻居整体数量是否大于100,拉取满足条件的所有用户。...即使内存数据丢失,仍可通过更新后的logid在磁盘上进行WAL的查询并写入。 缓存实现:根据不同场景及当下cpu的开销有不同策略。...全局索引:目前只支持点的属性全局索引,即指定一个属性值查询出对应的点。 数据存储在不同机器上,索引数据的一致性使用分布式事务解决。 2.

    1.3K20

    以 B 站为例,聊聊站内消息系统的设计

    表中,然后系统定时的从 t_manager_system_notice 表中拉取通知,然后根据通知的 type 将通知插入 t_user_system_notice 表中。...随后系统到用户表中查询选取所有用户的 ID,然后将这一条通知的信息根据所有用户的 ID,批量插入 t_user_system_notice 中。...用户需要查看系统通知时,从 t_user_system_notice 表中查询就行了。 注意: 因为一次拉取的数据量可能很大,所以两次拉取的时间间隔可以设置的长一些。...诸如此类事件,我们以单词 action 形容不同的事件(点赞,回复,at)。...拓展 其实还有一种设计提醒表的做法,即按业务分类,不同的提醒存入不同的表,这样可以分为: 点赞提醒表 回复提醒表 at(@)提醒表。

    9.2K64

    ClickHouse 在有赞的实践之路

    两者都经历了从 MYSQL -> 预计算 KV 引擎的方式的演变,最终 ClickHouse 选择了 ROLAP(当然也可以通过用户定义物化视图的方式在一些场景中做预聚合计算) 的方式,而 Druid...而代码编译生成通过改成以数据为中心的方式消除这部分的开销,尽可能地将计算保持在 CPU 寄存器中。...比如下方的 Aggregator 针对不同的数据类型使用不同的 Hash 表进行优化。 ? 虽说如此,但是笔者并没有从算子级别做过 micro-benchmark。...更多可见: Druid在有赞的实践 在使用 Druid 的过程中,我们也发觉了一些痛点,比如 不支持 Join,导致用户需要导入大宽表。 无法查询明细。...一般对应此类需求的都是从用户行为表中取得的数据,这其中有一些无法预计算的不可枚举标签,也有使用 sequenceMatch() 函数来匹配用户行为序列路径。

    1.6K41

    Navicat Premium 17太牛了,图形化界面的执行计划显示,非常点赞的功能

    简介 Navicat Premium 是一套可创建多个连接的数据库开发工具,让你从单一应用程序中同时连接 MySQL、Redis、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL...可视化查询解释(非常点赞的功能) 在 MySQL、MariaDB 和 PostgreSQL 中,可视化查询解释可帮助你在查询集合中获取有价值的信息,这种方式是传统文本解释不能做到的。...表配置文件 现在,你可以保存针对该表频繁使用到的筛选、排序以及列显示方式的不同组合。 img 你可以在上面的截图中看到,你现在可以选择在列表头中显示数据类型。...一次配置,轻松切换 配置和保存经常用到的表的筛选、排序顺序和列显示的不同组合。根据不同的用途,你可以保存多个配置并在它们之间轻松切换,而无需每次访问时都重新配置表。...Navicat 使你能够验证数据转换的准确性和正确性,并对管道微调以获得最佳性能。 支持 Redis 哨兵模式 Navicat 长期以来一直支持流行的开源内存数据结构存储 Redis。

    1.5K10

    ClickHouse 在有赞的实践之路

    两者都经历了从 MYSQL -> 预计算 KV 引擎的方式的演变,最终 ClickHouse 选择了 ROLAP(当然也可以通过用户定义物化视图的方式在一些场景中做预聚合计算) 的方式,而 Druid...而代码编译生成通过改成以数据为中心的方式消除这部分的开销,尽可能地将计算保持在 CPU 寄存器中。...比如下方的 Aggregator 针对不同的数据类型使用不同的 Hash 表进行优化。 ? 虽说如此,但是笔者并没有从算子级别做过 micro-benchmark。...更多可见: Druid在有赞的实践 在使用 Druid 的过程中,我们也发觉了一些痛点,比如 不支持 Join,导致用户需要导入大宽表。 无法查询明细。...一般对应此类需求的都是从用户行为表中取得的数据,这其中有一些无法预计算的不可枚举标签,也有使用 sequenceMatch() 函数来匹配用户行为序列路径。

    1.7K50

    捣鼓一个电商功能设计

    (2)查询条件商品列表 用户的查询条件多种多样,我们可以把用户查询关键词通过埋点记录下来,要求运营给出热度最高的商品查询关键词。 针对热门关键词查询,把查询结果进行缓存。...电商业务的订单记录表、商品下单接口是最重要的核心模块,毕竟这一块涉及到了业务赚钱的核心。 (1)校验功能 用户从APP端点击下单按钮,后端服务要走一套怎么样的流程?首先我们需要先进行校验。...(3)事务控制 对于整个下单的流程,包括库存的减少、用户扣费、订单表的创建都应该包含在同一个MySQL事务中,一旦流程中的任何一个逻辑出错,则进行回滚。...} } 我是南哥,南就南在Get到你的点赞点赞点赞。...创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

    16298

    有赞搜索系统的架构演进

    在为传统的搜索应用提供高级检索和大数据交互能力的同时,有赞搜索平台还需要为其他比如商品管理、订单检索、粉丝筛选等海量数据过滤提供支持,从工程的角度看,如何扩展平台以支持多样的检索需求是一个巨大的挑战。...这里另外做的一点优化是加入了搜索结果缓存,常规的文本检索查询 match 每次执行都需要实时计算,在实际的应用场景中这并不是必须的,用户在一定时间段内(比如 15 或 30 分钟)通过同样的请求访问到同样的搜索结果是完全可以接受的...目前的架构 3.0 针对 2.0 时代的问题,我们在 3.0 架构中做了一些针对性调整,列举主要的几点: 通过开放接口接收用户调用,与业务代码完全解耦; 增加 proxy 用来对外服务,预处理用户请求并执行必要的流控...请求校验主要是对用户的写入、查询请求进行预处理,如果发现字段不符、类型错误、查询语法错误、疑似慢查询等操作后以 fast fail 的方式拒绝请求或者以较低的流控水平执行,避免无效或低效能操作对整个 Elasticsearch...full gc 甚至 OOM,为了避免重复出现此类问题,我们也提供了定制的可视化查询组件以支持用户浏览数据的需求。

    96920

    大数据入门基础系列之详谈Hive的视图

    答:Hive0.6开始 可以先,从MySQL里的视图概念理解入手 视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,与基本表不同,它是一个虚表。...视图的作用有: 首先,可以简化数据查询语句; 其次,可以使用用户能从多角度看待同一数据; 然后,通过引入视图可以提高数据的安全性; 最后,视图提提供了一定程度的逻辑独立性等。...定义视图可以将表与表之间的复杂的操作连接和搜索条件对用户不可见,用户只需要简单地对一个视图进行查询即可,故增加了数据的安全性,但不能提高查询效率。 例子1   1)创建一个测试表。...但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。 一般情况,是多表关联查询的时候,才用视图。...请转发分享给更多人 关注「大数据躺过的坑」,提升大神技能 觉得不错,请点赞和留言

    1.8K90

    Feed流应用重构-架构篇

    产品大致有三种Feed查询场景 班级维度: 查询某班级下Feed动态列表 用户维度:查询某用户下Feed动态列表 Feed维度: 查询feed下点赞列表 3)架构设计 在梳理业务,设计数据库表的过程中,...04 Feed流 班级动态聚合页面,每一条Feed包含如下元素: 动态内容(文本,音频,视频) 前N个点赞用户 当前用户是否收藏,点赞数,收藏数 前N个评论 聚合首页需要显示15条首页动态列表,每条数据从数据数据库里读取...4.1 列表缓存 列表如何缓存是我非常渴望和大家分享的技能点。这个知识点也是我 2012 年从开源中国上学到的,下面我以「查询博客列表」的场景为例。 我们先说第1种方案:对分页内容进行整体缓存。...; 根据列表缓存的策略分别加载 动态,点赞,收藏,评论数据,并组装起来。...模块redis存储格式动态HASH 动态详情点赞ZSET 存储userId ,前端显示用户头像,用户缓存使用string存储收藏STRING 存储userId和FeedId的映射评论ZSET 存储评论Id

    49420

    核对体系-资损防控(核对篇)

    ,也就是长款或是短款; 场景二:C端用户重复支付的情况,收单系统是要自动将多支付的金额退给用户的,这时就需要核对有赞是少退还是多退; 场景三:系统重构后,从老系统切流到新系统这个过渡期间,会有双写的情况...; 检测点 这个检测点是资损防控定义的一个概念,其实很好理解,就是库表中数据每变化一次,产生的binlog就是一个检测点,例如:同一条数据当状态变更时,初始状态1,生成一个检测点,状态变更到2,再生成一个检测点...,两个是不同的检测点,都会触发核对任务;检测点另一个作用是只存储了待检测数据在Hbase中的rowkey,而不存实际待检测数据;同时,检测点是以分库的形式存储在Mysql中,这就引出下面的一个内容:分片策略...ID,通过分片ID查询Mysql中状态为未检测或是存疑的检测点,进行核对。...3.5.3 通用服务 DB查询器:支持在Groovy脚本中查询各方数据库备库,对于数据过滤与数据转化是很重要的工具; JSON工具:对于binlog中的大字段并使用了json格式存储时,此工具可以在Groovy

    3.2K31

    【Redis】五种数据类型及其使用场景

    psetex key milliseconds value //功能与上面一直,秒的单位不同 String 类型的注意事项 数据操作成功与否的反馈 1、表示运行结果是否成功  (integer...解决方案 两种实现方式: 在Redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定时间定时刷新即可。...解决方案: 例如创建一个购物车: 当前仅仅是将数据存储到redis中,并没有起到加速的所用,因为我们仅仅查询到了用户的id和商品的id,显示的时候显示的用户名和商品的名称,商品信息还需要二次查询数据库...start到stop个元素,从0开始 lindex key index //查询第i个元素 llen key //list的长度 获取并移除数据 lpop key //获取并删除左边第一个元素...业务场景 微信朋友圈点赞,要求按照点赞顺序显示点赞好友信息。 如果取消点赞,移除对应好友信息。

    96520

    重学SpringBoot3-集成Redis(十二)之点赞功能实现

    点赞功能的场景分析 点赞功能通常涉及以下场景: 用户点赞或取消点赞:某个用户对某篇文章或某条评论进行点赞或取消操作。 统计点赞数量:实时显示某个对象(如文章、视频、评论)的总点赞数。...每次点赞操作就是往这个 Set 中添加用户 ID,取消点赞则是从 Set 中移除用户 ID。 3.1....点赞功能的详细解释 4.1. 用户点赞和取消点赞 每当用户点赞时,我们将用户 ID 存入 Redis 的 Set 中。...); 这一点对前端显示用户是否已点赞的状态非常重要,用户体验更好。...Redis Set 数据结构的优势 Redis 的 Set 数据结构非常适合用来存储点赞功能的用户列表,原因有以下几点: 唯一性:Redis Set 不允许重复元素,确保用户对同一篇文章只能点赞一次。

    23910
    领券