如何使用redis实现(一) 浏览文章阅读量+1

该博客详细介绍了如何利用Vo对象存储在Redis中,实现在文章被查看时实时增加阅读量的功能。通过控制器接口和业务层方法,当访问文章页面时,首先检查Redis中是否存在对应文章的Vo对象,如果不存在则从数据库获取并转化为Vo,再将阅读量加一并存储回Redis。同时,还提供了获取文章Vo对象的业务方法,用于展示文章详情包括阅读量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析

  • 应用场景:查看攻略文章,则此文章阅读数+1
    在这里插入图片描述

在这里插入图片描述

  • 若想要数据丢失量低则使用map对象作为redis的value存储,但是操作比较复杂
  • 所以此篇文章演示的是vo对象作为redis的value存储操作,毕竟存储的这些阅读量…不是特别重要的数据~

vo类

  • 攻略文章的vo类
  • 主要通过攻略文章对象数据转化
    在这里插入图片描述

控制器接口

  • 访问文章页面时候 所访问的控制器接口
  • 主要看画红线部分,其他部分可忽略
  • 通过传入当前文章的id,使此文章阅读量+1
    在这里插入图片描述

业务层实现方法

  • 注入了操作redis的StringRedisTemplate对象和操作攻略文章对象数据的IStrategyService业务层接口
  • 先在redis中查看有没有此对应的文章vo数据,有则获取出来
  • 若redis不存在该攻略文章id对应的vo数据对象,则直接在mysql数据库中获取攻略文章对象,并通过BeanUtils.copyProperties转化成vo对象
  • 最后使其vo对象内的viewnum属性值+1(阅读量+1),然后存回redis中即可完成 文章阅读量+1的操作
 @Autowired
    private StringRedisTemplate template;
    @Autowired
    private IStrategyService strategyService;

    @Override
    public void viewnumIncrease(Long sid) {
//       拼接vo的key
        String key = RedisKeys.STRATEGY_STATIS_VO.join(sid.toString());
//        获取vo对象
        StrategyStatisVO vo = null;
        if (!template.hasKey(key)) {
            //        不存在,进行vo对象初始化
            Strategy strategy = strategyService.getById(sid);
            vo = new StrategyStatisVO();
            BeanUtils.copyProperties(strategy,vo);
            vo.setStrategyId(strategy.getId());
        } else {
            String voStr = template.opsForValue().get(key);
            vo = JSON.parseObject(voStr, StrategyStatisVO.class);
        }
//        vo的viewnum属性+1
        vo.setViewnum(vo.getViewnum() + 1);
//        更新redis vo对象
        template.opsForValue().set(key, JSON.toJSONString(vo));
    }

将文章对应vo类返回给前端(即可显示阅读量)

控制器接口

  • 获取当前文章对应的vo对象,即可显示出此文章对应的阅读量等数据
    在这里插入图片描述

业务层实现方法

  • 依旧需要注入private StringRedisTemplate template;
    private IStrategyService strategyService;对象操作redis和数据库
  • 和以上阅读量+1的方法部分操作类似
  • 通过文章id,查询redis是否有对应的vo对象
  • 若无则从mysql数据库中查找,并转化成vo对象,存入redis中
  • 若有则将vo的json字符串对象 转成实体类对象
  • 最后返回vo对象即可!
public StrategyStatisVO getStrategyVO(Long sid) {
//       拼接vo的key
        String key = RedisKeys.STRATEGY_STATIS_VO.join(sid.toString());
//        获取vo对象
        StrategyStatisVO vo = null;
        if (!template.hasKey(key)) {
            //        不存在,进行vo对象初始化
            Strategy strategy = strategyService.getById(sid);
            vo = new StrategyStatisVO();
            BeanUtils.copyProperties(strategy,vo);
            vo.setStrategyId(strategy.getId());
            template.opsForValue().set(key, JSON.toJSONString(vo));
        } else {
            String voStr = template.opsForValue().get(key);
            vo = JSON.parseObject(voStr, StrategyStatisVO.class);
        }

        return vo;
    }
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值