新用户注册入口 老用户登录入口

[转载]java实现点赞(顶)功能

文章作者:转载 更新时间:2023-08-31 21:48:44 阅读数量:127
文章标签:点赞功能后端设计Redis缓存时间有效性有状态请求操作点赞数统计
本文摘要:本文针对Java实现点赞功能的需求,提出了通过后端设计有状态请求操作的解决方案。为区分用户是首次点赞还是重复点赞,利用Redis缓存技术设置具有时效性的记号。具体实现时,以用户ID(uid)和攻略/文章ID(sid)拼接形成唯一key,检查该key是否存在来判断用户是否已点赞。若key不存在,则执行点赞数+1操作,并设定key的有效期至当天结束时间与当前时间之间的秒数差,确保了key的时效性管理。此外,还涉及到了点赞数统计以及对有状态请求操作的具体处理。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_47555380/article/details/108081752。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

java实现点赞(顶)功能

在这里插入图片描述

需求分析
分析:1.必须先登录,否则提示2.第一次点赞(),点赞操作,点赞数+1,提示顶成功2.第二次点赞(),没有操作,提示今天顶过了
---------------------------------------------
核心问题:1>怎么区分当前请求时顶成功操作(第一次顶)还是今天已经顶过(第二次顶)2>怎么考虑今天已顶过 ----------------------------------------------核心问题需要区分是第一次顶还是的二次顶,这种请求操作属于有状态请求操作,需要后端设计一个记号,这个记号注意需要设置时效性(今天最后一秒到当前时间间隔[单位是秒])//如何设计记号?
------------------------------------------------方案1:可以参照之前攻略收藏记号操作方式,设计一个key,用户uid做区分(保证唯一),value值是攻略id集合,一顶将攻略uid添加集合中方案2:设计一个key,使用用户uid跟攻略sid进行区分,value值随意,需要设置有效性 

在这里插入图片描述

