基于express+redis高速实现实时在线用户数统计
作者:zhanhailiang 日期:2014-11-09
本文将介绍怎样基于express+redis高速实现实时在线用户数统计。
1. 在github.com上创建项目uv-tj。将其同步到本地:
[root@~/wade/nodejs]# git clone git@github.com:billfeller/uv-tj.git
2. 使用npm init初始化node项目(本例不须要复杂的操作,所以暂不使用express工具来生成express应用程序骨架):
[root@~/wade/nodejs/uv-tj]# npm init
3. 向package.json加入应用程序启动命令。例如以下:
{
"name": "uv-tj",
"version": "1.0.0",
"description": "uv tj demo",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"repository": {
"type": "git",
"url": "https://github.com/billfeller/uv-tj.git"
},
"keywords": [
"uv",
"tj",
"demo"
],
"author": "billfeller",
"license": "MIT",
"bugs": {
"url": "https://github.com/billfeller/uv-tj/issues"
},
"homepage": "https://github.com/billfeller/uv-tj",
"dependencies": {
"express": "^4.10.1",
"redis": "^0.12.1"
}
}
4. 加入app.js文件。代码例如以下:
// 创建express对象和一个redisclient连接
var express = require('express');
var redis = require('redis');
var db = redis.createClient();
var app = express();
// 纪录用户在线的中间件
// 这里使用user-agent作为用户标识符
// 这里使用sorted sets,以便查询近期N毫秒内在线的用户;
app.use(function(req, res, next) {
var ua = req.headers['user-agent'];
db.zadd('online', Date.now(), ua, next);
});
// 通过 zrevrangebyscore 来查询上一分钟在线用户。
// 我们将能得到从当前时间算起在 60,000 毫秒内活跃的用户。 app.use(function(req, res, next) {
var min = 60 * 1000;
var ago = Date.now() - min;
db.zrevrangebyscore('online', '+inf', ago, function (err, users) {
if (err) {
return next (err);
}
req.online = users;
next ();
});
});
// 从不同浏览器进入就能够看到同一时候在线用户数不断添加
app.get('/', function(req, res){
res.send(req.online.length + ' users online');
});
app.listen(3000);
5. 启动应用程序:
[root@~/wade/nodejs/uv-tj]# npm start
> uv-tj@1.0.0 start /root/wade/nodejs/uv-tj
> node app.js
訪问结果例如以下:
6. 总结:
使用此方法能够非常方便计算相似的统计量,如PV,UV。订单数等等。
个人觉得涉及计数器的需求都能够通过此方案来解决。
7. 完整代码请见:
8. 推荐阅读:
基于express+redis高速实现实时在线用户数统计的更多相关文章
- 基于swoole+Redis的消息实时推送通知
swoole+Redis将实时数据的推送 一 实现功能 设计师订单如果设计师未抢单,超时(5分钟)设计订单时时给设计师派送, 设计师公众号中收到派单信息 设计发布者收到派单成功信息 环境 centos ...
- 基于socket.io的实时在线选座系统
基于socket.io的实时在线选座系统(demo) 前言 前段时间公司做一个关于剧院的项目,遇到了这样一种情况. 在高并发多用户同时选座的情况下,假设A用户进入选座页面,正在选择座位,此时还没有提交 ...
- Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室
一.聊天室简单介绍 采用nodeJS设计,基于express框架,使用WebSocket编程之 socket.io机制.聊天室增加了 注册登录模块 ,并将用户个人信息和聊天记录存入数据库. 数据库采用 ...
- 基于tomcat获取在线用户数
https://blog.csdn.net/smallnetvisitor/article/details/84697505 需求: 统计某应用的在线用户数 实现方案: 1.基于session监听(复 ...
- Feathers JS – 基于 Express 构建数据驱动的服务
Feathers 是一个轻量的 Web 应用程序框架,基于 NodeJS 最流行的 Web 框架——Express.这使得它很容易使用 socket.io 来创建 RESTful Web 服务和实 ...
- websocket 无需通过轮询服务器的方式以获得响应 同步在线用户数 上线下线 抓包 3-way-handshake web-linux-shell 开发
https://code.google.com/archive/p/phpwebsocket/source/default/source The WebSocket API (WebSockets) ...
- 基于express框架的应用程序骨架生成器介绍
作者:zhanhailiang 日期:2014-11-09 本文将介绍怎样使用express-generator工具高速生成基于express框架的应用程序骨架: 1. 安装express-gener ...
- 基于PCIe的高速接口设计
基于PCIe的高速接口设计 由 judyzhong 于 星期四, 03/03/2016 - 13:49 发表 作者:李晓宁,姚远程,秦明伟 2016年微型机与应用第1期 摘要:PCIe总线是第三代I/ ...
- FPGA和DSP间基于SRIO的高速通信系统设计
作者:陈婷,岳强,汪洋 解放军信息工程大学 摘要: 现代信号处理系统通常需要在不同处理器之间实现高速数据通信,SRIO协议由于高效率.低延时的特性被广泛使用.本文研究了在FPGA和DSP两种处理器之间 ...
随机推荐
- [ZJOI2015]诸神眷顾的幻想乡 广义后缀自动机_DFS_语文题
才知道题目中是只有20个叶子节点的意思QAQ.... 这次的广义后缀自动机只是将 last 设为 1, 并重新插入. 相比于正统的写法,比较浪费空间. Code: #include <cstdi ...
- 路飞学城Python-Day15(模块二思维导图)
- luogu P1375 小猫(卡特兰数)
题意 (n<=200000) 题解 把DP转移方程写出来,这不是卡特兰数吗?然后就解决了. 做完这题我发现 DP真是一个好东西. (公式连乘所以中间要加mod要不爆longlong了) #inc ...
- csv 模块的基本使用
csv 模块专门用于读取和写入 csv 文件内容 以下主要讲在 python2 中的使用,在python3中有不同的地方,我会单独指出来 一般的excel表格可以保存为csv格式,然后就可以使用 cs ...
- Linux Shell脚本编程-信号捕获
bash编程的信号捕获: kill -l 显示当前系统可用信号(trap -l) 获取帮助:man 7 single 常用信号: 1) SIGHUP 无须重启进程而让其重读配置文件 2) SI ...
- 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计
[转] C#学习笔记14——Trace.Debug和TraceSource的使用以及日志设计 Trace.Debug和TraceSource的使用以及日志设计 .NET Framework 命名空 ...
- iOS之数据请求NSURLConnection
iOS之数据请求NSURLConnection NSString *lcsUrl = @"http://192.168.1.1:8080/lcsUrl"; //假设网址中有汉字.须 ...
- 1.Swift教程翻译系列——关于Swift
英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 我本来是做JAVA的.可是有一颗折腾的心,苹果公布Swift以后就下载了苹果的开 ...
- MySQL优化-存储引擎
MySQL优化-存储引擎 标签(空格分隔): mysql 存储引擎 查看存储引擎 show engines Myisam: 表锁 全文索引 Innodb: 行锁 事物 外键 Memory: 内存存储引 ...
- PostgreSQL Replication之第七章 理解Linux高可用(4)
7.4 术语与概念 一组计算机被称为集群.集群内的一台计算机被称为一个节点. 当集群内的节点数量是 N (2,,3,等.) ,那么我们讨论一个N节点的集群. 高可用性软件,传输层和集群管理层都运行于每 ...