最近公司做了一个类似 于发帖,交友圈一个这样的功能 在如何精确快速的获取用户的浏览量,且及时的更新显示,最初我是这样想,把每条帖子内容浏览量放到reids 里面,但是redis只是用来存零时数据,想想觉的还是放表里面好,在发布的帖子表增加一个字段作为该帖子的浏览量,但是每次从表里面读更新浏览量,这样肯定是不明智的做法,直接看下面代码

1:当用户浏览帖子内容时 根据KEY 从redis 获取改帖子的浏览量如果存在,那么就在以前的基础上+1 否则就从数据库查询出来再+1然后放到缓存里面

        // 浏览量
if (redisClient.hexists(CAMPUS_CIRCLE_PAGEVIEWS_KEY, id.toString())) {
redisClient.hincrBy(CAMPUS_CIRCLE_PAGEVIEWS_KEY, id.toString(), 1);
} else {
Integer count = campusCircle.getCount() + 1;
redisClient.hincrBy(CAMPUS_CIRCLE_PAGEVIEWS_KEY, id.toString(), count);
}
CAMPUS_CIRCLE_PAGEVIEWS_KEY 这个是帖子浏览量的key
id.toString()是帖子ID
2:写一个定时任务 每10 分钟同步到数据库里面 这个根据业务需求,20分钟30 随便你
/**
* 定时任务
*
* @author ckj
*
*/
@Component
public class CampusCircleTask {
private static final Logger LOGGER = LoggerFactory.getLogger(CampusCircleTask.class);
@Autowired
private CampusCircleDao campusCircleDao;
@Autowired
private RedisClient redisClient;
private static final String CAMPUS_CIRCLE_PAGEVIEWS_KEY = "campus:circle:pageviews";// 校园圈浏览量 @Scheduled(cron="0 0/10 * * * *")
public void synchronizePageviews() {
LOGGER.info("CampusCircleTask start");
Map<String, String> map = redisClient.hgetAll(CAMPUS_CIRCLE_PAGEVIEWS_KEY);
for (Map.Entry<String, String> entry : map.entrySet()) {
CampusCircle campusCircle = campusCircleDao.getById(Integer.parseInt(entry.getKey()));
campusCircle.setCount(Integer.parseInt(entry.getValue()));
campusCircleDao.update(campusCircle);
}
LOGGER.info("CampusCircleTask end");
}
}

3:页面显示的时候 由于我们存到redis是 Hash 形式的,这时可要遍历Hash 获取

 
    /**
* 从redids 获取 浏览量
*
* @param campusCircleId 帖子ID
* @return
*/
public Integer getPageviews(Integer campusCircleId) {
Integer count = 0;
Map<String, String> map = redisClient.hgetAll(CAMPUS_CIRCLE_PAGEVIEWS_KEY);
for (Map.Entry<String, String> entry : map.entrySet()) {
if (campusCircleId.toString().equals(entry.getKey())) {
count = Integer.parseInt(entry.getValue());
break;
}
}
return count;
}

java 如何快速的获取浏览量的更多相关文章

  1. 【Python】模块学习之Timer定时任务,递归定时自调获取博客浏览量

    Timer定时任务 下面是Timer函数的官方doc介绍信息 """ Call a function after a specified number of second ...

  2. phpcms V9首页 频道页 列表页 推荐位 简单获取文章浏览量和评论统计

    phpcms V9首页 频道页 列表页 推荐位 简单获取文章浏览量和评论统计 列表取得数据方法: {pc:content action="lists" catid="$c ...

  3. Stack Overflow 上 370万浏览量的一个问题:如何比较 Java 的字符串?

    在逛 Stack Overflow 的时候,发现了一些访问量像喜马拉雅山一样高的问题,比如说这个:如何比较 Java 的字符串?访问量足足有 370万+,这不得了啊!说明有很多很多的程序员被这个问题困 ...

  4. [转帖]Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?

    Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递? http://www.itpub.net/2019/12/03/4567/   在逛 Stack Overfl ...

  5. Java Web快速入门——全十讲

    Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...

  6. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  7. Tumblr:150亿月浏览量背后的架构挑战

    Tumblr:150亿月浏览量背后的架构挑战 2013/04/08 · IT技术, 开发 · 9.9K 阅读 · HBase, Tumblr, 架构 英文原文:High Scalability,编译: ...

  8. SpringBoot:高并发下浏览量入库设计

    一.背景 文章浏览量统计,low的做法是:用户每次浏览,前端会发送一个GET请求获取一篇文章详情时,会把这篇文章的浏览量+1,存进数据库里. 1.1 这么做,有几个问题: 在GET请求的业务逻辑里进行 ...

  9. (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例)

    (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例) https://pan.baidu.com/s/1L54VuFwCdKVnQGVc8vD1TQnwmj java手册 Ja ...

随机推荐

  1. Spring整合Mybatis错误解决方案

    ERROR:java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory. ...

  2. MATLAB一些常用的function

    在MATLAB中一些常用的算数符号与我们平时所用的不同,比如:根号,平方,e,以及对数函数等. (1)平方:a^2 意思为a的平方,亦可以写成a*a: (2)根号:sqrt(x)意思为对x开根号,x既 ...

  3. usage: git remote add [<options>] <name> <url> -f, --fetch fetch the remote branches --tags import all tags and associated objects when fetching

    按照git官网提示输入 git pushgit remote add origin git@github.com:***3 / elm-1.git -u 链接git远程仓库 出现错误 usage: g ...

  4. Sliding Window POJ - 2823 单调队列模板题

    Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间 ...

  5. Django_模板

    1. 模板变量 小插曲 2. 模板点语法和标签 2.1 获取属性 2.2 调用方法 2.3 获取索引 2.4 获取字典中的值 3. 模板中的标签 3.1 if 3.2 for 3.3 注释 乘除 整除 ...

  6. unidac 断线重连

    unidac 断线重连 因为物理网络断连或数据库超时踢掉连接等原因,Tuniconnection建立的连接可能会断掉. 在默认状态下,程序会抛出异常框,并罢工. 其实Tuniconnection是可以 ...

  7. 操作系统 - epoll中的ET和LT

    参考 https://www.quora.com/What-is-meant-by-edge-triggering-and-level-triggering http://man7.org/linux ...

  8. IntelliJ IDEA 2017.3尚硅谷-----忽略大小写提示

  9. C++继承、多态与虚表

    继承 继承的一般形式 子类继承父类,是全盘继承,将父类所有的东西都继承给子类,除了父类的生死,就是父类的构造和析构是不能继承的. 继承的访问权限从两方面看: 1.对象:对象只能直接访问类中公有方法和成 ...

  10. Ubuntu 安装 k8s 三驾马车 kubelet kubeadm kubectl

    Ubuntu 版本是 18.04 ,用的是阿里云服务器,记录一下自己实际安装过程的操作步骤. 安装 docker 安装所需的软件 apt-get update apt-get install -y a ...