自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

戚银的博客

一枚有点想法,喜技术,爱钻研的码农。

  • 博客(50)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Go】四舍五入在go语言中为何如此困难

四舍五入是一个非常常见的功能,在流行语言标准库中往往存在 Round 的功能,它最少支持常用的 Round half up 算法。而在 Go 语言中这似乎成为了难题,在 stackoverflow 上搜索 [go] Round 会存在大量相关提问,Go 1.10 开始才出现 math.Round 的身影,本以为 Round 的疑问就此结束,但是一看函数注释 Round returns the nearest integer, rounding half away from zero ,这是并不常用的 Ro

2021-01-02 14:52:10 550

原创 【Go】我与sync.Once的爱恨纠缠

原文链接: https://blog.thinkeridea.com/202101/go/exsync/once.html官方描述 Once is an object that will perform exactly one action, 即 Once 是一个对象,它提供了保证某个动作只被执行一次功能,最典型的场景就是单例模式,Once 可用于任何符合 “exactly once” 语义的场景。sync.Once 的用法在多数情况下,sync.Once 被用于控制变量的初始化,这个变量的读写通常遵

2021-01-01 20:41:13 265

原创 【Go】高效截取字符串的一些思考

原文链接:https://blog.thinkeridea.com/201910/go/efficient_string_truncation.html最近我在 Go Forum 中发现了 [SOLVED] String size of 20 character 的问题,“hollowaykeanho” 给出了相关的答案,而我从中发现了截取字符串的方案并非最理想的方法,因此做了一系列实验并获得高...

2019-10-31 08:48:06 517

原创 【Go】类似csv的数据日志组件设计

原文链接:https://blog.thinkeridea.com/201907/go/csv_like_data_logs.html我们业务每天需要记录大量的日志数据,且这些数据十分重要,它们是公司收入结算的主要依据,也是数据分析部门主要得数据源,针对这么重要的日志,且高频率的日志,我们需要一个高性能且安全的日志组件,能保证每行日志格式完整性,我们设计了一个类 csv 的日志拼接组件,它的代码...

2019-07-20 22:39:40 233

原创 【Go】使用压缩文件优化io (二)

原文链接: https://blog.thinkeridea.com/201907/go/compress_file_io_optimization2.html上一篇文章《使用压缩文件优化io (一)》中记录了日志备份 io 优化方案,使用文件流数据压缩方案优化 io 性能,效果十分显著。这篇文章记录数据分析前置清洗、格式化数据的 io 优化方案,我们有一台专用的日志前置处理服务器,所有业务日志...

2019-07-09 18:46:35 380

原创 【Go】使用压缩文件优化io (一)

原文连接:https://blog.thinkeridea.com/201906/go/compress_file_io_optimization1.html最近遇到一个日志备份 io 过高的问题,业务日志每十分钟备份一次,本来是用 Python 写一个根据规则扫描备份日志问题不大,但是随着业务越来越多,单机上的日志文件越来越大,文件数量也越来越多,导致每每备份的瞬间 io 阻塞严重, CPU ...

2019-06-30 22:26:31 523

原创 【Go】获取用户真实的ip地址

原文链接:https://blog.thinkeridea.com/201903/go/get_client_ip.html用户请求到达提供服务的服务器中间有很多的环节,导致服务获取用户真实的 ip 非常困难,大多数的框架及工具库都会封装各种获取用户真实 ip 的方法,在 exnet 包中也封装了各种 ip 相关的操作,其中就包含获取客户端 ip 的方法,比较实用的方法如下:func Cl...

2019-03-28 08:34:21 4340

原创 【Go】IP地址转换:数字与字符串之间高效转换

转载:https://blog.thinkeridea.com/201903/go/ip2long.htmlIP 地址库中 IP 地址的保存格式一般有两种,一种是点分十进制形式(192.168.1.1),另一种是数字形式(3232235777),应用中,经常需要在这两种格式之间做转换。针对这一个问题我在 exnet 扩展包里面实现可两者的转换的快捷方法:func IP2Long(ip ne...

2019-03-25 08:38:04 3496

原创 【Go】go get 自动代理

原文链接:https://blog.thinkeridea.com/201903/go/go_get_proxy.html最近发现技术交流群里很多人在询问 go get 墙外包失败的问题,大家给了很多解决方案:从 Github 的代码库 clone设置 GOPROXY 环境变量配置代理, 例如:GOPROXY=https://goproxy.io配置命令行代理,https_proxy 环...

2019-03-22 08:06:07 1146

原创 【Go】那么多数值类型,应该选哪个?

