您好,登錄后才能下訂單哦!
這篇文章主要介紹“java怎么實現收藏功能”,在日常操作中,相信很多人在java怎么實現收藏功能問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java怎么實現收藏功能”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
分析:
1.要求用戶必須登錄,否則提示
2.第一次點擊,表示收藏成功,收藏數+1,顯示藍色星星
3.第二次點擊,表示取消收藏操作,收藏數-1,顯示白色星星
-------------------------------------
核心問題:當前請求時收藏操作,還是取消收藏操作
[這類型的操作,稱之為有狀態的操作]
解決方案:第一次請求過來時,留下一個記號,第二次請求時候,根據記號有無決定收藏還是取消收藏
引出新問題:記號怎么設計
-------------------------------------
記號應該存在緩存中,而不是mongodb/mysql
原因:現在所有操作都是緩存里面操作,也即:使用redis來緩存集合,此時需要思考,key值與value值設計
//判斷是否存在以用戶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)); }
到此,關于“java怎么實現收藏功能”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。