启动类添加注解:
@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。