电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

springboot +redis 實現點贊、瀏覽、收藏、評論等數量的增減操作

瀏覽:2日期:2023-04-23 08:25:58

springboot +redis 實現點贊、瀏覽、收藏、評論等數量的增減操作

前言

第一次寫博客,記錄一下:

springboot +redis 實現點贊、瀏覽、收藏、評論等數量的增減操作

最近做了一個帖子的收藏、點贊數量的功能,其實之前也做過類似的功能,因為之前一直使用的mysql 總是感覺對于這種頻繁需要改變的值,不應該給予Mysql過大的壓力,本文章采用的是redis 做了持久化。下面貼出關鍵代碼:DataResponse是項目中使用的結果封裝實體類;forumDTO是此功能的參數實體,如果有需要請留言。

常量如下:

private static final String DEFAULT_VALUE = '0:0:0:0:0:0'; public static final Byte BYTE_ZERO = 0; public static final Byte BYTE_ONE = 1; public static final Byte BYTE_TWO = 2; public static final Byte BYTE_THREE = 3; public static final Byte BYTE_FOUR = 4; public static final Byte BYTE_FIVE = 5; public static final Byte BYTE_SIX = 6;

@Override public DataResponse keepNum(ForumDTO forumDTO) { //將帖子id 設置為 key String key = forumDTO.getPostId().toString(); //get 用戶id String userId = forumDTO.getUserId(); String count, newCount; //綁定數據集key BoundHashOperations<String, Object, Object> post = redisTemplate.boundHashOps('post:'); //獲取hKey // count: 0論壇-點贊量 1評論量 2收藏量 3瀏覽 4評論-點贊量 if (null == post.get(key)) { //無則set post.put(key, DEFAULT_VALUE); //再取出來賦值給 count count = post.get(key).toString(); } else { //有直接賦值 count count = post.get(key).toString(); } // operationType 1 瀏覽 2 帖子點贊 3 收藏 4評論-點贊 String prefix; switch (forumDTO.getOperationType()) { case 1://記錄瀏覽次數 OPERATIONTYPE 1 : 記錄瀏覽次數newCount = resetValue(count, BYTE_THREE, true);post.put(key, newCount);break; case 2://記錄帖子-點贊prefix = 'thumbs:post';switch (forumDTO.getClickType()) { case 0: /** * OPERATIONTYPE 2: + CLICKTYPE 0 = 給帖子點贊 * 0點贊 * 從redis中獲取數量 帖子d 例如:177488r88t78r78r7 * count: 0論壇-點贊量 1評論量 2收藏量 3瀏覽 4評論-點贊量 * 避免每種數量都去查詢redis 直接通過 redis value 記錄所有的數量 * 獲取加 +1 后的值 */ if (redisTemplate.opsForSet().isMember(prefix + ':' + key, prefix + ':' + userId)) { return DataResponse.fail('不能重復點贊哦'); } else { redisTemplate.opsForSet().add(prefix + ':' + key, prefix + ':' + userId); } newCount = resetValue(count, BYTE_ZERO, true); //set to redis post.put(key, newCount); break; case 1: //OPERATIONTYPE 2: + CLICKTYPE 1 = 取消帖子點贊 //1取消帖子點贊 if (!redisTemplate.opsForSet().isMember(prefix + ':' + key, prefix + ':' + userId)) { //重復處理 return DataResponse.fail('不能重復取消哦'); } else { //刪除 redisTemplate.opsForSet().remove(prefix + ':' + key, prefix + ':' + userId); } newCount = resetValue(count, BYTE_ZERO, false); post.put(key, newCount); break;}break; case 3:prefix = 'collection:post';List<MqMessage> sendList = new LinkedList<>();MqMessage mqMessage = new MqMessage();switch (forumDTO.getClickType()) { //OPERATIONTYPE 3 + CLICKTYPE 0 = 記錄收藏 case 0: //數量+1 //根據用戶id + 帖子id 查詢redis 數據 if (redisTemplate.opsForSet().isMember(prefix + ':' + key, prefix + ':' + userId)) { //重復處理 return DataResponse.fail('不能重復收藏哦'); } //add redisTemplate.opsForSet().add(prefix + ':' + key, prefix + ':' + userId); //set to redis newCount = resetValue(count, BYTE_TWO, true); post.put(key, newCount); mqMessage.setType(new Byte('9')); mqMessage.setSenderId(userId); mqMessage.setPostId(forumDTO.getPostId()); sendList.add(mqMessage); this.sendMq.send(sendList); break; //OPERATIONTYPE 3 + CLICKTYPE 1 = 取消收藏 case 1: //取消收藏 //嘗試從redis取出當前用戶是否已經收藏 if (!redisTemplate.opsForSet().isMember(prefix + ':' + key, prefix + ':' + userId)) { //重復處理 return DataResponse.fail('不能重復取消哦'); } //刪除 redisTemplate.opsForSet().remove(prefix + ':' + key, prefix + ':' + userId); newCount = resetValue(count, BYTE_TWO, false); post.put(key, newCount); mqMessage.setType(new Byte('10')); mqMessage.setSenderId(userId); mqMessage.setPostId(forumDTO.getPostId()); sendList.add(mqMessage); this.sendMq.send(sendList); break;}break; case 4://記錄評論-點贊// OPERATIONTYPE 4: + CLICKTYPE 0 = 給評論點贊if (null == forumDTO.getCommentId()) { return DataResponse.fail('評論id不能為空');}String commentNum, ckey = forumDTO.getCommentId().toString();BoundHashOperations<String, Object, Object> comment = redisTemplate.boundHashOps('post:comment');if (null == comment.get(ckey)) { //無則set comment.put(ckey, '0'); //再取出來賦值給 count commentNum = comment.get(ckey).toString();} else { //有直接賦值 count commentNum = comment.get(ckey).toString();}//贊評論prefix = 'thumbs:comment';switch (forumDTO.getClickType()) { case 0: /** * 0點贊 * 從redis中獲取數量 帖子d 例如:177488r88t78r78r7 * count: 0論壇-點贊量 1評論量 2收藏量 3瀏覽 4評論-點贊量 * 避免每種數量都去查詢redis 直接通過 redis value 記錄所有的數量 * 獲取加 + 后的值 */ if (redisTemplate.opsForSet().isMember(prefix + ':' + ckey, prefix + ':' + userId)) { return DataResponse.fail('不能重復點贊哦'); } else { redisTemplate.opsForSet().add(prefix + ':' + ckey, prefix + ':' + userId); } //set to redis comment.put(ckey, cResetValue(commentNum, true)); break; case 1: //1取消評論點贊 if (!redisTemplate.opsForSet().isMember(prefix + ':' + ckey, prefix + ':' + userId)) { //重復處理 return DataResponse.fail('不能重復取消哦'); } else { //刪除 redisTemplate.opsForSet().remove(prefix + ':' + ckey, prefix + ':' + userId); } newCount = cResetValue(commentNum, false); comment.put(ckey, newCount); break;}break; default:DataResponse.fail(ResponseEnum.FAILED); } return DataResponse.success(ResponseEnum.SUCCESS); }

resetValue代碼:

/** * 功能描述: <br> * 〈點贊數、收藏數等數量重置〉 * @param val 數組 * @param type 0帖子點贊量 1評論量 2收藏量 3瀏覽 4評論點贊量 * @param isPlus 是否增加數量 true + false - * @Return: java.lang.String * @Author:王震 * @Date: 2020/8/5 10:27 * StringUtils包:import org.apache.commons.lang3.StringUtils; * 可以使用jdk的包替代split方法;但jdk的包需要驗證正則,效率較低。 */ private String resetValue(String val, int j, boolean isPlus) { String[] value = StringUtils.split(val, ':'); Long temp = Long.valueOf(value[j]); StringBuffer sb = new StringBuffer(16); if (isPlus) { temp += 1; } else { temp -= 1; } value[j] = temp.toString(); for (int i = 0, len = value.length; i < len; i++) { if (i != len - 1) {sb.append(value[i]).append(':'); }else {sb.append(value[i]); } } return sb.toString(); }

總結

到此這篇關于springboot +redis 實現點贊、瀏覽、收藏、評論等數量的增減操作的文章就介紹到這了,更多相關springboot +redis實現點贊收藏評論內容請搜索好吧啦網以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | 照相馆预约系统,微信公众号摄影门店系统,影楼管理软件-盟百网络 | 全球化工设备网—化工设备,化工机械,制药设备,环保设备的专业网络市场。 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 冷水机-工业冷水机-冷水机组-欧科隆品牌保障 | 神马影院-实时更新秒播 | 警用|治安|保安|不锈钢岗亭-售货亭价格-垃圾分类亭-移动厕所厂家-苏州灿宇建材 | 无机纤维喷涂棉-喷涂棉施工工程-山东华泉建筑工程有限公司▲ | 酒店厨房设计_中央厨房设计_北京商用厨房设计公司-奇能商厨 | 无锡市珂妮日用化妆品有限公司|珂妮日化官网|洗手液厂家 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 热处理温控箱,热处理控制箱厂家-吴江市兴达电热设备厂 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 光伏支架成型设备-光伏钢边框设备-光伏设备厂家 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 南京试剂|化学试剂|分析试剂|实验试剂|cas号查询-专业60年试剂销售企业 | 铜镍-康铜-锰铜-电阻合金-NC003 - 杭州兴宇合金有限公司 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 | 凝胶成像仪,化学发光凝胶成像系统,凝胶成像分析系统-上海培清科技有限公司 | 电液推杆生产厂家|电动推杆|液压推杆-扬州唯升机械有限公司 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 一体化污水处理设备-一体化净水设备-「山东梦之洁水处理」 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 光栅尺厂家_数显表维修-苏州泽升精密机械 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | 刹车盘机床-刹车盘生产线-龙口亨嘉智能装备 | 济南网站建设|济南建网站|济南网站建设公司【济南腾飞网络】【荐】 | 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 板材品牌-中国胶合板行业十大品牌-环保板材-上海声达板材 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 |