- 博客(43)
- 收藏
- 关注
原创 memcache分布式原理解析
所谓的分布式就是将不同的数据放在不同的服务器上,获取数据时需要根据路由从不同的服务器上获取。在memcache中,服务器端并不支持分布式,而只是在客户端程序中设置分布式。如果有多个memcache服务器,那么他们之间并不互相通信,数据也无法同步。所以在很多语言对memcache操作的类库中都可以配置,然后根据相应的路由算法决定将数据存储在哪个服务器中。如果有多个memcache服务器,每个服务器上...
2018-03-11 21:14:47 1512
原创 Memcache内存机制与LRU
memcache的内存分配机制:memcache进程会预先分配一部分内存给slab,给slab分配的内存也叫page(page的默认大小是1M),每个page下面会有若干个chunk(chunk默认大小96B),而数据就会封装成item存储在chunk里面,若干个大小相同的chunk称为slab class,相同大小的chunk未必在一个slab中。所以在默认情况下一个slab存放的chunk数量...
2018-03-10 23:16:39 835
原创 数据库优化方案
当数据量大时,就需要对数据库进行优化来提高查询或者插入数据的效率,尤其是提高查询的效率。针对提高查询效率可以有一下几个方面的优化:1,提高数据库服务器的硬件配置,增加网络带宽提高数据传输效率,但是成本比较高,时间久了效率问题还会出现。2,优化数据表结构减少数据冗余。3,创建合适的索引。4,优化sql语句编写。5,读写分离,读服务器和写服务器实现数据同步。6,增加Redis服务器,将常用但不经常修改...
2018-03-04 16:20:43 468
原创 gin学习过程要点总结
gin作为golang的一个框架,一直以轻便,高效深受开发者的喜爱,他的路由性能比martin高40倍。溢美之词到此为止,下面正式开始撸代码,从基本的获取gin的源码开始。首先,从github上获取gin的源码:go get github.com/gin-gonic/gin然后在代码中使用import引入就可以使用了。gin支持常用的get,post,put,delete等方式。最基本的api:f...
2018-02-27 14:06:30 8099
原创 gob,protobuf,json在golang中的序列化效率对比
先上代码:looptimes:=10000 u:=User{66,"nxin","beijing"} gobbegintimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10) gobbeginint,_:=strconv.Atoi(gobbegintimestamp) fmt.Println("gob序列化=========...
2018-02-09 15:07:07 7179 2
原创 gob序列化工具使用
gob是谷歌自己的序列化工具,只能在go语言中使用。常用的场景就是RPC传输数据。闲话少说直接上代码:package mainimport ( "encoding/gob" "bytes" "log" "fmt")type User struct{ Id int32 Name string Address string//属性必须是大写开头,}type Student s...
2018-02-09 13:47:39 1404
原创 golang中protobuf使用
在golang中protobuf的功能主要就是序列化与反序列化两种操作,这两种操作的方法在第三方的包里面都有。首先引用protobuf,从github上获得相应的包。地址"github.com/golang/protobuf/proto"在golang中需要先把proto格式的文件使用protoc转换成对应的go的struct类型。proto文件:syntax="proto2";package ...
2018-02-08 17:45:12 3584
原创 golang gRPC四种模式详解
项目源码地址:https://github.com/wongcony/grpcstudy本项目把四种模式都写成代码供读者查阅。具体的详解可以参考代码注释,在此只讲解gRPC的golang实现中遇到的问题和总结相应的经验。1,简单模式:简单模式只是使用参数和返回值作为服务器与客户端传递数据的方式,最简单。2,客户端流模式:即从客户端往服务器端发送数据使用的是流,即服务器端的参数为流类型,然而在服务器...
2018-02-08 13:48:09 9175
原创 gRPC基础问题与解决办法
首先,gRPC在获取相应的包等第三方引用库的时候会遇到被墙的情况,这时候可以使用很多网上放出来的github的地址然后直接使用git获取到本地的goPath上。但是由于很多包的引用名不是在github下的,那么虽然从github获取了也必须放在src里,并且创建对应的文件夹。例如:import ( "google.golang.org/grpc" "golang.org/x/net/con
2018-02-02 17:24:33 1919
原创 Protocol Buffer的使用总结
因为在学习golang的gRPC框架时需要用到protobuf,所以重点学习一下。之前也曾接触过,因为它是把数据压缩成二进制从而降低了压缩大小,在网络传输的时候效率更高。相对于json,它的文件体积更小,相对于xml,解析速度更快。protobuf的数据格式有一下几种:1,enum类型:类似与很多语言的枚举类型enum Sanguo{Wei=1;Shu=2;Wu=3;}2,me
2018-02-02 14:35:22 2085 1
原创 gorm增删改查总结
gorm在创建表时使用CreateTable方法进行处理,其参数可以是结构体变量的地址形式,也可以是结构体的地址形式。例如:var t Tecentdb.CreateTable(&t)或者db.CreateTable(&Tecent{})。即使类的地址形式中初始化了一些字段,在创建表之后也不会自动添加到表中。如果表已经创建并且表中有数据,再次执行该方法不会再次创建表也不会清除数据。
2018-01-18 15:24:56 18998 1
原创 GORM文档学习总结
GORM是golang的一个ORM,封装了很多常用方法。在相关数据库操作系统中方便使用。本文主要讲解一些常用的方法,GORM的一些概念和注意事项。1,下载安装windows系统下下载安装可以直接使用git命令行工具进行获取。方法:go get -u github.com/jinzhu/gorm在代码中引用时需要引用gorm类库和对应的数据库操作的驱动,数据库可以支持sqli
2018-01-16 11:05:16 34386 5
原创 C#中Protobuf实用指南与性能对比
protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优
2017-09-05 10:34:03 627
原创 Python函数之可变类型与不可变类型
在python语言中,string,tuple,number为不可变类型,但是dict,list为可变类型。所谓的不可变类型就是,a=5实际上指的是吧值为5的内存指向a,如果在执行a=10相当于又声明了一个值为10的内存指向a。例如:结果:两次打印的a的内存地址是不同的。但是对于list的可变类型就会发生不同结果:对列表进行追加数据,
2017-08-17 15:33:06 280
原创 Python笔记01
raw_input()函数用来处理用户输入,例如a=raw_input("please enter your number")int(a)函数将a转换成int类型python中提供了一种**双星号的运算符为乘方,例如3**2=9,3**3=27,但是-3**2=-9Python是区分大小写的aaa,AAA是不同的变量。字符串可以以数组的形式访问其单个字符。例如,str=“qwer”
2017-08-12 17:41:27 206
原创 Redis存储性能测试
在string类型中,不仅可以存储key-value中value是string类型,也可以存储对象类型。 TestModel amodel = new TestModel(); amodel.Id = 1; amodel.Name = "wongcony"; amodel.Type = 1; amodel.Company = "nxin";for (int i = 1;
2017-08-02 15:05:09 627
原创 windows下安装调用Redis问题汇总
1,Redis在Windows下并没有专门的安装包,只能去github上面下载最新的版本,由微软开源技术团队(Microsoft Open Tech group)开发和维护。2,下载之后需要看一下Redis目录下是否存在exe文件,因为在github上下载容易下载错,而下载成源码。3,安装redis服务,只需要执行以下代码。redis-server --service-install
2017-08-02 11:13:20 285
原创 webapi跨域问题解决
所谓的跨域就是请求的url的子域名,域名,端口号,协议不一样。浏览器默认不支持跨域,需要在代码中写。至于在webapi中如何进行跨域,需要先从nuget下载cors,然后引用到具体的项目中,然后在webapiconfig的Register方法中添加如下代码config.EnableCors(new EnableCorsAttribute("*", "*", "*"));就可以了。
2017-07-25 11:04:51 319
原创 PHP中const与define的不同
const一般用在类中定义常量,但是在5.3以后也可以在类外定义常量。而define只能在类外定义常量,一般用来定义全局常量。同时,const对常量的大小写比较敏感,但是define可以通过设置来使其对大小写不敏感。const定义常量的效率比define高很多。const不能用在条件语句中,但是define可以。
2017-06-08 17:35:12 264
原创 PHP基础知识总结02(常用的数组函数)
1,判断变量是否是数组?is_array($a);2,数组头部插入数据,头部删除数据?array_unshift($arr,'aaa')插入数据,array_shift($arr)头部删除数据。3,数组尾部插入数据,尾部删除数据?类似于栈,array_push($arr,'aaaa'),array_pop($arr);4,判断元素是否在数组中?in_array('aaa
2017-06-08 16:17:35 316
原创 PHP基础知识点总结01
1,var_dump()与print_r,echo的区别?var_dump()直接打印出来变量的值和数据类型,一般打印数组时更有可读性,echo直接打印相应的值,但是如果是数组则直接打印相应的数据类型。print_r会打印数组的值但是不会打印出来相应的数据类型。2,include,require,include_once,require_once的区别?include与require的
2017-06-07 18:57:42 313
原创 ThinkPhp在phpstorm下Post提交为空的问题解决
在tp框架下,如果页面中使用了post提交,默认的情况下post提交到控制器下的方法后就为空了,所以这是一个对新手来说一个坑,下面提出来解决办法:thinkphp的url是默认带端口号的,只需要在phpstorm中设置吧端口号去掉就可以了。找到该设置,吧Connection的Type修改成以上的模式,然后下面的URL改成上面的形式。(后面的MoocStudyTp是当前项目的名称)。
2017-05-11 22:36:46 1047
原创 PHP连接MySql数据库方法总结
PHP中自带面向过程的数据库连接方式,一般会用到以下几个常用的方法。具体步骤如下:1,创建数据库连接:$db_connect=mysql_connect($dbhost,$username,$userpass) or die("Unable to connect to the MySQL!");此连接为非持久化连接,其中$dbhost为主机的配置,一般为localhost,亦可
2017-04-24 14:00:10 680
原创 PDO常用类和对象总结
PDO有名PHP Data Object,就是php的数据对象,用来对数据库中的数据进行操作。下面就来讲一下常用的几个类,以及相应的操作步骤。 连接数据库:$pdo=new PDO($dsn,$username,$password);此处用到了PDO这个类。此类是整个PDO操作中最基本的类。 PDO常用的对象属性: getAttribute:用来获得PDO连接的属性信息。 setAttrib
2017-04-24 00:27:57 780
原创 PDO数据连接持久化性能测试
PDO数据连接持久化可以有效地提升连接数据库的效率。前面文章中做过测试,连接1000次数据库需要使用100秒,一次连接需要0.1秒。如果在项目中,凡是需要连接数据库的地方都需要创建一次连接无疑会对系统的性能带来很大的损失。所以在PDO中可以进行数据库连接的持久化属性设置。所谓的数据库连接持久化就是创建一次连接之后就把该连接直接缓存,以后再次用到连接数据库的时候直接读取缓存而无需再次创建。具体代
2017-04-22 23:37:00 2243
原创 PDO与原生方式对数据库连接插入操作效率对比
众所周知,php中常见的两种连接数据库的方式有PDO连接和原生的mysql连接(包括mysqli方式)。对于很多初学者来说很想搞明白二者在效率方面的区别,下面就让我们来对比一下。 首先对比二者在创建连接上的区别: 注意:在代码开头写上 set_time_limit(0);//这一句很重要,表示php响应时间没有限制,php默认响应时间为30秒,如果超过就返回错误。 错误信息:Fatal er
2017-04-22 20:10:42 3384
原创 PDO中事物详解
PDO中事物与其他编程语言类似,采用开始事物,提交事物,回滚的流程模式,但是在使用mysql作为插入或者修改的数据库时需要注意,需要将MySQL中的表的引擎设置为Innodb模式,MySQL中表有两种模式,一种是myisam模式,一种是Innodb模式。简单地说,前者不支持事物,后者支持事物。所以在PDO的事务处理中,前者类型的表不支持事务,即便在代码中写了相应的事务处理代码。所以需要对表引擎设置
2017-04-22 12:23:02 341
原创 NPOI导出EXcel合并单元格问题
在合并单元格的情况下,如果几个单元格的内容一样需要合并,最好再程序遍历完所有内容用一样的单元格以后统一合并,如果边遍历边合并,容易导致最后一个一样内容的单元格合并时候有问题,即点击该合并后的大单元格的时候出现无法合并的现象,或者设置的样式(例如垂直居中)在wps中无法实现。
2016-10-17 15:52:36 1737
原创 modelstate查看错误字段的信息
if (!ModelState.IsValid) { List sb = new List(); //获取所有错误的Key List Keys = ModelState.Keys.ToList(); //获取每一个key对应的ModelS
2016-09-13 22:31:00 3689
原创 bin文件夹关于dll引用的注意事项
bin是编译过之后项目自动生成的。对于里面引用的dll文件,需要将dll放在一个单独的文件夹下,对于该dll的引用要从该文件夹下调用。实例:项目的引用中的aspose.words引用的时候选择的是上图的dll。而上图是项目中的一个文件。
2016-05-04 11:01:34 1679 1
原创 Aspose word导出照片代码实现
所有代码在asp.net MVc中已经实现 DocumentBuilder builder = new DocumentBuilder(doc); Shape shape = new Shape(doc, ShapeType.Image); shape.ImageData.SetImage(Server.MapPath("~/Cont
2016-04-29 10:35:01 677 1
原创 Dos.orm入门遇到的问题总结
今天在开源中国看到Dos.ORM,也听说不少人在用,所以就像学一下,但是却遇到很多问题。1,Dos.orm怎么用?首先在项目文件中引用Dos.orm,一般从Nuget中直接获得。2,为什么网上的很多文章看不懂?笔者今晚琢磨了一晚上发现,DOs.orm 在代码实现中用到了实体,也就是说用到了代码生成器。只能从网上下载代码生成器,其实下载的一个项目文件,执行项目文件的时候来生成对应库中
2016-04-28 20:25:36 6833
原创 Aspose.word在asp.net mvc中如何使用的个人总结
今晚解决这个aspose在mvc中如何使用费劲了功夫。下面我写一下项目中如何使用到的。项目需要导出数据到word中,因为要导出的是表格形式,所以先在word中绘制好了表格,然后按照以前的代码改了改,发现不行。出现的问题如下:这是当时的代码,问题的症结所在就是Response上。这段代码以前是写在asp.net中的。在asp.net中,Response使用的是HttpResponse
2016-04-27 21:32:07 2154 1
原创 mvc 模型验证问题总结
昨天遇到一个问题,很小的问题解决了好长时间。实际上是个低级错误。在model里面写了一个sex属性为int类型,因为直接拷贝的之前的代码,所以就给这个属性添加了一个stringlength验证。结果出现以下错误。出现这个错误的原因则是int类型不能添加stringlenght验证。所以去掉就可以了。同时通过这个问题也发现了不少原理性的东西。在我Edit一个数
2016-03-18 10:12:55 1035
原创 EF模式下数据库的表一定要设置主键
在db first的模式中,一定要给数据库中的表设置相应的主键,不然ef会报错,一般还很难发现,savechange()方法返回0,而不是正常的大于0的书。切记设置主键。返回错误InnerException = {"无法更新 EntitySet“t_Customer”,因为它有一个 DefiningQuery,而 元素中没有支持当前操作的 元素。"}。在发现错误后要吧原有的数据库的表删
2016-03-16 12:00:26 3129
原创 Javascript学习笔记07——DOM
Node类型:每个节点都有自己的父节点parentNode,包含在childNode中的节点都具有相同的父节点。同时都具有同胞节点。使用previousSibling和 nextSibliing可以访问所有的同胞节点。列表中第一个节点的previousSibling节点为null,同理最后一个节点的nextSibling也为null。同样列表中只有一个节点,那么该节点的两个属性都为空。
2016-02-19 16:04:09 347
原创 Javascript学习笔记6——BOM
BOM的核心是window,可以引用全局变量。例如在js文件中:var age=20;function say(){alert("hello");}window可以这样直接调用。window.age或者window.say()通过window来获取浏览器窗口相对于屏幕的位置。可以使用screenX和screenY或者screenLeft和screen
2016-02-01 20:00:14 315
原创 Javascript学习笔记05——引用类型
Object类型是ecmascript中最常见的引用类型,但是对于在应用程序中存储和传输数据而言很重要。创建object类型的方式有两种1,使用new创建var person = new object();person.name="John";2,使用对象字面量var person={name:"wangt",age:23}也可以使用var person={}其作用
2016-01-18 16:20:51 278
原创 Javascript学习笔记04 ——变量,作用域,内存问题
基本类型值:表示简单的数据段,undefined null string number boolean 为基本类型,可以操作保存在变量中的实际的值。引用类型:表示多个值构成的对象。保存在内存中。因为js不能直接访问内存,所以只能方位内存的引用。 var person=new object()person.name="john"alert(person.name);//输出john
2016-01-13 16:38:31 318
原创 Javascript学习笔记03——Js基本概念
js语法中是区分大小写的。注释的时候使用//或者使用/**/进行快注释。js中的语句与C语言类似,每个语句后面要加上分号。如果在方法内定义变量的时候没有使用var定义,那变量就是全局变量。例如:function test(){message="hello";}test();alert(message);//输出helloecmascrip
2016-01-13 10:27:06 366
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人