最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Redis實(shí)現(xiàn)點(diǎn)贊取消點(diǎn)贊的詳細(xì)代碼

 更新時(shí)間:2022年03月20日 08:43:43   作者:總是幸福的老豌豆  
這篇文章主要介紹了Redis實(shí)現(xiàn)點(diǎn)贊取消點(diǎn)贊的詳細(xì)代碼,通過查詢某實(shí)體(帖子、評(píng)論等)點(diǎn)贊數(shù)量,需要用到事務(wù)相關(guān)知識(shí),結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

前言

異步實(shí)現(xiàn)

代碼實(shí)現(xiàn):

/**
     *
     * @param userId 點(diǎn)贊的人
     * @param type 點(diǎn)贊與取消點(diǎn)贊的表示
     * @param textId   文章ID
     * @param entityUserId -- 被點(diǎn)贊的人,文章作者
     */
    private void like(long userId,int type,int textId,long entityUserId){
        redisTemplate.execute(new SessionCallback() {
            @Override
            public Object execute(RedisOperations operations) throws DataAccessException {
                String entityLikeKey = RedisKeyUtil.getEntityLikeKey(type, textId);
                String userLikeKey = RedisKeyUtil.getUserLikeKey(entityUserId);
                boolean isMember = redisTemplate.opsForSet().isMember(entityLikeKey, userId);
                //多個(gè)更新操作,需要事務(wù)
                operations.multi();
                if (isMember) {
                    //取消贊
                    redisTemplate.opsForSet().remove(entityLikeKey, userId);
                    redisTemplate.opsForValue().decrement(userLikeKey);
                } else {
                    //點(diǎn)贊
                    redisTemplate.opsForSet().add(entityLikeKey, userId);
                    redisTemplate.opsForValue().increment(userLikeKey);
                }
                return operations.exec();
            }
        });

    }

    /**
     *查詢某實(shí)體(帖子,評(píng)論等)點(diǎn)贊數(shù)量
     * @param type 1點(diǎn)贊,2評(píng)論。0表示取消點(diǎn)贊
     * @param textId
     * @return
     */
    private long findEntityLikeCount(int type, int textId){
        String entityLikeKey = RedisKeyUtil.getEntityLikeKey(type, textId);
        return redisTemplate.opsForSet().size(entityLikeKey);
    }

    /**
     * 查詢某人對(duì)某文章的點(diǎn)贊狀態(tài)
     * @param textId 帖子ID
     * @param userId
     * @return
     */
    private int findEntityLikeStatus(int textId,long userId){
        String entityLikeKey = RedisKeyUtil.getEntityLikeKey(1, textId);
        //此處返回int,是為了進(jìn)行擴(kuò)展。比如擴(kuò)展踩,為止2.等等情況
        return redisTemplate.opsForSet().isMember(entityLikeKey,userId)?1:0;
    }

    /**
     * 查詢某個(gè)用戶獲得贊,用于在個(gè)人主頁(yè)查看收獲了多少贊
     * @param userId
     * @return
     */
    private int findUserLikeCount(long userId){
        String userLikeKey = RedisKeyUtil.getUserLikeKey(userId);
        Integer count = (Integer) redisTemplate.opsForValue().get(userLikeKey);
        // count.intValue()數(shù)據(jù)的整數(shù)形式;
        return count==null?0:count.intValue();
    }

Redis–key設(shè)置

