logo
当前位置:首 页 > 编程技术 >后端开发 >docker > 查看文章

redis因为器操作简单,高性能等特点深受开发者喜爱

开始我也觉得麻烦,例如最近做的log日志的功能,因为是微服务的logs日志,都在容器中运行服务。所以操作的接口多而且散离 ,每个都添加公共接口方法发现服务会增加耗时1000%,原来3秒左右的请求现在需要30多秒,因为使用了DDD思路拆分的微小功能请求多,同时并发加剧了磁盘IO的耗时。

 

说下大概的思路:将日志按照流的方式记录到log文件中,结束使用———————–或者=================分割。

每个请求之前会加上 tips 以及请求的方式,返回值前也会加上tips以及返回值。就是流水账似的。

 

一个请求的动作就是打开log文件,添加数据到结尾,关闭log文件。另外一个借口继续重复这个动作。

 

所以我用上了redis的list类型来做队列,一个请求压入一次。集满一定的数100或者其他的值,就清空一次队列。减少IO的读和写的次数。

 

先设置redis 使用 lpop和rpush或者lpush和rpop 他们是成对的使用的,其实这个功能我只用了lpush功能,往队列里压一个个的值

每次压完都会使用llen来看下队列的长度,如果到了我设置的阈值100,就使用保存的函数。

保存函数的逻辑是 使用之前的长度的值,使用lrange来回去0到长度的值的范围的队列,使用0,-1来获取整个队列的时候如果队列为空会抛异常,所以我会使用llen来判断下长度或者直接使用llen的值来做队尾值。

然后使用ltrim来清空队列 。

 

原先是计划做一个定时任务和队列一模一样的,在后面一个个的pop拉出队列,但是aws还在蹲着,这个功能被pending住了,等回复了可以用了再写个后续的队列式的log。使用的是cloudwatch的就没有IO问题了,都是数据流保存的方式,快捷方便,适合集群使用

 

 

说说梦想,谈谈感悟 ,聊聊技术,有啥要说的来github留言吧 https://github.com/cjx2328

—— 陈 建鑫

陈建鑫
你可能也喜欢Related Posts
footer logo
未经许可请勿自行使用、转载、修改、复制、发行、出售、发表或以其它方式利用本网站之内容。站长联系:cjx2328#126.com(修改#为@)
Copyright ©ziao Studio All Rights Reserved. E-mail:cjx2328#126.com(#号改成@) 沪ICP备14052271号-3