按月归档:2015年十月月

phpredis和predis的一些区别

本来想在lumen折腾系列文章中说这个事儿的,想想其实不是很相关,于是专门拿出来凑一篇文章……

他们性能上的差距就不说了,phpredis肯定比predis快上很多,否则phpredis就完全没市场了不是……

多参数命令调用

在predis中,sadd是这样子的,第一个参数是set的名字,第二个参数开始是要add的值,如果提供了多个值,那么就一个一个塞进去,如果仅仅提供了一个值,而且这个值又是个array,那么会把这个array里的值一个一个add进去。说实话,这听起来是挺正常的做法,脚本语言总要提供一些语法糖让苦B的程序猿们尝尝甜头的嘛!

我以为phpredis与predis非常的相似,于是乎把predis的代码直接拿来用来,直到我在log中看到了海量的错误……

原来,phpredis的sadd必须把要塞进去的值一个一个作为参数写清楚,也就是sadd(‘set1’, ‘value1’, ‘value2’, ‘value3’…),真是要命。

只能循环的写了,不过用foreach实在太不geek(装bi)了,用call_user_func_array吧!

而且为了性能考虑,也许应该使用$pipe?

由此推断,一系列的lpush,rpush,zadd等等,应该都是这个尿性:)

不过总算hmset是可以接受键值对的array的,还好还好!

关于事务和管线

phpredis中,管线和事务都是使用multi()发起的,通过参数来控制到底是哪一种,而predis中分了两个命令,分别是pipeline()和transaction()。而且最后执行的方法也不同,predis是execute(),而phpredis是exec()……

predis中,两个命令可以传入一个匿名函数作为参数,在函数里面做很多redis操作,而phpredis中不行,只能用链式的调用。

微信支付的又一个坑

今天正好做了下微信支付,毕竟之前做过好几个网银的还有支付宝的支付,也给app内微信支付做过接口,想着调用个JS发起支付是小菜一碟吧,不想还是花了差不多一天才搞定……

生成签名什么的就不用说,虽说微信文档语焉不详,但毕竟都说到了,参数大小写和顺序什么的,后台的支付目录设置什么的都不是个事儿,所以我还是颇有自信的。不料点击支付的时候,总是弹出“fail_invalid signature”,我反复检查了N遍,判断并无问题(说实话我一直深信自己代码无问题,没办法,用飘柔就是这么自信:),最后用官方的签名检查工具,也是OK的。但是fail_invalid signature宛如魔咒一般出现,折腾的我毫无办法。

我这个微信H5页面是个Angular的SPA应用,一开始用微信的wx.ready回调函数,成功了才angular.bootstrap()启动Angular的功能,之前的所有页面都工作的很好,我自然也不会想到这个上面会有什么问题,事实也说明了确实没问题,而是微信自己的问题……

我最后无奈,吃完了晚饭在家里调试,最后做了一个极简的页面,只有一个按钮点击了调用支付,内容简单的就是下面这个样子

还是不行,你是要我去撞墙么??

最后鬼使神差,我直接把微信初始化的语句注释掉了,就是wx.config()的那句,然后…… 就行了??!!支付不需要申请权限的么?

翻阅文档,并没有任何一个地方提到WeixinJSBridge.invoke和wx.config不能同时使用,事实上看微信的文档,总有一种wx.config是支付的前提的感觉,当然确实支付的调用方式发生了变化,以前是wx.chooseWXPay现在是invoke,但是,但是……已经变化到了水火不容的地步了么?

太晚了,无力深究睡了。这是第二天趁怨气还在写下的文字,至于到底为什么,恐怕只有微信内部人士才明白了吧。

更新:
现在使用BeeCloud,真是好东西了,少了不少烦心事情。

无题

偷懒的最高境界,就是当不知道该取怎么的一个题目是,就写下了个无题,还觉得自己做了什么大不了的事情,沾沾自喜吧。这样的笨蛋,此时此刻,此情此景,此处就有一个,那就是我……

