亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java怎么實現收藏功能

發布時間:2022-08-31 10:26:41 來源:億速云 閱讀:422 作者:iii 欄目:開發技術

這篇文章主要介紹“java怎么實現收藏功能”,在日常操作中,相信很多人在java怎么實現收藏功能問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java怎么實現收藏功能”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

java怎么實現收藏功能

需求分析

分析:

1.要求用戶必須登錄,否則提示
2.第一次點擊,表示收藏成功,收藏數+1,顯示藍色星星
3.第二次點擊,表示取消收藏操作,收藏數-1,顯示白色星星
-------------------------------------
核心問題:當前請求時收藏操作,還是取消收藏操作
[這類型的操作,稱之為有狀態的操作]
解決方案:第一次請求過來時,留下一個記號,第二次請求時候,根據記號有無決定收藏還是取消收藏
引出新問題:記號怎么設計
-------------------------------------
記號應該存在緩存中,而不是mongodb/mysql
原因:現在所有操作都是緩存里面操作,也即:使用redis來緩存集合,此時需要思考,key值與value值設計

java怎么實現收藏功能

步驟分析

//判斷是否存在以用戶id為key的key鍵,返回list    
1.創建一個收藏接口,傳攻略sid,獲取用戶uid
2.請求進入之后需要判斷是收藏操作還是取消收藏操作
3.通過uid拼接出用戶收藏的攻略id集合(記號)的key
4.判斷key是否存在,如果存在,直接獲取sidList,如果不存在,返回空集合list
//判斷是取消收藏還是收藏操作,返回boolean類型
5.判斷當前傳入的sid是否在sidList(攻略id集合)中
1>如果不在,當前請求為收藏請求,獲取vo對象,收藏數+1,將sid添加到sidList(攻略id集合)
2>如果在,當前請求為取消收藏請求,獲取vo對象,收藏數-1,將sid從sidList(攻略id集合)移除
6.更新sidList(攻略id集合),更新vo對象
//從redis中取出來的集合字符串轉換為集合
JSON.parseArray(集合字符串,String.class)

具體實現

//獲取收藏數id集合
@Override
    public List<String> getStrategyFavorStatisVO(String userId, String sid) {
        //拼接key
        String key = RedisKeys.USER_STRATEGY_FAVOR.join(userId);
        //判斷redis中有沒有該key
        List<String> list = new ArrayList<>();
        if (template.hasKey(key)) {
            //如果存在,就直接獲得key對應的收藏數集合
            String sidListStr = template.opsForValue().get(key);
            //將字符串解析為集合
            list = JSON.parseArray(sidListStr, String.class);
        }
        //如果不存在,創建list,緩存到redis中,并返回空集合
        return list;
    }

    //判斷集合中是否存在攻略id
    @Override
    public boolean isExistsSid(String uid, String sid) {
        List<String> list = this.getStrategyFavorStatisVO(uid, sid);
        StrategyStatisVO statisVO = this.getStrategyStatisVO(sid);
        //判斷是否在存在傳過來的攻略id
        if (!list.contains(sid)) {
            //不存在,收藏操作,收藏數+1,添加到list集合中
            statisVO.setFavornum(statisVO.getFavornum() + 1);
            list.add(sid);
        } else {
            //存在,取消收藏操作,收藏數-1,并從list集合中移除
            statisVO.setFavornum(statisVO.getFavornum() - 1);
            list.remove(sid);
        }
        //更新vo對象,更新list
        this.setStrategyStatisVO(statisVO);
        template.opsForValue().set(RedisKeys.USER_STRATEGY_FAVOR.join(uid), JSON.toJSONString(list));
        return list.contains(sid);
    }
----------------------------------------
    //獲取vo對象
     @Override
    public StrategyStatisVO getStrategyStatisVO(String sid) {
        //使用枚舉類拼接key
        String key = RedisKeys.STRATEGY_STATIS_VO.join(sid);
        StrategyStatisVO statisVO = new StrategyStatisVO();
        //判斷vo對象是否存在,即判斷key是否存在
        if (!template.hasKey(key)) {
            //不存在,初始化數據,將數據查出來,然后賦值給vo對象,最后存起來
            Strategy strategy = strategyService.get(sid);
            BeanUtils.copyProperties(strategy, statisVO);
            statisVO.setStrategyId(sid);
            template.opsForValue().set(key, JSON.toJSONString(statisVO));
        } else {
            //存在,獲取vo對象
            String VO = template.opsForValue().get(key);
            statisVO = JSON.parseObject(VO, StrategyStatisVO.class);
        }
        return statisVO;
    }
    //設置vo對象,將vo對象存儲到redis數據庫中
     @Override
    public void setStrategyStatisVO(StrategyStatisVO statisVO) {
        String key = RedisKeys.STRATEGY_STATIS_VO.join(statisVO.getStrategyId());
        template.opsForValue().set(key, JSON.toJSONString(statisVO));
    }

小結

1.關于收藏功能的實現其實與點贊功能類似,都是點擊一下,數據+1,再點擊一下,數據-1
2.關于這類問題,我們稱之為有狀態的操作,就是第一次操作之后,我們需要留下一個記號(key鍵,value-list集合)
3.例如上面的操作,我們用key鍵作為標記,key鍵通過當前用戶id拼接,站在用戶角度
4.先判斷key鍵是否存在,存在,就通過key取出list集合,不存在,返回空集合給前端,這個是用來顯示收藏顏色的
5.當我們點擊操作時,只需要判斷傳進來的攻略id是否存在集合中即可
6.如果不在,當前請求為收藏請求,獲取vo對象,收藏數+1,將sid添加到sidList(攻略id集合)
  如果在,當前請求為取消收藏請求,獲取vo對象,收藏數-1,將sid從sidList(攻略id集合)移除
7.最后更新sidList(攻略id集合),更新vo對象即可

到此,關于“java怎么實現收藏功能”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

唐山市| 牙克石市| 吉水县| 水城县| 梅河口市| 张家口市| 梁平县| 恭城| 通许县| 太保市| 威远县| 陈巴尔虎旗| 浪卡子县| 绍兴县| 五华县| 循化| 合川市| 库伦旗| 博白县| 拉萨市| 铜川市| 龙州县| 承德县| 徐水县| 泾阳县| 镇安县| 酒泉市| 靖远县| 观塘区| 孝昌县| 乌拉特中旗| 通辽市| 雅安市| 宜州市| 武宁县| 涟水县| 绵竹市| 叶城县| 玉山县| 麻栗坡县| 中超|