原文链接:https://blog.thinkeridea.com/201903/go/selection_of_numerical_types.htmlGo 内置很多种数值类型,往往初学者不知道编写程序如何选择,使用哪种数值类型更有优势。内置的数值类型有:uint8、 uint16、 uint32、 uint64、 uint、 int8、 int16、 int32、 int64、 int。...

2019-03-19 08:46:41 188

原创 【Go】string 优化误区及建议

原文链接:https://blog.thinkeridea.com/201902/go/string_ye_shi_yin_yong_lei_xing.html初学 Go 语言的朋友总会在传 []byte 和 string 之间有着很多纠结,实际上是没有了解 string 与 slice 的本质,而且读了一些程序源码,也发现很多与之相关的问题,下面类似的代码估计很多初学者都写过,也充分说明了作者...

2019-02-24 07:49:16 481

原创 【Go】strings.Replace 与 bytes.Replace 调优

原文链接:https://blog.thinkeridea.com/201902/go/replcae_you_hua.html标准库中函数大多数情况下更通用,性能并非最好的,还是不能过于迷信标准库,最近又有了新发现,strings.Replace 这个函数自身的效率已经很好了,但是在特定情况下效率并不是最好的,分享一下我如何优化的吧。我的服务中有部分代码使用 strings.Replace ...

2019-02-03 13:22:02 955

原创 【Go】优雅的读取http请求或响应的数据-续

原文链接:https://blog.thinkeridea.com/201902/go/you_ya_de_du_qu_http_qing_qiu_huo_xiang_ying_de_shu_ju_2.html之前发布 【Go】优雅的读取http请求或响应的数据 文章,网友 “wxe” 咨询:“优化前后的请求耗时变化有多大”,之前只分析了内存分配,这篇文章用单元测试的方式分析优化前后的耗时情况,...

2019-02-01 21:11:50 976

原创 Go】优雅的读取http请求或响应的数据

原文链接:https://blog.thinkeridea.com/201901/go/you_ya_de_du_qu_http_qing_qiu_huo_xiang_ying_de_shu_ju.html从 http.Request.Body 或 http.Response.Body 中读取数据方法或许很多,标准库中大多数使用 ioutil.ReadAll 方法一次读取所有数据,如果是 jso...

2019-01-26 20:21:33 10155

原创 【Go】slice的一些使用技巧

原文链接:https://blog.thinkeridea.com/201901/go/slice_de_yi_xie_shi_yong_ji_qiao.htmlslice 是 Go 语言十分重要的数据类型,它承载着很多使命,从语言层面来看是 Go 语言的内置数据类型,从数据结构来看是动态长度的顺序链表,由于 Go 不能直接操作内存(通过系统调用可以实现,但是语言本身并不支持),往往 slice...

2019-01-24 22:53:10 373

原创 【Go】深入剖析slice和array

array 和 slice 看似相似,却有着极大的不同,但他们之间还有着千次万缕的联系 slice 是引用类型、是 array 的引用,相当于动态数组,这些都是 slice 的特性,但是 slice 底层如何表现,内存中是如何分配的,特别是在程序中大量使用 slice 的情况下,怎样可以高效使用 slice?今天借助 Go 的 unsafe 包来探索 array 和 slice 的各种奥妙。...

2019-01-13 21:58:27 452

原创 一次读锁重入导致的死锁故障

在两天前第一次遇到自己的程序出现死锁, 我一直非常的小心使用锁,了解死锁导致的各种可能性,这次的经历让我未来会更加小心,下面来回顾一下死锁发生的过程与代码演进的过程吧。简述业务背景及代码演进过程我的程序中有一块缓存,数据会组织好放到内存中,会根据数据源(MySQL)更新而刷新缓存,是读多写少的应用场景。内存中有一个很大数据列表,缓存模块会按数据维度进行分组,每次访问根据维度查找到这个列表里...

2018-12-26 08:26:18 1085

原创 Redis持久化

Redis持久化机制redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。Redis 提供了多种不同级别的持久化方式:RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写

2015-06-21 23:44:24 1334

原创 Redis配置详解

如果是一个专业的 DBA, 那么实例启动时会加很多的参数以便使系统运行的非常稳定, 这样就可能会在启动时在 Redis 后面加一个参数,以指定配置文件的路径,就象 mysql 一样的读取启动配置文件的方式来启动数据库。源码编译完成后,在 Redis目录下有一个redis.conf 文件,这个文件即是 R

2015-06-21 10:54:56 3014

原创 Redis服务部署

Redis是Remote Dictionary Server的缩写。他本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是string(字符串)、list(列表)、sets(集合)或者是ordered sets(被排序的集合),所有的数据类型都具有push/pop、add/remove、执行服务端的并集、交集、两个sets集中的差别等等操作,这些操作都是具有原子性的,Redis还支持各种不同的排

