springBoot集成redis实现点赞阅读统计、并针对用户去重

传统JAVA项目统计每篇文章的阅读数、点赞数、当前用户是否点赞需要多次操作数据库,对数据进行去重等,这将会对数据库造成巨大压力。

集成redis来进行对数据的统计,这将会使效率大大提高

#Redis类型简介

Redis有5种数据类型(字符串String,哈希Hash,列表List,集合Set,有序列表Sort Set)

String字符串:存储基本的数据类型。

Hash哈希:键值对存储。

List列表:列表包含的元素,相同元素可以重复出现。

Set集合:无序排列,不能重复。

Sort Set 有序列表:列表特性,按值排序。

这里我们将使用redis的hash类型来进行操作

哈希在很多编程语言中都有着很广泛的应用,而在Redis中也是如此,在redis中,哈希类型是指Redis键值对中的值本身又是一个键值对结构,形如value=[{field1,value1},…{fieldN,valueN}]

JAVA代码实现
Hash类型就是Hash表
redisTemplate.opsForHash().put(h,k,v);
使用StringRedisTemplate模板来操作hash类型,其中h 就是类似我们的表名,k,v是我们要存储的键值对,key是不能重复的,所以可以对数据进行有效的去重。

保存数据

/**
     * @Description: 保存Hash表记录
     * @Author: Huang
     * @Date: 2021/1/9 16:13
     * @Param:  key  :Hash表名
     *          hkey :Hash表列名
     * @return: void
     */
    public void setHash(String key,String hkey){
        redisTemplate.opsForHash().put(key,hkey, LocalDateTime.now().toString());
    }

redis中存储的数据
在这里插入图片描述

删除Hash指定列

/**
     * @Description: 删除Hash表记录
     * @Author: Huang
     * @Date: 2021/1/9 16:20
     * @Param:
     *  key  :Hash表名
     *  hKey :Hash表列名
     * @return: java.lang.Long
     */
    public Long deleteHashKey(String key,String hKey){
        return redisTemplate.opsForHash().delete(key,hKey);
    }

查看列是否存在

/**
     * @Description: 检查列是否存在
     * @Author: Huang
     * @Date: 2021/1/9 23:04
     * @Param: [key, hKey]
     * @return: boolean
     */
    public boolean checkHashKey(String key,String hKey){
        return redisTemplate.opsForHash().hasKey(key,hKey);
    }

获取Hash的长度

    /**
     * @Description: 获取Hash表长度
     * @Author: Huang
     * @Date: 2021/1/9 16:15
     * @Param: [key]
     * @return: java.lang.Long
     */
    public Long getHashSize(String key){
        return redisTemplate.opsForHash().size(key);
    }

业务逻辑代码

//从redis获取阅读数,根据文章ID获取到指定hash的长度,就是我们需要的阅读数
readCount = redisUtil.getHashSize("notice-read-" + queryIdParam.getId());
//获取通知点赞数
agreeCount = redisUtil.getHashSize("notice-agree-" + queryIdParam.getId());

if (StringUtils.isNotBlank(oaCloudSysUser.getId())){
   /**
    * 添加当前用户阅读记录
    * 保存记录到redis中,根据同一文章id,不同用户id来进行存储
    **/
   redisUtil.setHash("notice-read-"+queryIdParam.getId(),oaCloudSysUser.getId());
   /**
    * 获取当前用户是否点赞
    * 根据文章ID来查寻Hash中是否有该条记录
   	**/
   agree = redisUtil.checkHashKey("notice-agree-" + queryIdParam.getId(), oaCloudSysUser.getId());
}

执行结果
在这里插入图片描述
可以在redis查询我们的阅读记录
在这里插入图片描述
四条记录对应着我们的阅读数,key对应我们的用户ID,Value是用户阅读时间

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值