时间:2021-05-19
点赞功能是很多平台都会提供的一个功能,那么,我们要如何实现点赞和取消点赞呢?
这篇文章总结了我在项目中实现点赞的方法。
首先我们要考虑的是数据要放到哪里,很多时候我们都会把数据放到数据库(如 MySQL),由于关系型数据库的稳定性,大部分场景下我们也都会使用关系数据库来存储数据。
不过,在一些特殊的场景下,传统的关系型数据库很可能无法满足我们的需求。比如,在访问量较大的情况下,数据库很可能会宕机或者访问速度非常慢。这对用户来说是不能容忍的。因此就有了非关系型数据库,如 Redis 作为缓存,将数据放到内存中,实现数据的快速获取。下面我们就来看看如何使用 Redis 缓存实现点赞功能。
数据结构 含义 string 字符串变量 list 链表 hash 映射表 set 无序集合 zset 有序集合
具体介绍可以参考这篇博客。
我们可以先定义一个接口,包含了点赞的相关操作:
public interface LikeCacheService { /** * 获取更新过的点赞帖子 id * @return */ Set<Object> listUpdatedPost(); /** * 测试用户是否已经对帖子点过赞 * @param userId 点赞用户 id * @param postId 待测试帖子 id * @return true if user has liked post */ boolean hasLiked(Integer userId, Long postId); /** * 获取帖子点赞数 * @param postId 帖子 id * @return 帖子的点赞数 */ Integer getLikeCount(Long postId); /** * 点赞 * @param uid 用户 id * @param pid 帖子 id */ void like(Integer uid, Long pid); /** * 取消点赞 * @param uid 用户 id * @param pid 帖子 id */ void unlike(Integer uid, Long pid); /** * 某个帖子的点赞数 +1 * @param pid 帖子 id */ void incrLikedCount(Long pid); /** * 某个帖子的点赞数 -1 * @param pid 帖子 id */ void decrLikedCount(Long pid); /** * 删除某个帖子的点赞信息 * @param pid 帖子 id */ void deletePostLikeSet(Long pid); /** * 获取帖子点赞数据列表 */ List<FmsUserLikePost> listLikedData(); /** * 获取帖子点赞数列表 */ List<FmsLikedCountDTO> listLikedCount(); /** * 同步帖子点赞数据到数据库 */ void syncLikeDataToDatabase();}接下来,我们考虑一下要使用哪些数据结构来实现这些功能。
首先,点赞操作和取消点赞不能重复操作的,也就是不能连续点多次赞或者连续取消多次赞,每个用户只能对某帖子点一次赞,因此我们可以使用 set 来存储每个帖子的点赞用户,key 为帖子 id,value 为 每个对该帖子点赞的用户 id 集合。
然后就是帖子点赞数的统计,由于每个帖子都对应一个点赞数,因此我们可以使用 hash 结构存储帖子的点赞数,key 为帖子 id,value 为该帖子的点赞数。
此外,为了保证数据的可恢复性,我们可以将 Redis 缓存中的数据定时写入关系型数据库中,进行数据持久化。
具体的实现代码可以参考这个项目的代码:FmsLikeCacheServiceImpl.java。
到此这篇关于使用 Redis 缓存实现点赞和取消点赞的实现示例的文章就介绍到这了,更多相关Redis点赞和取消点赞内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
概要:要实现点赞功能,需要实现的有:谁进行的点赞、什么时候进行点赞、点赞的对象是谁、每一个对象的点赞数量是多少、点赞过后还需要能够取消点赞,为了是点赞后的信息能
记录每个赞的点赞用户,以及对赞的数量统计首先判断用户是否点赞。根据是否点赞,载入不同的html,调用不同的方法已点赞如果已点赞,显示已点赞的html,进行取消点
今天开发了一个文章的留言版块,于是想到要为某个留言点赞,点过赞的再次点击会取消点赞,代码如下:update_zan:function(e){va
模拟朋友圈实时点赞及评论功能点赞思路:点击的时候,使用push(点赞)以及slice(取消赞)方法处理数组,并且调用点赞接口评论思路:点击的时候,写多一个评论列
抖音点赞受限是因为用户在抖音里进行点赞的时候,每个视频或评论都只能点赞一次,再次点击的话就会直接取消点赞,所以说是无法重复点赞的。抖音在点赞时出现点赞失败,是因