分享最近看的一本书:redis实战

最近面临换工作的窘境,面了快一个月,也快有20家公司了,深深的体会到了日新月异的新技术。什么es5 es6 jsx angular webpack docker,太多太多,数不胜数,只能怪以前过的太安逸。本着临时抱佛脚的态度,我看了一个月,大概看了一半的内容。其实这本书,我去年7月份就买了,一直放在那里吃灰。我觉得这本书讲的还是蛮实际的,比较适合初学者阅读。
第一章,简单介绍了redis的5种数据结构:字符串、列表、集合、散列、有序集合,给出了部分命令的使用示例。并且结合一个简单的投票案例,阐述了哪种数据结构更合适,以及如何使用。在我写这篇笔记时,我发现redis的数据结构其实不止5种,还有另外2种Bit arrays和 HyperLogLogs (官网地址:https://redis.io/topics/data-types-intro )。所以说,学一个东西死读书也不行。
第二章,就开始实战了。举例各种应用场景,让你理解各个数据结构存在的意义。
第三章,是对第一章的补充了,把还没有讲到的命令,重新梳理一次。
第四章,讲的是持久化、故障处理、事务等内容。
看完前面4章,基本上可以对redis有一个大概的了解,为什么用它?为什么比memcached更适用?比memcached多的几个数据结构,有什么作用?这些问题,差不多都会得到答案。后面几章,会逐步的教你怎么应用,会涉及到分布式锁、队列、反向索引、读写性能等。
路漫漫其修远兮 吾将上下而求索

乐观锁与悲观锁的理解

乐观锁

流程:修改记录前,首先获取记录对应的版本号,然后,在修改语句的where条件上验证版本号。
举例:
— 查询商品
SELECT goods_id, version FROM tb_goods WHERE goods_id={$goods_id};
— 写入订单商品
INSERT INTO tb_order_goods (order_id, goods_id, …) VALUES ({$order_id}, {$goods_id}, …);
— 修改商品库存
UPDATE tb_goods SET inventory_number=inventory_number-1 WHERE goods_id={$goods_id} AND version={$version};
如果修改库存不成功,说明存在冲突,需要采用事务回滚的方式。这里只是举例,实际应用中,我觉得应该是先减库存,成功后,再写订单之类的信息。

悲观锁

流程:修改记录前,先上锁,这样别的事务就无法同时并行。
举例:
— 查询商品
SELECT goods_id FROM tb_goods WHERE goods_id={$goods_id} FOR UPDATE;
— 写入订单商品
INSERT INTO tb_order_goods (order_id, goods_id, …) VALUES ({$order_id}, {$goods_id}, …);
— 修改商品库存
UPDATE tb_goods SET inventory_number=inventory_number-1 WHERE goods_id={$goods_id};

最近这段时间鼓捣了下vue和react

前段时间,在公司的项目中,断断续续的,有尝试使用vue,那时候觉得挺实用,感觉像一个js + html的模板引擎,也没怎么深入研究。

最近急于换工作,面试面试面试,造了不少航母,却没有一家愿意等我去拧螺丝的。前几个星期还是艳阳高照,最近这2周,几乎天天下雨,广州这破天气。面着面着,就发现前端这几年,冒出了挺多东西的,我以前以为,只有 h5 和 css3 ,现在才发现js这边,也有很多,比如,比较知名的vue、react、angular。

迫于知识盲区,这2天我把vue和react文档都过了一遍,发现这2个框架都比较轻量级。vue呢,他主张在html上做标记,然后通过js指令去渲染和处理他。而react呢,他主张把html扔进js代码里,使用js的新标准es6里的新特性jsx。两者都是有用虚拟dom处理渲染,孰轻孰重,就看你自己去衡量了。

好了,今天的小本本就记到这里,给大家分享一个不错的对比分析 https://www.cnblogs.com/Chen-XiaoJun/p/6246946.html ,我也继续去鼓捣一下angular了。

顺便可以看下大佬们的分析对比 https://cn.vuejs.org/v2/guide/comparison.html#React

php常用命令行参数理解

在命令行模式下,进入php根目录,输入 php -help 就可以看到所有的参数,如下。
这里我就不一一列举了,只列举我觉得常用且简单的。

示例 说明
php -a 进入交互式 PHP 命令行模式
php -v 输出版本信息
php -m 输出内置以及已加载的 PHP 及 Zend 模块
php -i 输出 phpinfo() 的内容。内容太多,不推荐使用
php -r “echo 123;” 运行单行 PHP 代码
php -f 文件路径 运行指定的 PHP 文件
php -s 文件路径 输出有语法高亮色彩的源代码
php -w 文件路径 输出除去了注释和多余空白的源代码

更多详见官方文档:http://php.net/manual/zh/features.commandline.php

自己接了个小项目,遥控单反联机拍摄

前段时间,接了个私单。花了几天时间,总算是圆满完成任务。具体需求是这样的:在某个展会,使用遥控器,控制单反拍照。自动展示在会场的显示器上,还要实时上传至微信公众号,并在公众号里显示。我使用的工具:笔记本、单反相机、单反红外遥控器、Capture One(拍摄支持软件)。

一开始,我朋友跟我讲大概需求的时候,我是懵B的。在我印象里,相机的确可以遥控拍摄。但是,如何联机拍摄,并且把照片展示出来,我认为以php的能力,还是做不到的。最起码,实时把相机图片,放到电脑里,这个操作,我以前也没有接触过,不知道要怎么操作。后来,了解到有种软件支持联机拍摄,并且可以设置保存到电脑某处。如果,这个问题可以解决,那直接让Php去读取这个目录不就行了。误打误撞的,我朋友给了我单反,并且把这个软件(Capture One)告诉了我。

经过半个小时的安装测试,我发现这个软件还是蛮强大的。支持相机的联机拍摄,可以设置拍摄后,照片的保存路径。还可以设置保存的图片质量,甚至一些光圈之类的设置。

然后,我开始找幻灯片,百度了好久,只找到2个还算满意的幻灯片:unitegallery、swiper。一个是国外的,支持多种模式,操作简单。一个是国内的,定制化比较强。又花了好几个晚上,尝试解读源码,实现实时更新幻灯片内容。最后才发现,是徒劳无功的,浪费了很多时间。结果,还是自己写了一个简单的幻灯片,支持实时添加图片(使用轮询,本来想用socket做,但个人对socket不熟悉,再加上时间也不多了,就放弃了)。其实,自己写个简单的幻灯片,也花不了多少时间。

将近半个多月的晚上,努力奋战,完成了雏形,后来修修补补,加水印,加拍摄时间,也总算是上线了。中间遇到过一个大坑:原本在我的台式机里测试时,没问题,弄到笔记本测试,发现会出现半截图片。仔细研究,发现是笔记本生成图片比较慢,还没保存完整图片时,就已经被我的php扫描到,并且读取的图片,然后php再进行一系列处理,才导致图片会出现半截(可能是笔记本CPU有降频之类的问题,才导致的吧)。后来也尝试,研究怎么样判断图片是否完整,发现能力有限,一度选择放弃,偶然的机会,发现不完整的时候,php好像会报错,我就直接在classes/__autoload.php文件里,抑制错误。看似解决了问题,但如果,使用遥控器拍摄时,疯狂点击拍摄按钮,一秒点个好几次,貌似还会一点点概率出现类似问题(幻灯片刷新图片的轮播时间也缩短至10毫秒)。不过,这样问题也不大了,就没继续纠结下去了。

好了,今天的分享到这里吧,有什么表达有误的地方,还请大家多多包含,我把代码放到github上了,大家可以参考下:https://github.com/altwei/altwei-Tethered-Shooting