springboot+redis定时更新浏览数

启动类添加注解:

@EnableScheduling

定时任务类:

先获取所有的key,再将key转为int类型得到id,通过key获取得到redis中的值。

然后调用更新方法,为了避免重复更新,删除redis中的key-value。

0/10 * * * * ?表示每10秒执行一次

package com.yao.common.conf;


import com.yao.common.base.redis.RedisUtils;
import com.yao.common.pojo.News;
import com.yao.manage.info.mapper.newsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * 定时任务
 */
@Component
public class QuartzConf {


    @Autowired
    private newsMapper newsMapper;

    @Autowired
    private RedisUtils redisUtils;


    @Scheduled(cron =" 0 0/3 * * * ?   ")
    public void updateViews() throws Exception {
       Set<String> keyset= redisUtils.keys("*");
        System.out.println(keyset);
        List<Integer> list = new ArrayList<>();
        for(String key : keyset) {   //遍历keys
            if (!key.isEmpty() && key != null) {
                String key1=key.trim();
            System.out.println("LLL:"+key1);
              if (null !=key1  ){
                 Integer id=Integer.parseInt(key1); //对字符串转换为Integer类型
                  list.add(id);
              }
            }


        }
        for( Integer id: list) {

            News news = newsMapper.getNewsById(id);

            Integer views = (Integer) redisUtils.get(id+"");
            news.setViews(views);
            System.out.println("浏览数:" + views);
//                     news.setViews(views);
            newsMapper.updateViews(news);
            redisUtils.del(id+"");
        }


    }
}

业务serveice:

 public News getNewsById(Integer newsId) {

        News newsById = newsMapper.getNewsById(newsId);
        Set<String> keyset= redisUtils.keys(newsById.getId()+"");
        System.out.println("keyset"+keyset);
        if (keyset!=null && !keyset.isEmpty()) {
            for (String key : keyset) {   //遍历keys
                if (!key.isEmpty() && key != null) {
                    String key1 = key.trim();
                    System.out.println("key1: " + key1);
                    Integer views = (Integer) redisUtils.get(key);
                    if (views > 0) {
                        views = views + 1;
                        redisUtils.set(newsById.getId() + "", views);
                    } else {
                        redisUtils.set(newsById.getId() + "", newsById.getViews() + 1);
                    }
                } else {
                    redisUtils.set(newsById.getId() + "", newsById.getViews() + 1);
                }
            }
        }else {
            Integer v=newsById.getViews()+1;
            redisUtils.set(newsById.getId() + "", v);
            System.out.println("id:"+newsById.getId()+": "+v+"个");
        }

        return newsById;
    }

以上把浏览数保存到redis中,出于简单,我用主键id+" ",做为key。

不经一番彻骨寒,哪有梅花扑鼻香?
原文地址:https://www.cnblogs.com/zongyao/p/13831122.html