您的位置:首页 > 其它

记一次实现统计访问量最高文章的功能

2017-09-05 22:16 351 查看
   最近在公司做了一个新的需求:统计上周某几个系列文章中,阅读量最大的6篇文章。本来这些统计的功能,是要去找专门的统计,比如百度统计、友盟、谷歌等,但是我只有一天的开发时间,去研究第三方的统计指定某类文章的实现和接入,想了想,还是自己动手来实现来的快。
   自己来实现的话,我想了想方案,应该是Redis+DB+定时任务,其中,redis做两件事情:每次点击统计次数++、存储上周阅读量最多的6篇文章;DB是作为数据的备份(redis突然GG了)和防止需求变更(比如,斯比的产品突发奇想把上周的阅读量最大的6篇文章,改为上两周的阅读量最大的6篇文章,或者是一个月、一个季度的,这样的话,以前统计的数据还是在的);定时任务,就是每周的凌晨把redis中文章的count写入数据库再归零,然后把新版的“上周阅读量的6篇文章”更新到缓存。
   其中,使用到的技术和疑难点呢,貌似没有,只有JRedis的模糊查询我之前没使用过(使用的都是放字符串或者list,哈哈)、定时任务就使用的spring Quartz吧。一切都准备好了,等明天去公司在去编码吧!
下面附上redis的模糊匹配

Redis 模糊匹配 SearchKeys

语法:KEYS pattern
说明:返回与指定模式相匹配的所用的keys。
该命令所支持的匹配模式如下:
(1)?:用于匹配单个字符。例如,h?llo可以匹配hello、hallo和hxllo等;
(2)*:用于匹配零个或者多个字符。例如,h*llo可以匹配hllo和heeeello等;
(3)[]:可以用来指定模式的选择区间。例如h[ae]llo可以匹配hello和hallo,但是不能匹配hillo。
同时,可以使用“/”符号来转义特殊的字符
在java里Jedis jedis = new Jedis("10.110.20.152", 6379);
Set<String> set = jedis.keys("china:shandong*");
for (String key : set) {
System.out.println(key);
}Tips:
这里使用到了Keys,很烂的主意,因为在获取的时候会造成阻塞。。。建议使用scan
Jedis scan及其count的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: