婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > springboot +redis 實(shí)現(xiàn)點(diǎn)贊、瀏覽、收藏、評論等數(shù)量的增減操作

springboot +redis 實(shí)現(xiàn)點(diǎn)贊、瀏覽、收藏、評論等數(shù)量的增減操作

熱門標(biāo)簽:廊坊外呼系統(tǒng)在哪買 地圖標(biāo)注工廠入駐 一個地圖標(biāo)注多少錢 b2b外呼系統(tǒng) 400電話辦理的口碑 南京手機(jī)外呼系統(tǒng)廠家 高碑店市地圖標(biāo)注app 臺灣電銷 四川穩(wěn)定外呼系統(tǒng)軟件

springboot +redis 實(shí)現(xiàn)點(diǎn)贊、瀏覽、收藏、評論等數(shù)量的增減操作

前言

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

最近做了一個帖子的收藏、點(diǎn)贊數(shù)量的功能,其實(shí)之前也做過類似的功能,因?yàn)橹耙恢笔褂玫膍ysql 總是感覺對于這種頻繁需要改變的值,不應(yīng)該給予Mysql過大的壓力,本文章采用的是redis 做了持久化。下面貼出關(guān)鍵代碼:DataResponse是項(xiàng)目中使用的結(jié)果封裝實(shí)體類;forumDTO是此功能的參數(shù)實(shí)體,如果有需要請留言。

常量如下:

 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 設(shè)置為 key
    String key = forumDTO.getPostId().toString();
    //get 用戶id
    String userId = forumDTO.getUserId();
    String count, newCount;
    //綁定數(shù)據(jù)集key
    BoundHashOperationsString, Object, Object> post = redisTemplate.boundHashOps("post:");
    //獲取hKey
    // count: 0論壇-點(diǎn)贊量 1評論量 2收藏量 3瀏覽 4評論-點(diǎn)贊量
    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 帖子點(diǎn)贊 3 收藏 4評論-點(diǎn)贊
    String prefix;
    switch (forumDTO.getOperationType()) {
      case 1:
        //記錄瀏覽次數(shù) OPERATIONTYPE 1 : 記錄瀏覽次數(shù)
        newCount = resetValue(count, BYTE_THREE, true);
        post.put(key, newCount);
        break;
      case 2:
        //記錄帖子-點(diǎn)贊
        prefix = "thumbs:post";
        switch (forumDTO.getClickType()) {
          case 0:
            /**
             * OPERATIONTYPE 2: + CLICKTYPE 0 = 給帖子點(diǎn)贊
             * 0點(diǎn)贊
             * 從redis中獲取數(shù)量 帖子d 例如:177488r88t78r78r7
             * count: 0論壇-點(diǎn)贊量 1評論量 2收藏量 3瀏覽 4評論-點(diǎn)贊量
             * 避免每種數(shù)量都去查詢r(jià)edis 直接通過 redis value 記錄所有的數(shù)量
             * 獲取加 +1 后的值
             */
            if (redisTemplate.opsForSet().isMember(prefix + ":" + key, prefix + ":" + userId)) {
              return DataResponse.fail("不能重復(fù)點(diǎn)贊哦");
            } 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 = 取消帖子點(diǎn)贊
            //1取消帖子點(diǎn)贊
            if (!redisTemplate.opsForSet().isMember(prefix + ":" + key, prefix + ":" + userId)) {
              //重復(fù)處理
              return DataResponse.fail("不能重復(fù)取消哦");
            } 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";
        ListMqMessage> sendList = new LinkedList>();
        MqMessage mqMessage = new MqMessage();
        switch (forumDTO.getClickType()) {
          //OPERATIONTYPE 3 + CLICKTYPE 0 = 記錄收藏
          case 0:
            //數(shù)量+1
            //根據(jù)用戶id + 帖子id 查詢r(jià)edis 數(shù)據(jù)
            if (redisTemplate.opsForSet().isMember(prefix + ":" + key, prefix + ":" + userId)) {
              //重復(fù)處理
              return DataResponse.fail("不能重復(fù)收藏哦");
            }
            //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取出當(dāng)前用戶是否已經(jīng)收藏
            if (!redisTemplate.opsForSet().isMember(prefix + ":" + key, prefix + ":" + userId)) {
              //重復(fù)處理
              return DataResponse.fail("不能重復(fù)取消哦");
            }
            //刪除
            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:
        //記錄評論-點(diǎn)贊
        // OPERATIONTYPE 4: + CLICKTYPE 0 = 給評論點(diǎn)贊
        if (null == forumDTO.getCommentId()) {
          return DataResponse.fail("評論id不能為空");
        }
        String commentNum, ckey = forumDTO.getCommentId().toString();
        BoundHashOperationsString, 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點(diǎn)贊
             * 從redis中獲取數(shù)量 帖子d 例如:177488r88t78r78r7
             * count: 0論壇-點(diǎn)贊量 1評論量 2收藏量 3瀏覽 4評論-點(diǎn)贊量
             * 避免每種數(shù)量都去查詢r(jià)edis 直接通過 redis value 記錄所有的數(shù)量
             * 獲取加 + 后的值
             */
            if (redisTemplate.opsForSet().isMember(prefix + ":" + ckey, prefix + ":" + userId)) {
              return DataResponse.fail("不能重復(fù)點(diǎn)贊哦");
            } else {
              redisTemplate.opsForSet().add(prefix + ":" + ckey, prefix + ":" + userId);
            }
            //set to redis
            comment.put(ckey, cResetValue(commentNum, true));
            break;
          case 1:
            //1取消評論點(diǎn)贊
            if (!redisTemplate.opsForSet().isMember(prefix + ":" + ckey, prefix + ":" + userId)) {
              //重復(fù)處理
              return DataResponse.fail("不能重復(fù)取消哦");
            } 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>
   * 〈點(diǎn)贊數(shù)、收藏?cái)?shù)等數(shù)量重置〉
   * @param val  數(shù)組
   * @param type  0帖子點(diǎn)贊量 1評論量 2收藏量 3瀏覽 4評論點(diǎn)贊量
   * @param isPlus 是否增加數(shù)量 true +  false -
   * @Return: java.lang.String
   * @Author:王震
   * @Date: 2020/8/5 10:27
   * StringUtils包:import org.apache.commons.lang3.StringUtils;
   * 可以使用jdk的包替代split方法;但jdk的包需要驗(yàn)證正則,效率較低。
   */
  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();
  }

總結(jié)

到此這篇關(guān)于springboot +redis 實(shí)現(xiàn)點(diǎn)贊、瀏覽、收藏、評論等數(shù)量的增減操作的文章就介紹到這了,更多相關(guān)springboot +redis實(shí)現(xiàn)點(diǎn)贊收藏評論內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 基于springboot微信公眾號開發(fā)(微信自動回復(fù))
  • SpringBoot實(shí)現(xiàn)評論回復(fù)功能(數(shù)據(jù)庫設(shè)計(jì))

標(biāo)簽:定州 泰州 拉薩 伊春 河源 南寧 甘南 畢節(jié)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《springboot +redis 實(shí)現(xiàn)點(diǎn)贊、瀏覽、收藏、評論等數(shù)量的增減操作》,本文關(guān)鍵詞  springboot,+redis,實(shí)現(xiàn),點(diǎn)贊,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《springboot +redis 實(shí)現(xiàn)點(diǎn)贊、瀏覽、收藏、評論等數(shù)量的增減操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于springboot +redis 實(shí)現(xiàn)點(diǎn)贊、瀏覽、收藏、評論等數(shù)量的增減操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人免费在线视频观看| 激情五月激情综合网| 日韩欧美电影一区| 亚洲三级视频在线观看| 国产精品伊人色| 欧美另类一区二区三区| 综合中文字幕亚洲| 国产一区二区在线影院| 欧美理论片在线| 亚洲香肠在线观看| 欧美日韩在线综合| 成人免费在线观看入口| 欧美一级xxx| 天使萌一区二区三区免费观看| 日本高清不卡在线观看| 婷婷综合久久一区二区三区| 欧美日韩一级大片网址| 激情综合色播激情啊| 国产日韩精品一区| 91精品黄色片免费大全| 成人影视亚洲图片在线| 成人欧美一区二区三区小说 | 久久97超碰色| 国产欧美日韩精品a在线观看| 91小视频在线观看| 婷婷久久综合九色国产成人| 日本一区免费视频| 亚洲国产精品99久久久久久久久 | 午夜精品久久久久影视| 国产精品传媒入口麻豆| 国产精品久久久久久户外露出 | 亚洲精品欧美激情| 欧美v国产在线一区二区三区| 日本道色综合久久| 成人手机在线视频| 国产精品亚洲视频| 国产麻豆成人精品| 国产超碰在线一区| 精品一区二区国语对白| 丝袜国产日韩另类美女| 奇米四色…亚洲| 青青青伊人色综合久久| 亚洲成人在线免费| 日韩在线一二三区| 狠狠色综合播放一区二区| 免费一级片91| 99久久国产综合精品麻豆| 在线亚洲一区二区| 欧美日韩免费高清一区色橹橹 | 久久婷婷久久一区二区三区| 亚洲一区二区三区四区的| 午夜精品在线视频一区| 一本一道综合狠狠老| 日韩情涩欧美日韩视频| 视频一区中文字幕| 日韩欧美一二三| 日韩黄色免费网站| 久久综合五月天婷婷伊人| 日韩电影一区二区三区四区| 欧美在线观看视频一区二区 | 777亚洲妇女| 欧美性感一区二区三区| 91精品国产91久久久久久一区二区 | 欧美性大战久久久久久久| 亚洲日穴在线视频| 国产亚洲婷婷免费| 亚洲综合色噜噜狠狠| 欧美猛男超大videosgay| 国产精品一区二区久激情瑜伽| 日日摸夜夜添夜夜添国产精品| 五月天激情综合| 亚洲免费观看视频| 精品国偷自产国产一区| 午夜视频久久久久久| 国产日韩欧美在线一区| 欧美在线观看一二区| 美女视频一区二区三区| 一区二区三区在线视频播放| 亚洲一二三区不卡| 国产99精品国产| 日韩久久久精品| 天天av天天翘天天综合网| 日本道在线观看一区二区| 久久久99精品免费观看| 男女视频一区二区| 欧美日韩一区中文字幕| 亚洲一区二区五区| 日韩视频免费观看高清在线视频| 国产人妖乱国产精品人妖| www.亚洲色图.com| 亚洲va中文字幕| 久久久亚洲欧洲日产国码αv| 国产在线播精品第三| 国产精品日产欧美久久久久| 91亚洲精华国产精华精华液| 亚洲成人tv网| 中文字幕不卡在线观看| 色综合久久99| 成人国产亚洲欧美成人综合网| 亚洲女人的天堂| 69精品人人人人| 91美女精品福利| 天天综合天天做天天综合| 不卡区在线中文字幕| 国产精品欧美一级免费| 欧美日韩视频专区在线播放| caoporn国产精品| 91视频在线观看免费| 99久久国产综合精品色伊| 欧美日韩一区二区三区四区五区| 欧美猛男超大videosgay| 欧美疯狂性受xxxxx喷水图片| 在线观看区一区二| 91色婷婷久久久久合中文| 亚洲日本成人在线观看| 成人免费视频免费观看| 日韩女优av电影在线观看| 99久免费精品视频在线观看| 免费久久99精品国产| 国产亚洲欧洲997久久综合 | 亚洲人成网站色在线观看| 国产精品1区2区3区在线观看| 亚洲视频综合在线| 欧美国产激情二区三区| 婷婷综合另类小说色区| av电影在线观看一区| 久久中文娱乐网| 麻豆视频观看网址久久| 精品视频1区2区| 亚洲激情在线播放| 一本大道久久a久久精二百| 国产精品视频看| 岛国一区二区在线观看| 国产拍欧美日韩视频二区| 久久国产精品99精品国产| 欧美性猛交xxxxxx富婆| 亚洲国产你懂的| 欧美日韩免费视频| 丝袜美腿亚洲综合| 欧美视频在线一区| 亚洲动漫第一页| 欧美日精品一区视频| 亚洲午夜久久久久久久久久久| 欧洲另类一二三四区| 亚洲成人动漫在线观看| 欧美日韩国产免费一区二区| 亚洲国产成人精品视频| 欧美美女黄视频| 日本三级亚洲精品| 国产亚洲美州欧州综合国| 成人国产电影网| 亚洲午夜在线电影| 日韩欧美国产系列| 高清不卡在线观看av| 亚洲天堂精品在线观看| 欧美日韩国产在线观看| 男人的天堂亚洲一区| 国产日产欧美一区二区视频| 色网综合在线观看| 免费观看成人av| 中文字幕中文字幕一区二区| av亚洲精华国产精华精华 | 亚洲欧美电影一区二区| 色播五月激情综合网| 午夜婷婷国产麻豆精品| 久久亚洲私人国产精品va媚药| 不卡的av中国片| 日本成人在线看| 欧美激情一区二区三区蜜桃视频 | 成人黄页在线观看| 一区二区成人在线视频| 日韩精品一区二区三区三区免费 | 欧美日韩国产综合视频在线观看| 美女爽到高潮91| 亚洲精品成人悠悠色影视| 日韩免费在线观看| 色婷婷综合久久久中文字幕| 美女视频黄久久| 亚洲欧洲性图库| 日韩欧美在线综合网| 色婷婷精品大在线视频| 精品亚洲porn| 亚洲电影在线免费观看| 国产精品福利一区| 精品理论电影在线观看| 欧美熟乱第一页| 91麻豆国产香蕉久久精品| 精品综合久久久久久8888| 亚洲已满18点击进入久久| 精品国产乱码久久久久久老虎| 91在线免费看| 国产91丝袜在线18| 蜜臀va亚洲va欧美va天堂| 亚洲日本乱码在线观看| 中文字幕精品一区二区精品绿巨人 | 欧美一级一区二区| 97精品久久久久中文字幕| 国产成人av电影在线播放| 蜜桃一区二区三区在线观看| 一区二区在线观看免费视频播放|