zoukankan      html  css  js  c++  java
  • 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。

    不经一番彻骨寒,哪有梅花扑鼻香?
  • 相关阅读:
    【原创】Silverlight之TextBox的LostFocus、GotFocus事件
    SQL Cursor 基本用法[用两次FETCH NEXT FROM INTO语句?]
    cannot convert from 'wchar_t *' to 'char *' 问题
    TEXTMETRICW 结构记录
    【D3D】Direct3D中LPRECT(上左右底)和LPoint(x,y)之前转换
    【原创】有关Silverlight中自动生成的类中 没有WCF层edmx模型新加入的对象 原因分析。
    【原创】有关Silverlight中异常“XmalParseEception” 通用解决思路
    hdu 1011(Starship Troopers,树形dp)
    hdu 2196(Computer 树形dp)
    树形dp(poj 1947 Rebuilding Roads )
  • 原文地址:https://www.cnblogs.com/zongyao/p/13831122.html
Copyright © 2011-2022 走看看