redis常用实践
2018年6月14日 · 54 字 · 1 分钟
Redis相信大家都不陌生,而如果只是用来取代memcached做缓存的话,实在是大材小用了。一起来看看生产环境下的常用用法。 分布式锁 $canLock = $redis->set('k', 1, 'NX', 'EX', 2); if($canLock) { // 获得锁成功 } 锁定键名为k的数据两秒钟,两秒后该方法才能重新获取锁
2018年6月14日 · 54 字 · 1 分钟
Redis相信大家都不陌生,而如果只是用来取代memcached做缓存的话,实在是大材小用了。一起来看看生产环境下的常用用法。 分布式锁 $canLock = $redis->set('k', 1, 'NX', 'EX', 2); if($canLock) { // 获得锁成功 } 锁定键名为k的数据两秒钟,两秒后该方法才能重新获取锁
2018年6月14日 · 36 字 · 1 分钟
PermissionScope是iOS非常好用的权限处理库,界面效果也非常精美。不幸的是作者已经停止维护。 PermissionScope is no longer supported.
2018年4月24日 · 494 字 · 3 分钟
本文代码 https://github.com/xialeistudio/yii2-di-demo 什么是依赖注入(DI)? 对象由框架来创建而不是程序员通过 new 创建。跟IoC差不多一个意思。
2018年4月8日 · 65 字 · 1 分钟
虽然golang的工程工具已经非常完善了,比如测试、代码格式化等等。但是如果开发library开源到github的话,这些东西是可以使用自动化工具完成的,那就是 travis 使用步骤 开发好需要集成的library以及测试用例 在项目根目录新建.travis.yml文件 language: go go: - 1.
2018年4月5日 · 122 字 · 1 分钟
最近在做一个基于RabbitMQ的应用,由于官方的qos没有golang的版本,所以出了一点问题。问题代码如下: _, ch, err := component.
2018年3月2日 · 567 字 · 3 分钟
什么是TCP粘包问题以及为什么会产生TCP粘包,本文不加讨论。本文使用golang的bufio.Scanner来实现自定义协议解包。 协议数据包定义 本文模拟一个日志服务器,该服务器接收客户端传到的数据包并显示出来 type Package struct { Version [2]byte // 协议版本,暂定V1 Length int16 // 数据部分长度 Timestamp int64 // 时间戳 HostnameLength int16 // 主机名长度 Hostname []byte // 主机名 TagLength int16 // 标签长度 Tag []byte // 标签 Msg []byte // 日志数据 } 协议定义部分没有什么好讲的,根据具体的业务逻辑定义即可。
2018年3月1日 · 243 字 · 2 分钟
最近在开发一个关注之后通过客服消息推送一张海报给用户的功能,海报图片是本地生成好的,需要上传到微信临时素材之后通过客服消息推送给用户。 上传文件需要multipart/form-data格式的表单,所以golang默认的http.POST方法是实现不了的。需要自行实现body参数逻辑。 上传请求初始化 // 新建上传请求 func NewUploadRequest(link string, params map[string]string, name, path string) (*http.
2018年3月1日 · 17 字 · 1 分钟
目前golang用的基础镜像是busybox,由于golang交叉编译之后只有一个二进制文件,可以直接部署到容器中运行,容器镜像大小几乎等于二进制文件大小。 带来的问题 由于基础镜像太过精简,目前遇到的问题是将时间戳格式化为时间字符串时发现差了8个小时。 尝试过的解决办法 刚开始使用了Location时区相关API,但是部署到容器中发现直接报错了,因为容器中缺少相关的系统调用函数。代码如下:
2018年3月1日 · 41 字 · 1 分钟
golang默认编码JSON时会将HTML标签中的尖括号编码为\u003c这种unicode字符。而最近在开发的微信客服消息推送就会出现以下结果 \u003ca href='https://www.example.com'\u003e点击进入\u003c/a\u003e 查看golang的json包发现json编码器有个方法SetEscapeHTML方法,接收一个bool值来设置是否保留HTML标签。 问题 json的Encoder只能编码到实现了io.
2018年2月28日 · 86 字 · 1 分钟
最近在做一个导出功能,最初是使用https://github.com/tealeg/xlsx做的,但是发现导出有个30W行的excel时,这玩意内存彪到700M+,后来发现只是导出数据为表格,并没有其他东西,于是打算使用CSV导出。 CSV格式简介 CSV本质上是个文本文件,该文件有以下要求: 列之间用逗号分隔,行之间用换行分隔 单元格如果有逗号,引号之类的字符,该单元格需要使用双引号括起来 如果包含中文,需要使用GBK编码,否则会乱码 golang实现 UTF8转GBK函数(需要 go get golang.