Redis队列缓存应用示例

消息队列的一个典型应用就是通过异步处理方式,来解决某些场景下的高并发问题 例如日志的收集,特点是数据量大,并发压力大,不宜直接插入数据库,但实时性要求不高,所以适合使用消息队列缓存日志信息,然后批量进行处理 基本思路 (1)日志信息插入队列缓存 (2)定时读取缓存 批量入库 实现 下面是简单的伪代码示例 (1)日志入队 并发量很高,处理过程应尽量简洁 可以做成接口,供日志记录程序调用 //取得日志信息 var info = getinfo(); //添加时间戳 info += "|" + time(); //放入队列 redis.lpush("log", info); (2)入库处理 每分钟从队列中获取N条信息,批量插入数据库 插入过程如果出现错误,需要把失败的信息再次入队,以便下次重新入库 //目标读取信息数量 var count = N; //回滚信息数组 var arr_rollback = array(); //获取消息队列的内容,拼接sql /** 批量insert的格式为: INSERT INTO users(name, age) VALUES ('姚明', 25), ('盖茨', 50), ('火星人', 600); */ var sql = "insert into log (`content`, `createtime`) values "; //循环读取日志信息,拼接sql for(var i=0; i<count; i++){ //从消息队列获取信息 var info = redis.rpop("log"); //如果没有取到信息,停止循环 if(empty(info)){ break; } //添加到回滚数组 arr_rollback.push(info); //分割信息,取得日志内容和时间戳 var arr = split(info, "|"); var loginfo = arr[0]; var time = arr[1]; //拼接sql sql += " ('" + loginfo + "','" + time + "'),"; } //执行插入数据库操作 sql = rtrim(sql,",")+";"; var result = mysql_query(sql); //插入失败回滚 if(!result){ foreach(arr_rollback as rec){ redis.lpush("log", rec); } } (3)设置定时 可以使用定时器,也可以用最简单的系统定时任务

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-12-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魏艾斯博客www.vpsss.net

非正常关闭 vi 编辑器产生 swp 文件怎么删除

12960
来自专栏python3

pymysql模块的使用

之前我们都是通过MySQL自带的命令行客户端工具mysql来操作数据库,那如何在python程序中操作数据库呢?这就用到了pymysql模块,该模块本质就是一个...

14030
来自专栏黑白安全

新手如何连接到MySQL

所谓数据库就是专为储存数据而设计的库,是相对独立的。所以对于运行在Web服务器上的PHP程序在使用数据库的时候,首先需要做的就是连接数据库。在PHP本身就提供对...

66730
来自专栏编程语言

Python:VScode 设置Python不同版本运行环境

1.首先本地安装有不同的Python的版本,比如2.7和3.5.mac下一般默认自带2.7版本。  终端输入侧  python -V 则显示默认版本号。而p...

13920
来自专栏difcareer的技术笔记

AndroidStudio阅读Android源码终极篇

几乎在所有的教程里面,都提到说,要阅读Android源码,需要完整编译一次源码,比如我之前的文章使用AndroidStudio阅读Android源码。但是这个完...

32420
来自专栏网络

Servlet开篇

好好学习,天天向上! 1 什么是Servlet? sun公司制订的一种用来扩展web服务器功能的组件规范。 2 如何写一个Servlet? step1 写一个j...

23490
来自专栏码云1024

Linux 下的JDK环境的搭建

30150
来自专栏数据和云

MySQL连接错误的十二“坑”

环境准备 自建MySQL环境主机 主机:iZbp1e*****krn92qrx0Z 内网ip: 10.26.254.217 客户端ecs主机 主机:iZbp1e...

57790
来自专栏张尧博客

Ubuntu软件常用升级命令

56560
来自专栏码字搬砖

Hbase在HDFS上的各个目录作用

1、/hbase/.META. 就是存储1中介绍的 META 表的存储路径。 2、/hbase/.archive HBase 在...

54020

扫码关注云+社区

领取腾讯云代金券