public class RedisKeyUtil {
    private static final String SPLIT = ":";
    private static final String PREFIX_ENTITY_LIKE = "like:entity";
    private static final String PREFIX_USER_LIKE = "like:user";
    private static final String PREFIX_USER_COMMENTS="comments:user";
    /**
     *某個(gè)實(shí)體收到的贊,如帖子,
     * like:entity:entityType:entityId -> set(userId) 對(duì)應(yīng)set,存入userId
     * @param entityType
     * @param entityId
     * @return
     */
    public static String getEntityLikeKey(int entityType, int entityId) {
        return PREFIX_ENTITY_LIKE + entityType + SPLIT + entityId;
    }
     *某個(gè)用戶收到的總贊數(shù)
     * like:user:userId ->long
     * @param userId
    public static String getUserLikeKey(long userId) {
        return PREFIX_USER_LIKE + SPLIT + userId;
     * 匯總某個(gè)帖子的評(píng)論數(shù)量
    public static String getUserCommentsKey(int articleId) {
        return PREFIX_USER_COMMENTS + SPLIT + articleId;

到此這篇關(guān)于Redis實(shí)現(xiàn)點(diǎn)贊取消點(diǎn)贊的文章就介紹到這了,更多相關(guān)Redis實(shí)現(xiàn)點(diǎn)贊取消點(diǎn)贊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis集群增加節(jié)點(diǎn)與刪除節(jié)點(diǎn)的方法詳解

    Redis集群增加節(jié)點(diǎn)與刪除節(jié)點(diǎn)的方法詳解

    這篇文章主要給大家介紹了關(guān)于Redis集群增加節(jié)點(diǎn)與刪除節(jié)點(diǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 解讀緩存db redis local的取舍之道

    解讀緩存db redis local的取舍之道

    這篇文章主要介紹了解讀緩存db redis local的取舍之道,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Redis搶單預(yù)熱的實(shí)現(xiàn)示例

    Redis搶單預(yù)熱的實(shí)現(xiàn)示例

    本文主要介紹了Redis搶單預(yù)熱的實(shí)現(xiàn)示例,以應(yīng)對(duì)搶單活動(dòng)帶來(lái)的高并發(fā)訪問壓力,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式

    Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式

    這篇文章主要介紹了Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Linux服務(wù)器安裝redis數(shù)據(jù)庫(kù)圖文教程

    Linux服務(wù)器安裝redis數(shù)據(jù)庫(kù)圖文教程

    Redis是一個(gè)開源的使用ANSI C語(yǔ)言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。這篇文章主要介紹了Linux服務(wù)器安裝redis數(shù)據(jù)庫(kù)圖文教程,需要的朋友可以參考下
    2018-03-03
  • redis keys與scan命令的區(qū)別說(shuō)明

    redis keys與scan命令的區(qū)別說(shuō)明

    這篇文章主要介紹了redis keys與scan命令的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-03-03
  • Redis數(shù)據(jù)庫(kù)的安裝配置方法

    Redis數(shù)據(jù)庫(kù)的安裝配置方法

    redis 是一個(gè)高性能的key-value數(shù)據(jù)庫(kù)。 redis的出現(xiàn),很大程度補(bǔ)償了memcached這類keyvalue存儲(chǔ)的不足,在部 分場(chǎng)合可以對(duì)關(guān)系數(shù)據(jù)庫(kù)起到很好的補(bǔ)充作用。它提供了Python,Ruby,Erlang,PHP客戶端,使用很方便
    2014-06-06
  • Redis中一個(gè)String類型引發(fā)的慘案

    Redis中一個(gè)String類型引發(fā)的慘案

    著存儲(chǔ)的數(shù)據(jù)量越來(lái)越大,Redis的內(nèi)存的使用量也快速上升,結(jié)果遇到了大內(nèi)存Redis實(shí)例因?yàn)樯蒖DB而響應(yīng)變慢的問題。很顯然String類型并不是一種好的選擇,那有什么辦法可以降低內(nèi)存消耗嗎?帶著這個(gè)問題一起通過本文學(xué)習(xí)下吧
    2021-07-07
  • redis如何后臺(tái)啟動(dòng)的方法

    redis如何后臺(tái)啟動(dòng)的方法

    這篇文章主要介紹了redis如何后臺(tái)啟動(dòng)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • redis通過lua腳本,獲取滿足key pattern的所有值方式

    redis通過lua腳本,獲取滿足key pattern的所有值方式

    這篇文章主要介紹了redis通過lua腳本,獲取滿足key pattern的所有值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-03-03

最新評(píng)論

霍邱县| 临清市| 西丰县| 长丰县| 保定市| 永新县| 上虞市| 屏山县| 莆田市| 富顺县| 攀枝花市| 韶关市| 错那县| 伊宁市| 土默特左旗| 昌都县| 墨脱县| 宕昌县| 双流县| 邵阳市| 平阳县| 会昌县| 鸡泽县| 牟定县| 石首市| 金坛市| 教育| 沅陵县| 嘉祥县| 利川市| 南汇区| 万山特区| 阿瓦提县| 嘉黎县| 长子县| 盐边县| 襄汾县| 莱州市| 印江| 福州市| 盐池县|