博客有人留言,问py2exe的事情,而我已经三年不沾python了,实在不忍误人子弟,只好就此放过,勿怪!这些年一直在玩Web,Html CSS JS Php MySQL Redis NodeJS啥的玩的不亦乐乎,可惜没什么空在博客上说说~若有机会,一定要絮叨几句,以示自己不曾虚度人生。

因为前些日子入手了个域名做了个小网站(域名不写,坚决不在自己博客上打广告),所以这几天也稍稍有些关注这方面的事情,发现炒域名的很热啊,随便搜搜都是一个域名卖了天价的新闻,所以现在好多域名啊被人注册了,什么都不干,就是待售闺中~ 大概也是一种投资?或者感觉就是一种投机吧,希望自己买的域名能被慧眼又有财的主看上,狠狠捞一笔,这样就半生无忧啦。诚然这样的事情是有的,但是感觉概率太低,咱还是不要去赶那趟了吧!

想起之前在知乎上看到这样的问题,大意是家里老人被人忽悠购买囤积中文域名,该怎么劝阻。想来也是这样的影响吧,然后我又深入想想,其实有时候骗人也挺容易…… 发挥我等邪恶的聪明才智,只要先给别人看看投资域名赚钱的例子,总能忽悠一两个买几个的,因为确实不贵也就几十块钱。然后呢,另外一个人(同伙?)粉墨登场,表示看中了买上的一个域名,花了千把块买下,这样一来,甜头尝到,以后还不拼命去买域名了,一传十十传百,卖到手软~~

就像很多让老年人免费听讲座送礼品一样……

保存PHP中的Array,是用JSON, serialize还是var_export?

当我需要在数据库中存放一个array数据的时候,很明显,序列化成一个字符串是正常的做法,但是在PHP序列化有好几个方法,是json_encode,还是serialize,还是var_export呢?唯有试试咯~

准备好的array数据有20kB、 300kB、 4.5MB三组,重复序列、反序列化100次,还要看看最终形成的字符串的大小。另外var_export最终需要输出到文件然后include得到数据,理论上来说,并不适合存放在数据库,不过作为一种方法,也测试了一下。

CPU好像是2.53GHz,这个无所谓,因为主要看相对的结果。

最终结果如下

从上面的结果可以看出来,json的方法,总能获得尺寸最小的序列化字符串,而serialize的用时总是最小。好像负责搞笑的var_export的话,大家就忘了它吧……

事实上,当你在意空间而不在意时间的时候,请使用json的方法来做,否则请使用serialize,如果是配置文件的话,var_export不失为一种明智的选择。

最后告诉你,我实在是太在意空间了,以至于我不仅使用了json来保存array序列,甚至还使用了gzcompress来压缩存储,这样才可以在MySQL的Blob字段默认64k空间中完成存储,在硬件如此便宜的现在,这么拮据真的好可怜啊:P。

自动玩游戏《地下城堡》的小机器

地下城堡,一个纯文字的冒险游戏,有兴趣的可以下载了试试。我自从玩了网页版的“a dark room”后,对这类游戏还是颇有兴趣的,说实话要不是现在文字MUD游戏找不到了,我一定要玩玩试试。

这个游戏有个有趣又无趣的设定,可以炼金,最初的时候点一下加一个金币,后面可以升级到一下加五个,这是完全没有任何成本的,点一下就是了。然后你懂的,咱这么懒得人,如果能做如果单调的重复劳动?

所以,改游戏?当然这也可以,但是还不是我们应该做的事情!更呆傻一点,我们用物理机械来做这个事情吧。

1443755718933

其实老简单了,一个Arduino,连两个舵机,一个每隔一秒点一下,另外一个每个1分钟点一下,因为这个游戏运行中会时不时出现一个商人之类的对话框,让你选择要不要交易、赌博之类的东西,这个收用来点掉这个东西。

然后…… 就是无休无止的点击了,看电视的时候点几个钟头,钱就慢慢涨上来啦,不过发现个问题,点了一两个小时后,游戏会自动退出…… 我是不是要不要做个自动识别画面,退出了再点出来的功能呀~~

10.09号更新:我才知道每日分享能拿钻石,还以为后面的地图只能充钱玩了差点放弃…浪费了多少时间拿钻呀x_x