2015-06-21 00:50:37 3014 2

原创 Redis数据类型之SORTEDSET类型

sorted set类型-特点sorted set 是 set 的一个升级版本,它在 set 的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset 会自动重新按新的值调整顺序。可以理解为有两列的 mysql 表,一列存 value,一列存顺序。

2015-06-20 21:55:12 2416

原创 Redis数据类型之SET类型

set类型-特点set 是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作,操作中 key 理解为集合的名字。 Redis 的 set 是 string 类型的无序集合。set 元素最大可以包含(2 的 32 次方)个元素。

2015-06-20 20:27:29 2222

原创 Redis数据类型之LIST类型

list类型-特点list 是一个链表结构,主要功能是 push、pop、获取一个范围的所有值等等,操作中 key理解为链表的名字。Redis 的 list类型其实就是一个每个子元素都是 string 类型的双向链表。链表的最大长度是(2的 32 次方)。我们可以通过 push,pop 操作从链表的头部或者尾部添

2015-06-19 21:14:51 5088

原创 Redis数据类型之HASH类型

HASH类型-特点Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加、 删除操作都是 O(1) (平均) 。 hash 特别适合用于存储对象。 相较于将对象的每个字段存成单个 string 类型。 将一个对象存储在 hash 类型中会占用更少的内存,并且可以更方便的存

2015-06-18 21:46:25 1224

原创 Redis数据类型之string类型

string类型-特点string 是最简单的类型,你可以理解成与 Memcached 是一模一样的类型,一个 key对应一个value,其上支持的操作与 Memcached 的操作类似。但它的功能更丰富。 string 类型是二进制安全的。意思是redis的string可以包含任何数据

2015-06-17 21:01:10 2364

原创 Redis Key(键)操作

Redis Key(键)可以用任何二进制序列作为key值,从形如“foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效的key值。关于key的几条规则可用任何二进制序列作为key值。

2015-06-15 17:34:23 5721

原创 Redis介绍

Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库, 并提供多种语言的API。 从2010年3月15日起, Redis的开发工作VMware主持。与memcached比较  Redis 是一个 Key-Value 存储系统。

2015-06-13 16:11:12 638

原创 Neo4j集群服务器搭建

Web程序猿博客:http://blog.csdn.net/thinkercode Neo4j是目前主流的图数据库,它本身也提供了高可用的集群解决方案,相比传统的关系型数据库,它可以快速的进行基于人际社交网络类的查询查询和检索;它同时提供了cypher语言来方便进行图数据库的操作和查询,该查询语言类似SQL语言。图形数据库将地图与其它类型的平面图中的图形描述为点、线、面等基本元素,并将这些图形元素按一定数

2015-06-12 15:29:17 19607 2

原创 面向对象设计原则之单一职责原则(SRP)

面向对象设计原则之单一职责原则(SRP)单一职责的原则告诉我们:在软件系统中,如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化肯呢过会消弱和抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏[ASD],事实上我们在做编程的时候很自然地就会跟一个类加各式各样的功能。

2015-06-10 15:47:40 1517 1

原创 认识设计模式

认识设计模式一、 什么是设计模式  设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。  如果一个问题反复发生,那么这个问题的解决方案就会被有效使

2015-06-03 22:39:07 1218

原创 php类方法在线性能测试

在两个月前一个群里的朋友问了一个问题,他说:“现在他们公司的项目有一个模块的性能在线表现非常差,很长时间没有查出问题所在,老板一怒之下让他把所有类方法的执行时间给记录进行分析,并且不能影响现在的项目性能。”老板让他记录这些信息是为了分析具体影响性能的地方在哪些地方,待项目运行一段时间就去除。这个需求导致两个个问题,第一是怎么监听这个模块所有类方法的执行时间,第二是怎么能在不影响现在项目性能的情况下

2015-05-31 23:20:45 1619

原创 被忽略的魔法——php引用之延迟赋值(后期数据延迟绑定)

看到这个主题大家知道我今天要说的是php的变量引用特性,但是延迟赋值又是怎么回事呢?这个主要是我近期优化一些功能时的一个想法,我觉得还算不错,就打算记录下来。看一下下面的伪代码:// 这段代码有人会说为啥不用联表,因为有些业务需求不用联表的效率是联表的3到20倍// 我的项目里基本都是此类写法,比之前联表效率提升很多$a = DB::query("select id from a");$

2015-05-23 11:19:56 2472

原创 Android系统搭建PHP+MySql环境,支持SqlLite,完美运行ecshop、phpcms、Discuz_X3等开源程序

