点赞系统设计

1 篇文章 0 订阅

中秋佳节,闲来无事,写了一个文章点赞服务,在此记录一下

场景

在阅读文章时,觉得好的文章都会点赞,表示对作者的鼓励支持,也可能最后取消点赞,有时会反复操作。

用户可能在个人中心查看自己的点赞列表,或他人对自己文章的点赞情况。所以在设计时可以添加一些重复的信息例如:头像、文章标题。

设计

数据结构设计:
  1. 点赞结构
type Like struct {
	ID             string `json:"id" valid:"required,uuid" jsonapi:"primary,likes"`
	// 用户ID
	UserID         string `json:"userID" valid:"required,uuid" jsonapi:"attr,userID"`
	// 文章id
	SourceID       string `json:"sourceID" valid:"required,uuid" jsonapi:"attr,sourceID"`
	// 其他数据,比如:头像、文章标题等(以字符串方式传入)
	Data           string `json:"data" jsonapi:"attr,data"`
	Deleted        bool   `json:"deleted" jsonapi:"attr,deleted"`
	CreatedTime    int64  `json:"createdTime" jsonapi:"attr,createdTime"`
}

Data字段传入其他额外信息,客户端自己解析出来即可,这样该服务就可以在其他地方使用时,不需要在添加新的字段。

  1. 点赞总数结构

    type LikeCount struct {
    	ID             string `json:"id" valid:"required,uuid" jsonapi:"primary,likesCount"`
    	Count          int    `json:"count" jsonapi:"attr,count"`
    	// 可以是文章ID、也可以是用户ID
    	SourceID       string `json:"sourceID" valid:"required,uuid" jsonapi:"attr,sourceID"`
    	Deleted        bool   `json:"deleted" jsonapi:"attr,deleted"`
    	CreatedTime    int64  `json:"createdTime" jsonapi:"attr,createdTime"`
    }
    

关于SourceID的说明,可以是文章ID、也可以是用户ID,这样可以直接获取文章的点赞总数,也可以获取用户获得的点赞总数。

接口设计

提供以下接口:

  • 点赞:没有点赞则点赞,已点赞则取消
  • 文章点赞总数获取
  • 根据文章获取点赞列表
  • 判断用户是否对文章点赞
  • 用户获得的点赞总数
效率

点赞是一个高频操作,可以使用redis来进行缓存,来降低对数据库的影响,提高xiaolv。该服务只是在自己的系统上使用,所以没有添加redis模块。

总结

以上开发使用的是golang + pgsql。欢迎交流学习

在我的个人网站中有使用,点击“顶一下”按钮,演示地址

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值