分析
- 前提须知:(一)vo的阅读量+1,(二)vo的收藏量+1,(三)vo的点赞量+1
- 以上三篇文章所用的vo类是存在redis中为同一个类型,一篇文章对应一个vo对象在redis中
- 以下定时操作,将redis中文章id为key对应的vo对象,持久化进mysql中
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1926bcd1e5930c41385d64cb542e4d04.png)
mysql的文章实体类
- 画红圈才是此演示用到的数据内容
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/350f22803783779e8589fc909f8f0402.png)
redis中作为value的vo类
- 文章的id作为key,一个文章对应一个这样的vo类,存入redis中
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/75a237faa5bf23802c51786a00620ded.png)
定时器
- 首先在启动类上贴上注解
@EnableScheduling
开启定时任务 - 通过通配符
*
在redis中查出每个文章id对应的vo,返回成集合 - 将此集合中每个vo对象的值更新到对应的mysql的文章对象值中去
@Component
public class RedisDataPersistenceJob {
@Autowired
private IStrategyStatisVORedisService strategyStatisVORedisService;
@Autowired
private IStrategyService strategyService;
@Scheduled(cron = "0/10 * * * * ?")
public void doWork() {
System.out.println("---------------vo对象持久化-begin----------------");
List<StrategyStatisVO> vos = strategyStatisVORedisService.queryVosByPattern("*");
for (StrategyStatisVO vo : vos) {
strategyService.updateStatisVo(vo);
}
System.out.println("---------------vo对象持久化-end----------------");
}
}
此定时器使用到的方法
查出redis中每个文章对应的vo对象数据–redis操作
- 注入
private StringRedisTemplate template;
操作redis - 通过传过来的通配符匹配key,查询匹配到的key集合(此演示使用了
*
通配符,查所有) - 将key集合遍历,查询到每一个对应的vo对象,并存入vo集合中
public List<StrategyStatisVO> queryVosByPattern(String pattern) {
List<StrategyStatisVO> vos = new ArrayList<>();
Set<String> keys = template.keys(RedisKeys.STRATEGY_STATIS_VO.join(pattern));
if (keys!=null && keys.size()>0){
for (String key:keys){
String voStr = template.opsForValue().get(key);
StrategyStatisVO vo = JSON.parseObject(voStr, StrategyStatisVO.class);
vos.add(vo);
}
}
return vos;
}
将每个vo数据更新到对应的文章数据中 --mysql操作
public void updateStatisVo(StrategyStatisVO vo) {
UpdateWrapper<Strategy> wrapper = new UpdateWrapper();
wrapper.eq("id", vo.getStrategyId())
.set("viewnum", vo.getViewnum())
.set("replynum", vo.getReplynum())
.set("favornum", vo.getFavornum())
.set("sharenum", vo.getSharenum())
.set("thumbsupnum", vo.getThumbsupnum());
super.update(wrapper);
}