经典技巧
文章平均质量分 68
xcl3721
架构讲究……
展开
-
Spring Boot持续集成测试 There are no tests to run
今天给PHP做的分布式跟踪代码做了个代码覆盖率持续集成,每次执行到mvn test都会提示:There are no tests to run实际src/test是存在的……有两个测试用例……但是mvn test在命令行下就是找不到后来问了同事,尝试多次才知道原来要放到src/test/java/里面……原创 2017-06-12 17:13:52 · 1863 阅读 · 0 评论 -
phpredis protocol erro…
今天发现某台服务器突然疯狂的报 phpredis protocol error, got's' as reply type byte类似错误,找了半天……猜测是如下问题https://github.com/nicolasff/phpredis/issues/52服务器重启后正常怀疑是phpredis使用的是长连接某种情况下共用一个socket,特此mark原创 2017-06-12 17:12:24 · 303 阅读 · 0 评论 -
服务降级经验总结
服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。服务降级方式:服务接口拒绝服务:无用户特定信息,页面能访问,但是添加删除提示服务器繁忙。页面内容也可在Varnish或CDN内获取。 页面拒绝服务:页面提示由于服务繁忙此服务暂停。跳转到varnish或nginx的一个静态页面。延迟持久化:页面原创 2017-06-12 17:12:21 · 2122 阅读 · 0 评论 -
php preg_match_all 段错误
昨天碰到个问题php preg_match_all 执行的时候在某条数据上报错怀疑是文字太长导致所以加了pcre的可使用空间,但是故障依旧最后在正则结尾加上U修饰符,取消了greed模式 工作正常了……原创 2017-06-12 17:12:18 · 358 阅读 · 0 评论 -
使用redis的setnx制作排他锁
今日发现一个逻辑select count,如果没有数据那么执行insert正常情况下数据库应该有一条数据,但是实际发现出现两条经测试是因为多进程并发发起请求 selectcount提前执行导致的最终讨论后使用排他锁保证事务同样参数时只执行一个使用redis的setnx对根据参数拼好的key的set进行赋值如果赋值成功,那么继续执行下面操作如果赋值失败,代表之前有进程正在跑排他事务执原创 2017-06-12 17:12:15 · 1752 阅读 · 0 评论 -
基础mysql binlog监视器的数…
binlog监视器的数据缓冲平台的架构设计-支持各种结果缓冲" TITLE="基础mysql binlog监视器的数据缓冲平台的架构设计-支持各种结果缓冲" />这个是mysql关系查询结果缓冲中间件,当mysql更新的时候,自动清理所有被更新数据的关联数据,比如有个查询是个列表,里面有10个数据,当其中某个数据更新了,能够定位到这个数据在哪些缓冲中出现过,对指定的缓冲进行更新或者清空。有原创 2017-06-12 17:12:09 · 259 阅读 · 0 评论 -
使用redis做排行服务
细节介绍,做排行建议不做全站的,除非你有很大的redis集群或使用ssdb那么就维持前几万用户即可……使用redis的zset即可$this->redis->zAdd($rankType, $score, $key); if ($length > 0) { //限个数 $all = $this->redis->zCard($rankType);原创 2017-06-12 17:12:06 · 334 阅读 · 0 评论 -
redis php 队列开发
目前使用的list实现的队列其中有几个关键点记录一下//阻塞获取,默认等待3秒,如果没有那么循环一次 $result =$model->brPop($QUEUENAME, 3);使用此方式可以防止快速多次扫描redisif(function_exists("pcntl_signal")){ declare(ticks = 1); pcntl_signal原创 2017-06-12 17:12:04 · 177 阅读 · 0 评论 -
fastdfs php v5.01&nbsp…
首先使用php client$storage = fastdfs_tracker_query_storage_store($group_name);添加内容有utf8中文fastdfs_storage_upload_appender_by_filebuff(“测试提交 @xcl3721@sd^&*$#@^&(*%!(#dd@s我了个dkjkfd @_fds4444jlk”, $file_原创 2017-06-12 17:12:01 · 420 阅读 · 0 评论 -
mysql 主从库更新延迟,通过o…
最近由于库比较不稳定还在集体改版,我碰到一个问题主库更新后,从库两秒才能拿到更新后的数据,比如赞操作点后自动在页面html+1,但是由于读取列表是在从库,如果刷新的快,会看到赞还是没+1之前的数值。今天跟新青和李伟他俩讨论,新青提供的方式很棒,特此记录。我只需在他基础上集成了一下列表输出操作就解决了这个问题。首先更新的时候调用orm的edit更新操作,函数内部使用edit函数分析参数原创 2017-06-12 17:11:55 · 478 阅读 · 0 评论 -
[原创]android framelayout&n…
这个类是我实际做android时候做activity内的浮动层效果时封装的类如果一个界面有多个浮动层可以简单复制这个类快速做出多个浮动层来 public class PlayerHeader extends FrameLayout {private static final String LOG_TAG =MainActivity.class.getName(); public原创 2017-06-12 17:11:52 · 207 阅读 · 0 评论 -
android dpi模式与px di…
一般来说android是有多种dpi模式,分别为:ldpimdpi hdpi xhdpi在我们制作android的时候res目录下会对这些资源分了以上具体目录在我们制作android应用的图片资源的时候要注意只有在mdpi模式下1px=1dip ,其他模式对应px的资源大小是不同的如mdpi与hdpi是2:3的关系 即2px=3dip在hdpi模式下mdpi与xhdpi是1:2的原创 2017-06-12 17:11:48 · 320 阅读 · 0 评论 -
PHP5.4 正则-只允许中文英文…
最近整理文件的时候发现以前写的代码,php5.4可以跑当时最麻烦的问题就是正则内写中文时候不能识别,后来写成如下格式,然后中文符号用\x ....来描述才过$str = "中文f048432_ds“";preg_match("/^[\x{4e00}-\x{9fa5}]*[0-9a-zA-Z_]*[\x{201c}\x{201d}\x{3001}\x{uff1a}\x{300a}\x{30原创 2017-06-12 17:11:45 · 2686 阅读 · 0 评论 -
proftpd 保证上传文件完整
目前接到一个需求:1.用户通过ftp上传特别大的文件到指定目录,定期会有一个进程会扫描此目录下文件。2.如果发现有文件将会把文件挪走……期间我们担心如果ftp没有传完但是却被扫描进程扫走……文件将会不完整之前没细研究过ftp……跟几个朋友聊的时候表示这个需求很抑郁后来想到不如直接改ftp服务的代码在读代码的时候意外发现ftp是有这个功能的……只是说法不一样……具体细节如下:原创 2017-06-12 17:11:42 · 688 阅读 · 0 评论 -
android 视频播放器的seekbar…
//在progresschange里面获取seekbar对象的thumbRelativeLayout.LayoutParams paramsStrength = newRelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, Rel原创 2017-06-12 17:11:39 · 862 阅读 · 0 评论 -
Android下播放用加密视频流服务器
最近写了一个android下的http服务器,支持文件及加密视频文件按流输出并解密,可以视频直连然后播放我写了两个版本:我开源的这个版本,这个版本有点问题……虽然支持视频http 206range的Seek,但是个别播放器异常,videoview可以正常放但是ffplayerseek会死掉。并且没有太多并发能力第二个版本修复了以上问题并且工作正常,因为商用可能所以不公布……见谅pu原创 2017-06-12 17:11:36 · 1811 阅读 · 0 评论 -
Smarty模板的date_format的坑
今天看管理系统的时候发现个有趣的现象,界面列表内的时间竟然都是当前时间0 0b上数据库一看,记录的时间值为0(unix_time格式保存在数据库的)看模板是这么写的 {$list.create_time|date_format:"%Y-%m-%d %H:%M:%S"}由于create_time是0这个竟然自动写成了当前时间……留给各位坑中朋友预防下……原创 2017-06-12 17:11:33 · 1505 阅读 · 0 评论 -
tomcat导入证书时碰到的坑
当我们使用httpclient连接远程的https服务的时候,我们可以将对方的证书导入到我们本地环境内,导入后即可访问对方的https网址了。keytool -import -file xxxx.cer -alias paypalm -keystore cacerts.jks-storepass xxxx但是我碰到了这个错误 sun.security.validator.Valid原创 2017-06-12 17:11:30 · 2390 阅读 · 0 评论 -
php mysql_connect自动共用链…
今天在底层开了mysql多服务器链接功能,但是发现偶尔会出现db串台的情况比如a库内的cccs表,底层会请求到b库找cccs表,这个问题很奇怪后来发现原来虽然底层实现了多实例,一个db链接对象一个链接,但是在mysql_connect这层也会自动做链接重复直接复用即bool $new_link =false这个选项,打开后一切正常,略坑,特此记录底层链接自动复用的规则为,原创 2017-06-12 17:12:27 · 208 阅读 · 0 评论 -
Dora RPC 虚拟机下实测性能
经过24小时持续压力测试,目前接口仍旧工作正常使用的vagrant虚拟进行压测的分配了1G内存和1核CPU(Mac 2.2 GHz Intel Corei7) 压测进程:目前只开了10个php进程疯狂发送请求并发性能:TPS 2100上下(比直接使用curl快很多)响应时间:0.02~0.04s 偶尔出现0.4s后端代码为:查询一次数据库后返回结果CPU使用:10~25%内原创 2017-06-12 17:12:46 · 306 阅读 · 0 评论 -
PHP如何拼接 bit
最近做了个好玩的用php拼类似微博mid一样的串。。。比如用28bit 存储时间 用18bit存储毫秒。在php下如何实现?我们需要对数值进行按位拼接。php提供了很多内置函数做这个事情:base_convert() 强大的进制转换函数bindec 将"0000100"等类似2进制串转成 10进制str_pad 若输出长度不够根据需要进行填充使用以上功能就可以做到特此记录原创 2017-06-12 17:12:49 · 689 阅读 · 0 评论 -
PHP的分布式跟踪的一些心得
自从实现微服务化后,我们碰到了很多问题。其中最大的问题就是如何排查故障,服务化后的接口通常会依赖多个服务,依赖接口的缓慢会直接影响接口的服务质量。这种依赖导致的缓慢情况在线上很常见,但是并不好排查,究其原因是线上都是通过日志进行跟踪的大量的日志开发人员并不是很直观,且有的公司开发人员是看不到线上具体执行情况。一般来说线上这些小概率故障代表着系统的隐患,当流量增大后这些隐患会被放大甚至直接导致原创 2017-06-12 17:13:54 · 4587 阅读 · 0 评论 -
PHP数据导出数据不全问题的梗
昨天,碰到一个问题PHP导出全表数据不全问题。期间数据个数是对的,但是某条数据会出现重复。究其原因是因为数据查询的时候根据某字段排序。这个字段在此期间大量修改导致数据的排行变化。而在导出的时候为了防止内存溢出做了数据分页。最终导致翻页过程中数据排行变化导致排行变化。最后修改为,按照主键排序……分页……导出……。原创 2017-06-12 17:13:48 · 1115 阅读 · 0 评论 -
lucene Field引起的误会
今天,犯了个低级错误…做查询的时候发现lucene用queryparser只有完全等值才能匹配。经过排查原来是在建立索引的时候使用了StringField作为字段(这个只支持全值相等)改为TextField方可模糊查询……baidu好多资料是没有发现的……后来看到官方某个角落的文档发现了这个,才想起来怎么回事……感冒中……public class Fieldexte原创 2017-06-12 17:13:46 · 607 阅读 · 0 评论 -
Dora-RPC 详细设计分析 前言
Dora-RPC发布快两年了,一直有人要求我写一个详尽的介绍,今天突然想起这个事情。开始写一些关于他的介绍:Dora-RPC源于我之前工作的一家公司内的一些经历。对于我们开发来说使用PHP很少做大型的复杂的软件,因为开始的时候我们会下意识的将项目拆分开。通过各种各样的API相互调用、以此避免过于庞大的代码维护和跨部门调用。而我在的公司在创业初期时(模板嵌入代码的风格)一直在快原创 2017-06-12 17:13:42 · 419 阅读 · 0 评论 -
error:14090086:SSL routines…
curl一个http报错如下:curl: (60) SSL certificate problem, verify that the CA cert isOK. Details:error:14090086:SSLroutines:SSL3_GET_SERVER_CERTIFICATE:certificate verifyfailedMore details here:http:原创 2017-06-12 17:13:39 · 1956 阅读 · 0 评论 -
C++ 读取二进制文件,并且保…
c++11 下 就几句话解决#include#includestd::ifstream fin("./zip.test", std::ios::binary);ostrm content = ostrm.str();fin.close();原创 2017-06-12 17:13:37 · 406 阅读 · 0 评论 -
c++ 11 map基础value排序
本身是不支持的,但是可以用其他方法制作出来,参考了下别人的资料发现缺少说明,这次转过来只是加个说明#include 《algorithm》//pair类型定义 typedef pair PAIR;//排序对比函数int cmp(const PAIR &x, const PAIR &y) { return x.second > y.second; }原创 2017-06-12 17:13:28 · 259 阅读 · 0 评论 -
c++ 11 utf8 subst…
改编自:http://www.zedwood.com/article/cpp-utf-8-mb_substr-function这个也有问题,我基础这个改了个完善的另外写了个文字个数统计uint64_t pinyin::utf8_len(const std::string &str) { uint64_t i = 0; uint64_t count =0; ui原创 2017-06-12 17:13:25 · 286 阅读 · 0 评论 -
json_decode中转换大数值问题
当json内数值如18446744073709551615 这个数值这么大的时候json解析后会返回float(1.844674407371E+19)这不是我们期望的,好在php5.4+带了一个选项在decode的时候,加上JSON_BIGINT_AS_STRING大数值会转成string类型json_decode($output,true , 512 , JSON_BIGINT_AS_S原创 2017-06-12 17:13:22 · 2792 阅读 · 0 评论 -
使用swoole制作evenloop文件更新监…
使用swoole的evenloop和php的inotify插件可以很方便的监控文件夹下的文件更新,后面也不用写死循环和sleep如果使用原生的php是需要写while死循环和sleep。这样效率不是很高$handleList = array(); //init foreach ($this->_config["log_path"] as$content)原创 2017-06-12 17:13:19 · 606 阅读 · 0 评论 -
composer 不报错,不下载指定…
composer隐规则。。。如果 composer.json的项目name里面的名字和require内package的一样。。那么require内的列出同名packege将不会下载又踩坑了原创 2017-06-12 17:13:16 · 296 阅读 · 0 评论 -
JS报错 Uncaught Syntax…
这两天碰到一个大坑!JS文件内回个车都会报Uncaught SyntaxError: Unexpected tokenILLEGAL几次三番找原因,终于找到。。。Uncaught SyntaxError: Unexpected token ILLEGAL是因为js有未识别的字符然后发现nginx 1.8会的content-type:application/javascript;cha原创 2017-06-12 17:13:13 · 346 阅读 · 0 评论 -
c 系列中 localtime多线程下的大坑
localtime是有一个大坑的。。。当我们使用localtime(timestamp)的时候返回是一个指针。这个指针的指向是共用的,这时如果有其他线程执行了localtime。。。。会覆盖之前的值!!可以考虑localtime_r。。。。但是!!!他也有坑~~~原创 2017-06-12 17:13:04 · 1157 阅读 · 0 评论 -
c++ 11 获取当前天0点的timestamp
弄了半天才搞定。。光靠baidu是不靠谱的struct tm *p;timestamp += 7 * 60 * 60;p = localtime(×tamp);//LOG_INFO tm_mday tm_hour tm_min tm_sec;p->tm_hour = 0;p->tm_min = 0;p->tm_sec = 0;uint32_t num = mktime(p);n原创 2017-06-12 17:13:01 · 1259 阅读 · 0 评论 -
BDB0126 mmap: Invalid&…
用虚拟机下弄Bdb结果报错了。。。。无语。。后来原因竟然是因为我用vagrant挂载了mac上的一个目录,然后这个目录下开发。。。虚拟机的底层对这个挂载的服务器不支持mmap导致失败。。拷贝进去就好了。。。怨念。。。相关问题:http://stackoverflow.com/questions/18420473/invalid-argument-for-read-write-mmap原创 2017-06-12 17:12:58 · 208 阅读 · 0 评论 -
vagrant的镜像备份和恢复
最近Mac下的vagrant虚拟机又挂了,只记得我在虚拟机内装了redis和xhprof就挂了。。无法挂载共享目录,无法vagrant ssh登陆(只能手动输入用户名密码才能进入)于是重新做了下虚拟机,搜索网络发现有vagrant pluginsnapshoot插件,结果安装报错。好像不能访问网站后来找了一圈发现vagrant自带备份,vagrant package即可导出一个box原创 2017-06-12 17:12:55 · 2252 阅读 · 0 评论 -
Dora-RPC未来规划及架构
理论上这东东不是我一个人能写完的,期望有兴趣的朋友也一起参与下开发Dora-RPC旨在制作一套PHP企业级的业务架构,通过这个架构可以快速实现内部SAAS及完善的监控管理动态可伸缩式的后端更简单的内部API集成管理分布式调试支撑具体YY结构如下图:Dora-RPC将服务器分为两组:前端和后端。前端:负责承载服务请求,对后端提供的服务进行拼装。支持同步、异步 单个原创 2017-06-12 17:12:52 · 562 阅读 · 0 评论 -
php的curl的坑
这个坑是凯胖子发现的……我们在使用curl的post的时候是用如下命令执行的curl_setopt($ch, CURLOPT_POST, 1);但是如果不设置POST参数curl_setopt($ch, CURLOPT_POSTFIELDS, $params);那么CURL会将POST请求变成了GET原创 2017-06-12 17:11:27 · 768 阅读 · 1 评论 -
nodejs+redis写的订阅分发(已抛弃…
下面是我前段时间用nodejs监听redis的pub/sub写的订阅脚本后来由于持久化及系统资源耗费严重(cpu 50% 内存500m)抛弃掉了,放这里给大家围观下如果有好办法请告诉我,谢过设计思路如下1.当有人在redis下发布一个消息的同时发布个广播2.分发中转程序收到广播后将消息复制成多份扔到对应订阅者的接受队列内,并对各个队列发送订阅广播3.redis下的订阅端就会接收到事件原创 2017-06-12 17:11:25 · 1932 阅读 · 0 评论