亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

瀏覽:3日期: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實現點贊收藏評論內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 九九国产在线视频 | 国产成a人亚洲精v品久久网 | 亚洲一区二区三区首页 | 国产成人精品系列在线观看 | 免费黄a | 国产青青操| 国产极品精频在线观看 | 亚洲视频综合 | 亚洲91色| 国产综合区 | 美女隐私视频黄www免费 | 免费一级成人免费观看 | 1a级毛片免费观看 | 亚洲综合精品一二三区在线 | 亚洲乱码国产一区网址 | 日韩大片免费观看视频播放 | 亚洲美女操| 久久精品国产一区二区三区日韩 | 久久精品国产一区二区三区不卡 | 在线播放国产精品 | 韩国啪啪高清网站 | 日韩成人在线播放 | 韩国女主播精品一区二区 | 一区二区在线观看高清 | 一男一女的一级毛片 | 黑色丝袜高跟国产在线91 | 看黄视频在线观看 | 日韩区欧美区 | 国产午夜精品一二区理论影院 | 亚洲国产伦理 | 国产精品一区二 | 蜜桃一区 | 亚洲欧美日韩一区二区 | 日本ab在线 | 中文线码中文高清播放中 | 一级aa 毛片高清免费看 | 韩国19禁青草福利视频在线 | 日本热久久 | 亚洲春色在线视频 | 国模福利视频在线播放 | 91精品国产闺蜜国产在线 |