小寒的blog
Programming is a darned hard thing—but I am going to like it.
posts - 105,  comments - 125,  trackbacks - 0
摘要:Unsubscribe from updates to this bug at: https://bugs.mysql.com/77681 Updated by: Daniel che chung So Reported by: OCA Admin Category: Connector/J... 阅读全文
posted @ 2015-08-28 20:21 xhan 阅读(301) 评论(0) 推荐(0) 编辑
摘要:最近一年多写的最虐心的代码。必须好好复习java并发了。搞了一晚上终于测试都跑通过了,特此纪念,以资鼓励!import java.util.ArrayList;import java.util.List;import java.util.concurrent.ArrayBlockingQueue;i... 阅读全文
posted @ 2015-07-05 07:05 xhan 阅读(634) 评论(5) 推荐(0) 编辑
摘要:总结下这周帮助客户解决报表生成操作的mysql 驱动的使用上的一些问题,与解决方案。由于生成报表逻辑要从数据库读取大量数据并在内存中加工处理后在生成大量的汇总数据然后写入到数据库。基本流程是 读取->处理->写入。1 读取操作开始遇到的问题是当sql查询数据量比较大时候基本读不出来。开始以为是ser... 阅读全文
posted @ 2014-09-05 17:48 xhan 阅读(50607) 评论(3) 推荐(1) 编辑
摘要:innodb的事务隔离级别是可重复读级别且innodb_locks_unsafe_for_binlog禁用,也就是说允许next-key lockCREATETABLE`LockTest`(`order_id`varchar(20)NOTNULL,`id`bigint(20)NOTNULLAUTO_... 阅读全文
posted @ 2014-04-30 15:37 xhan 阅读(3015) 评论(0) 推荐(0) 编辑
摘要:1 InvokeFilter,实现此接口 可以在consumer端 与provider端的调用过程中拦截住请求调用。已经实现的InvokeFilter包括RetryInvokeFilter:实现失败重试功能,当然需要provider端对应方法保证幂等性(吐槽下dubbo,dubbo的failover就是用重试来实现的,如果服务提供方不能安全重试会出问题的,所以一般dubbo reties都设置为0,也就是说关闭了failover)ClusterInvokeFilter:实现jremoting的failover功能,这里对dubbo的实现多了改进把retry与failover两个概念区分对待 。 阅读全文
posted @ 2014-02-27 21:44 xhan 阅读(649) 评论(0) 推荐(1) 编辑
摘要:https://github.com/jremoting/jremotingjremoting是一个类似dubbo的rpc服务治理框架,并且可以与dubbo相互调用。jremoting的实现是参考了dubbo的许多概念,但是代码相比 dubbo更简洁,模型也更精简更灵活。底层nio通信是基于netty 4.x实现的。注册中心同开源版本的dubbo一样基于zookeeper实现。主要功能包括透明方式的rpc调用,支持consumer端异步调用与provider的异步实现服务的动态发现负载均衡+ failover动态路由动态分组服务限流(开发中)如何使用:服务提供方(provider)提供的服务接 阅读全文
posted @ 2014-02-27 21:22 xhan 阅读(850) 评论(0) 推荐(0) 编辑
摘要:/***最大余数分摊算法*@authorxhan*{@link=http://en.wikipedia.org/wiki/Largest_remainder_method}*/publicclassShareCalculator{publicstaticdouble[]calculate(double[]votes,doubletotalSeats){double[]seats=newdouble[votes.length];double[]reminders=newdouble[votes.length];doubletotalVotes=0;for(doublevote:votes){to 阅读全文
posted @ 2012-01-23 14:01 xhan 阅读(617) 评论(0) 推荐(0) 编辑
摘要:package com.hichina.bc.repository.test;import junit.framework.Assert;import org.hibernate.SessionFactory;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springf 阅读全文
posted @ 2011-09-22 22:40 xhan 阅读(256) 评论(0) 推荐(0) 编辑
摘要:protobuf是google的一种序列化对象的编码方式。相比xml和json的序列化方式,protobuf序列化的结果更小,而且序列化的速度也更快。本文简单介绍写如果通过Emit来在运行时动态的生成对数据对象的protebuf编码解码类。 通过本实例展示下元数据编程的能力。关于protebuf的编码原理可以参考这里http://code.google.com/intl/zh-CN/apis/protocolbuffers/docs/encoding.html ,本文只展示对简单的int32进行varint方式编码和string的编码,。在此基础上可以很容易的实现全部的protobuf的编码. 阅读全文
posted @ 2011-04-03 01:16 xhan 阅读(1799) 评论(3) 推荐(5) 编辑
摘要:HandlerSocket 是一个mysql 数据库的插件,它可以绕过mysql的查询分析和优化的过程,直接与innodb存储引擎进行交互。尤其是当大多数数据都被innodb缓存到内存中的时候,查询分析和优化过程就会是整个查询处理过程的瓶颈。通过使用HandlerSocket可以绕过这个瓶颈,从而提升性能。这要比mysql+memched要有优势,因为HandlerSocket不需要处理缓存失效的问题。下面看下HsClient访问mysql的一个例子代码1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingS 阅读全文
posted @ 2011-03-24 18:22 xhan 阅读(2314) 评论(1) 推荐(1) 编辑
摘要:放假没事学习了redis这个key-value数据库。顺便写了点学习笔记和大家分享下,希望对想了解redis的同学有所帮助。一 redis学习笔记之环境搭建二 redis学习笔记之数据类型三 redis学习笔记之排序四 redis学习笔记之事务五 redis学习笔记之pipeline六 redis学习笔记之发布订阅七 redis学习笔记之持久化八 redis学习笔记之主从复制九 redis学习笔记之虚拟内存 阅读全文
posted @ 2011-02-08 13:36 xhan 阅读(8908) 评论(5) 推荐(8) 编辑
摘要:首先说明下redis的虚拟内存与os的虚拟内存不是一码事,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的 内存空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了可以将数据分割到多个redis server外。另外的能够提高数据库容量的办法就是使用vm把那些不经常访问的数据交换的磁盘上。如果我们的存储的数据总是有少部分数据被经常访问,大 部分数据很少被访问,对于网站来说确实总是只有少量用户经常活跃。当少量数据被经常访问时,使用vm不但能提高单台redis server数据库的容量,而且也不会对性能造成太多影响。 r 阅读全文
posted @ 2011-02-07 19:49 xhan 阅读(4537) 评论(0) 推荐(0) 编辑
摘要:redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。下面是关于redis主从复制的一些特点1.master可以有多个slave2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于clie 阅读全文
posted @ 2011-02-07 15:47 xhan 阅读(3087) 评论(3) 推荐(0) 编辑
摘要:redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。redis支持两种持久化方式,一种是 Snapshotting(快照)也是默认方式,另一种是Append-only file(缩写aof)的方式。下面分别介绍Snapshotting 快照是默认的持久化方式。这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久 化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置save 900 1 #900秒内如果超过1个key被修改,则发 阅读全文
posted @ 2011-02-07 13:34 xhan 阅读(9485) 评论(2) 推荐(4) 编辑
摘要:发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。redis作为一个pub/sub server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。 阅读全文
posted @ 2011-02-06 14:44 xhan 阅读(8232) 评论(3) 推荐(0) 编辑
摘要:redis是一个cs模式的tcp server,使用和http类似的请求响应协议。一个client可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常 会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client。基本的通信过程如下Client: INCR XServer: 1Client: INCR XServer: 2Client: INCR XServer: 3Client: INCR XServer: 4基 本上四个命令需要8个tcp报文才能完成。由于通信会有网络延迟,假如从client和server之间的包传输时间需 阅读全文
posted @ 2011-02-05 13:48 xhan 阅读(3884) 评论(3) 推荐(0) 编辑
摘要:redis对事务的支持目前还比较简单。redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。 由于redis是单线程来处理所有client的请求的所以做到这点是很容易的。一般情况下redis在接受到一个client发来的命令后会立即处理并 返回处理结果,但是当一个client在一个连接中发出multi命令有,这个连接会进入一个事务上下文,该连接后续的命令并不是立即执行,而是先放到一 个队列中。当从此连接受到exec命令后,redis会顺序的执行队列中的所有命令。并将所有命令的运行结果打包到一起返回给client.然后此连接就 结束事务上下文。 阅读全文
posted @ 2011-02-04 17:48 xhan 阅读(10070) 评论(0) 推荐(3) 编辑
摘要:在了解完各种redis类型后,这次介绍下redis排序命令.redis支持对list,set和sorted set元素的排序。排序命令是sort 完整的命令格式如下:SORT key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey] 下面我们一一说明各种命令选项(1)sort key这个是最简单的情况,没有任何选项就是简单的对集合自身元素排序并返回排序结果.下面给个例子redis lpush ml 12(integer) 1redis lpush ml 11(integer) 2 阅读全文
posted @ 2011-02-03 17:44 xhan 阅读(8888) 评论(0) 推荐(2) 编辑
摘要:本文介绍下redis支持的各种数据类型包括string,list ,set ,sorted set 和hash 1. keysredis本质上一个key-value db,所以我们首先来看看他的key.首先key也是字符串类型,但是key中不能包括边界字符由于key不是binary safe的字符串,所以像"my key"和"mykey\n"这样包含空格和换行的key是不允许的顺便说一下在redis内部并不限制使用binary字符,这是redis协议限制的。"\r\n"在协议格式中会作为特殊字符。redis 1.2以后的协议中部分命令已经开始使用新的协议格式了(比如MSET)。总之目前还是把包 阅读全文
posted @ 2011-02-02 19:07 xhan 阅读(20816) 评论(3) 推荐(2) 编辑
摘要:1.简介 redis是一个开源的key-value数据库。它又经常被认为是一个数据结构服务器。因为它的value不仅包括基本的string类型还有 list,set ,sorted set和hash类型。当然这些类型的元素也都是string类型。也就是说list,set这些集合类型也只能包含string 类型。你可以在这些类型上做很多原子性的操作。比如对一个字符value追加字符串(APPEND命令)。加加或者减减一个数字字符串(INCR命令,当 然是按整数处理的).可以对list类型进行push,或者pop元素操作(可以模拟栈和队列)。对于set类型可以进行一些集合相关操作 (inters 阅读全文
posted @ 2011-02-01 17:49 xhan 阅读(9859) 评论(3) 推荐(2) 编辑