我从事Web开发有1年多的时间,在这段时间里一直研究新技术、从今以后将安家于此,与众多Web开发爱好者交流与学习。今后我将不断终结过年1年学习的知识和未来接触与学习的技能,分享自己对Web开发的独特见解,本博文中有任何问题,都可以直接联系我或者留言,让我们一起为未来共勉!又快要过年了,今天预备回家,但是现在手头只有一台台式机(因为本人不太爱用笔记本,之前的放久了受潮坏了),回家带着不方

2014-12-10 10:06:55 3295

原创 命令历史

一、命令历史介绍 bash以及其他大多数shell(如korn shell、tc shell 、c shell和z shell等)均支持命令历史机制,以便维护用户输入的命令。shell的命令历史机制和编辑功能是用户能够重复利用先前输入的命令,提高用户的交互访问能力。利用shell的命令历史机制,能够不加修改的重复执行先前提交的任何命令,或者在先前命令的基础上经过校正命令中的细小打字错误或稍加编

2014-10-08 23:37:00 849

原创 Linux时间管理类命令

一、date命令 1. 描述: 根据指定格式显示当前时间或设置系统时间。 2. 命令格式: date [选项]... [+格式] date [选项] [MMDDhhmm[[CC]YY][.ss]] 3. 命令选项 -d,--date=STRING 显示由STRING指定的时间,而不是当前时间 -f,--file=DATEFILE 显示DATEFILE中的每一行指定的时间,

2014-10-08 23:19:55 701

原创 Linux获取帮助

Linux获取帮助一、 内置命令帮助(help) shell内置命令使用[help 命令]的获取命令帮助信息,help只能查看shell内置命令的帮助信息,可以使用[type 命令]查看某个命令是否是shell内置命令1. 使用方法:help: help [-dms] [模式 ...]2. 描述: 显示内嵌命令的简略信息。如果指定了 PATTERN 模式, 给出所有匹配 PATTERN

2014-09-21 17:29:33 606

原创 Linux正确关机

一、关机/重启相关命令         将数据同步写到硬盘中:sync         惯用的关机指令:shutdown         重新启动,关机:reboot,halt,poweroff         切换执行等:init(0:关机;3:存文本模式;5:含有图形接口模式;6:重新启动)        二、数据同步写入磁盘:sync         在l

2014-09-21 17:17:25 4623

原创 初识Linux shell工具

一、 常见的shell工具linux中的shell工具分为图像界面shell(GUI)和命令行形式(CLI)两种1. GUI工具包含X window manger、CDE、GNOME、KDE、XFCE2. CLI工具包含bsh、csh、tcsh、ksh、bash、zsh。其中bash是现今大多数流行Linux发行版默认的shell工具二、 bash命令提示符1. 当登陆bash后会看到命

2014-09-17 16:05:24 921

原创 ThinkPHP应用模式扩展之谜

ThinkPHP应用模式提供了对核心框架进行改造的机会,可以让你的应用适应更多的环境和不同的需求。每个应用模式都有自己的模式定义文件,相对与ThinkPHP3.1版本,ThinkPHP3.2版本对应用模式的扩展更加明确和清晰,在ThinkPHP3.1版本中定义了Cli、Lite、Thin、AMF、PHPRPC、REST模式,其定义方式和ThinkPHP3.2版本的方式大同小异,如有需要可以参考修改

2014-07-08 08:43:42 2838

原创 jsonDB使用手册

jsonDB是js的一个类库,是基于json数据格式构建的数据模型实现对json数据增删改查。jsonDB的构建源自于HTML5本地存储的一个应用需求,可以通过sql对json数据进行增删改查,同时该类库提供强大的where检索条件,数据排序,limit查询条件限制等数据库基本功能。通过jsonDB可以轻松维护一个库/表或多个库/表,而无需额外实现json的数据的维护等,在该类库完善以后为简化sql操作,基于jsonDB核心模块扩展了连贯操作模型,简化对jsonDB的操作以及sql语句出错的概率。

2014-07-06 09:14:59 6258

基于json数据格式实现的简单数据库——jsonDB

jsonDB是js的一个类库,是基于json数据格式构建的数据模型实现对json数据增删改查。jsonDB的构建源自于HTML5本地存储的一个应用需求,可以通过sql对json数据进行增删改查,同时该类库提供强大的where检索条件,数据排序, limit查询条件限制等数据库基本功能。通过jsonDB可以轻松维护一个库/表或多个库/表,而无需额外实现json的数据的维护等,在该类库完善以后为简化sql操作,基于jsonDB核心模块扩展了连贯操作模型,简化对jsonDB的操作以及sql语句出错的概率。

2014-07-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除