亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java實(shí)現(xiàn)收藏功能

 更新時(shí)間:2022年08月31日 11:43:20   作者:shan&cen  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)收藏功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java實(shí)現(xiàn)收藏功能的具體代碼,供大家參考,具體內(nèi)容如下

需求分析

分析:

1.要求用戶必須登錄,否則提示
2.第一次點(diǎn)擊,表示收藏成功,收藏?cái)?shù)+1,顯示藍(lán)色星星
3.第二次點(diǎn)擊,表示取消收藏操作,收藏?cái)?shù)-1,顯示白色星星
-------------------------------------
核心問題:當(dāng)前請(qǐng)求時(shí)收藏操作,還是取消收藏操作
[這類型的操作,稱之為有狀態(tài)的操作]
解決方案:第一次請(qǐng)求過來時(shí),留下一個(gè)記號(hào),第二次請(qǐng)求時(shí)候,根據(jù)記號(hào)有無決定收藏還是取消收藏
引出新問題:記號(hào)怎么設(shè)計(jì)
-------------------------------------
記號(hào)應(yīng)該存在緩存中,而不是mongodb/mysql
原因:現(xiàn)在所有操作都是緩存里面操作,也即:使用redis來緩存集合,此時(shí)需要思考,key值與value值設(shè)計(jì)

步驟分析

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

具體實(shí)現(xiàn)

//獲取收藏?cái)?shù)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對(duì)應(yīng)的收藏?cái)?shù)集合
? ? ? ? ? ? String sidListStr = template.opsForValue().get(key);
? ? ? ? ? ? //將字符串解析為集合
? ? ? ? ? ? list = JSON.parseArray(sidListStr, String.class);
? ? ? ? }
? ? ? ? //如果不存在,創(chuàng)建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)) {
? ? ? ? ? ? //不存在,收藏操作,收藏?cái)?shù)+1,添加到list集合中
? ? ? ? ? ? statisVO.setFavornum(statisVO.getFavornum() + 1);
? ? ? ? ? ? list.add(sid);
? ? ? ? } else {
? ? ? ? ? ? //存在,取消收藏操作,收藏?cái)?shù)-1,并從list集合中移除
? ? ? ? ? ? statisVO.setFavornum(statisVO.getFavornum() - 1);
? ? ? ? ? ? list.remove(sid);
? ? ? ? }
? ? ? ? //更新vo對(duì)象,更新list
? ? ? ? this.setStrategyStatisVO(statisVO);
? ? ? ? template.opsForValue().set(RedisKeys.USER_STRATEGY_FAVOR.join(uid), JSON.toJSONString(list));
? ? ? ? return list.contains(sid);
? ? }
----------------------------------------
?? ?//獲取vo對(duì)象
??? ?@Override
? ? public StrategyStatisVO getStrategyStatisVO(String sid) {
? ? ? ? //使用枚舉類拼接key
? ? ? ? String key = RedisKeys.STRATEGY_STATIS_VO.join(sid);
? ? ? ? StrategyStatisVO statisVO = new StrategyStatisVO();
? ? ? ? //判斷vo對(duì)象是否存在,即判斷key是否存在
? ? ? ? if (!template.hasKey(key)) {
? ? ? ? ? ? //不存在,初始化數(shù)據(jù),將數(shù)據(jù)查出來,然后賦值給vo對(duì)象,最后存起來
? ? ? ? ? ? Strategy strategy = strategyService.get(sid);
? ? ? ? ? ? BeanUtils.copyProperties(strategy, statisVO);
? ? ? ? ? ? statisVO.setStrategyId(sid);
? ? ? ? ? ? template.opsForValue().set(key, JSON.toJSONString(statisVO));
? ? ? ? } else {
? ? ? ? ? ? //存在,獲取vo對(duì)象
? ? ? ? ? ? String VO = template.opsForValue().get(key);
? ? ? ? ? ? statisVO = JSON.parseObject(VO, StrategyStatisVO.class);
? ? ? ? }
? ? ? ? return statisVO;
? ? }
?? ?//設(shè)置vo對(duì)象,將vo對(duì)象存儲(chǔ)到redis數(shù)據(jù)庫中
?? ? @Override
? ? public void setStrategyStatisVO(StrategyStatisVO statisVO) {
? ? ? ? String key = RedisKeys.STRATEGY_STATIS_VO.join(statisVO.getStrategyId());
? ? ? ? template.opsForValue().set(key, JSON.toJSONString(statisVO));
? ? }

小結(jié)

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis-plus操作json字段實(shí)戰(zhàn)教程

    Mybatis-plus操作json字段實(shí)戰(zhàn)教程

    這篇文章主要介紹了Mybatis-plus操作json字段實(shí)戰(zhàn)教程,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Java基礎(chǔ)之String類使用與字符串比較

    Java基礎(chǔ)之String類使用與字符串比較

    String類代表字符串,java程序中的所有字符串文字(例如"abc")都被實(shí)現(xiàn)為此類的實(shí)例。本文將詳解String類的使用,以及如何進(jìn)行字符串比較
    2022-08-08
  • 你真的懂java的日志系統(tǒng)嗎

    你真的懂java的日志系統(tǒng)嗎

    日志管理的第一件事,就是日志的收集,日志收集是開發(fā)者必備的技巧,不管是哪個(gè)開發(fā)語言,哪個(gè)開發(fā)平臺(tái),日志收集的插件都是有很多選擇的,下面這篇文章主要給大家介紹了關(guān)于java日志系統(tǒng)的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • Mybatis中一條SQL使用兩個(gè)foreach的問題及解決

    Mybatis中一條SQL使用兩個(gè)foreach的問題及解決

    這篇文章主要介紹了Mybatis中一條SQL使用兩個(gè)foreach的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring Boot整合Swagger測(cè)試api構(gòu)建全紀(jì)錄

    Spring Boot整合Swagger測(cè)試api構(gòu)建全紀(jì)錄

    這篇文章主要給大家介紹了關(guān)于Spring Boot整合Swagger測(cè)試api構(gòu)建的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • java實(shí)現(xiàn)微信H5支付方法詳解

    java實(shí)現(xiàn)微信H5支付方法詳解

    本篇文章主要介紹了java實(shí)現(xiàn)微信H5支付方法詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-04-04
  • SpringMVC實(shí)現(xiàn)controller中獲取session的實(shí)例代碼

    SpringMVC實(shí)現(xiàn)controller中獲取session的實(shí)例代碼

    本篇文章主要介紹了SpringMVC實(shí)現(xiàn)controller中獲取session的實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-02-02
  • idea運(yùn)行main方法或Test避免編譯整個(gè)應(yīng)用的實(shí)現(xiàn)方法

    idea運(yùn)行main方法或Test避免編譯整個(gè)應(yīng)用的實(shí)現(xiàn)方法

    這篇文章主要介紹了idea運(yùn)行main方法或Test避免編譯整個(gè)應(yīng)用的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • WebService教程詳解(二)

    WebService教程詳解(二)

    這篇文章主要介紹了WebService教程詳解(二) 的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • Java實(shí)現(xiàn)redis分布式鎖的三種方式

    Java實(shí)現(xiàn)redis分布式鎖的三種方式

    本文主要介紹了Java實(shí)現(xiàn)redis分布式鎖的三種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論