实现步骤
1.创建一个点赞接口,传入当前点赞攻略sid,获取当前登录用户uid
2.通过sid跟uid拼接记号的key
3.判断key是否存在如果存在,说明今天已经点赞(),不做任何处理,页面提示如果不存在,说明具体没点赞(),获取vo对象,点赞数属性+1,将记号缓存到redis中,设置过期时间:今天最后一秒到当前时间间隔[单位是秒]
4.更新vo对象
具体实现
  //判断是否顶过@Overridepublic boolean strategyThumbup(String id, String sid) {String key = RedisKeys.USER_STRATEGY_THUMBUP.join(id, sid);//如果不包含,表示没有顶过,执行点赞,点赞数+1,并设置key有效时间if (!template.hasKey(key)) {StrategyStatisVO statisVO = this.getStrategyStatisVO(sid);statisVO.setThumbsupnum(statisVO.getThumbsupnum() + 1);this.setStrategyStatisVO(statisVO);//拿到最晚时间Date endDate = DateUtil.getEndDate(new Date());//计算时间间隔long time = DateUtil.getDateBetween(endDate, new Date());//设置有效时间template.opsForValue().set(key, "1", time, TimeUnit.SECONDS);return true;}return false;}-----------------------------------------------------------------------------------//时间工具类public class DateUtil {/*** 获取两个时间的间隔(秒) */public static long getDateBetween(Date d1, Date d2){return Math.abs((d1.getTime()-d2.getTime())/1000);//取绝对值}public static Date getEndDate(Date date) {if (date == null) {return null;}Calendar c = Calendar.getInstance();c.setTime(date);c.set(Calendar.HOUR_OF_DAY,23);c.set(Calendar.MINUTE,59);c.set(Calendar.SECOND,59);return c.getTime();}
}
小结
    1.核心问题需要区分是第一次顶还是的二次顶,这种请求操作属于有状态请求操作2.有状态请求操作我们需要设置记号,问题的关键在于记号的设计3.这个记号,我们也可以使用与点赞/收藏功能类似的记号,就是以用户id为key,然后将顶的文章id放到集合中为value4.但是更推荐使用以用户id和攻略id拼接而成的为key,value随意取5.我们操作时只需要判断key是否存在,存在,我们什么操作也不用做,不存在,我们就将点赞()+1,然后设置key的时间即可6.最后更新vo对象7.难点在于时间的设置,看工具类,这个key键设置体现了key键的唯一性,灵活性和时效性

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_47555380/article/details/108081752。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
Redis缓存Redis缓存是一种高性能、开源的内存数据存储系统,可在本文中用于实现用户点赞状态的实时记录与管理。作为缓存技术,Redis支持多种数据结构(如字符串、哈希、集合、有序集合等),并提供了键值过期时间设置的功能,便于在Java实现点赞功能时,以用户ID和攻略ID拼接生成唯一key来存储用户的点赞状态,并设定该key的有效期为当天结束前的时间间隔,从而满足区分首次点赞和重复点赞的需求。
有状态请求操作在Web应用开发中,有状态请求是指那些需要依赖于服务器端存储的客户端状态信息才能正确处理的HTTP请求。例如,在文章所述的点赞场景下,用户是否已经对某个攻略进行过点赞就是一种状态信息。服务器端需要根据用户的登录状态和历史行为(即是否已点赞)来决定是否执行点赞操作和提示用户相应的信息。相较于无状态请求,有状态请求要求服务端具有更复杂的状态管理和持久化能力。
时间戳与时间有效性时间戳是一个能够精确标识某一时刻的数字,通常表示从格林尼治标准时间1970年1月1日零点(UTC)开始所经过的秒数或毫秒数。在本文中,时间戳被用来计算当前时间与当天结束时间之间的差值,以此来设置Redis缓存中点赞状态记录的过期时间,确保了这个记号仅在当天内有效,过了当天则自动清除,实现了每日点赞的时效性管理。
用户ID (uid)与攻略/文章ID (sid)在互联网产品尤其是社交平台和内容社区中,为了准确追踪和管理用户的行为以及对应的内容,会为每个用户提供一个唯一的用户ID (uid),用以标识用户的身份;同时,也会为每一篇攻略或文章分配一个独特的攻略/文章ID (sid)。在实现点赞功能时,将uid和sid结合使用,通过拼接形成一个全局唯一的键,这样就可以有效地记录用户对特定攻略/文章的点赞状态,避免重复点赞等问题的发生。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在实际的互联网产品开发中,用户行为记录与状态管理是至关重要的环节,点赞功能只是其中的一个典型应用实例。近期,随着社交平台和内容社区的迅速发展,如何高效、准确地处理用户互动行为成为了技术领域的热门话题。例如,抖音、微博等平台都采用类似的机制来防止用户短时间内重复点赞,并通过实时更新点赞数保证用户体验。
进一步探讨,除了利用Redis这样的缓存数据库进行状态管理外,大数据分析和机器学习也在用户行为预测和反作弊策略中发挥关键作用。例如,通过对用户行为模式的深度学习,可以识别出异常的点赞行为,有效防止刷赞现象,确保数据的真实性和公正性。
此外,对于有状态请求操作的设计原则,不仅适用于点赞场景,在用户评论、收藏、分享等各类互动行为中均有广泛应用。在设计时,不仅要关注功能实现,还需充分考虑系统的扩展性、性能优化以及数据安全等问题。特别是在《个人信息保护法》等相关法规出台后,如何在保障用户行为记录功能的同时尊重并保护用户的隐私权,也成为技术研发的重要考量因素。
总的来说,无论是从技术实践还是法律法规层面,用户行为状态管理都是一个复杂且不断演进的主题,值得我们持续关注和深入研究。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
whoami - 显示当前登录用户的用户名。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
Kylin配置与部署:Hadoop、HBase、Java环境搭建与优化 12-31 jQuery基于窗口的照片查看器插件 09-27 5种炫酷js鼠标跟随动画特效插件 03-12 紫色宽屏瑜伽课程培训网站模板 01-04 红色响应式女性美容美甲企业html网站模板 12-19 可自定义颜色的jQuery颜色拾取器插件 12-08 [转载]开放式激光振镜+运动控制器(六):双振镜运动 12-04 宽屏创意思维案例展示源码模板下载 11-12 css样式选择器优先级 11-06 本次刷新还10个文章未展示,点击 更多查看。
揭秘Impala查询优化器:执行计划生成与代价估算,解析验证至物理优化阶段实践探析 10-09 [转载]pgsql 无法删除表 CASCADE无效 09-22 蓝色通用科技网络公司响应式网站模板下载 09-03 清新宽屏按摩器展示官网html网站模板 08-04 黑色深邃电影资讯视频播放网站模板 05-23 jquery.pinBox-可将任何元素固定在容器中的jQuery插件 04-29 jQuery固定侧边栏插件ssMenu 03-14 ActiveMQ非持久订阅状态丢失问题:Broker重启影响与持久订阅解决方案 03-05 ActiveMQ线程池大小配置优化:系统资源限制下的性能与稳定性调优实践 02-24 简洁好看化妆品商城美容店铺购物网站模板 02-10 黄色自适应精密五金加工厂单页网站静态模板 01-07
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"