Snowflake
Snowflake算法核心把时间戳,工作机器id,序列号组合在一起。除了最高位bit标记为不可用以外,其余三组bit占位均可浮动,看具体的业务需求而定。默认情况下41bit的时间戳可以支持该算法使用到2082年,10bit的工作机器id可以支持1023台机器,序列号支持1毫秒产生4095个自增序列id。public class ...
最终一致性落地实践
http://blog.itpub.net/29254281/viewspace-1819422/单位最近赶工,要做一款直播APP本来关于后端,我建议了很多设计包括1.应用Redis键空间/事件通知功能,做两级缓存(Redis,JVM)2.Redis读写分离.(这个很好做,但是单位大部分项目,还是没有这么用.主要是访问量还是低)3.单线程处理并发控制4.最终一致性分库设计.5.系统...
敏感帐号防DBA篡改设计
帐号余额表,里面一般都有明文的帐号余额.如果应用程序没有针对性设计,则DBA可以随意篡改.模拟帐号表.create table user( userid bigint, balance int, checksum varchar(32));模拟JAVA程序,这个加密的过程,是JAVA程序中处理的.创建帐号,...
MySQL异常处理
针对存储过程 、触发器或函数内部语句可能发生的错误或警告信息,需要进行相关异常或称 例外的捕捉,然后作出相应的处理,异常处理的方式如下:DECLARE {CONTINUE | EXIT} HANDLER FOR {SQLSTATE sqlstate_code| MySQL error code| condition_name} handler_actions说明:· Handler type (CON...
不要在存储过程中控制事务
MySQL技术内幕 InnoDB存储引擎 344页.原来看过这段,总而言之,就是MySQL不要在存储过程中控制事务.当时没有仔细看细节,只是记住了一个结论.毕竟都21世纪了.还有用存储过程的?但是..#(×&%¥×&@……&……#@&以如下过程为例.drop table nums; drop procedure pCreateNum...
Linux下用Java获取本机IP地址
转载自:http://blog.sina.com.cn/s/blog_956a67ae010101tr.html开始我在Linux下用InetAddress.getLocalHost()方法获取本机IP地址,得到的结果总是:127.0.1.1。原来这个是etc/hosts文件中的配置,并非网卡的IP地址。后来多方寻访,终于得下以下代码,运行后在控制台输出IP与MAC地址。import java.net.*;...
Slf4j和Log4j 2
SLF4j 是一个门面模式.它是在编译时绑定的,只需要把slf4j-api和slf4j-log4j放到classpath上,即实现绑定slf4j-api中会去调用StaticLoggerBinder这个类获取绑定的工厂类而每个日志实现会在自己的jar中提供这样一个类,这样slf4j-api就实现了编译时绑定实现slf4j-api引用的StaticLoggerBinder类,会在打包时删除.集成Log...
极招尽展
此时此刻似乎可以体会到张灵甫上孟良崮的心情.一页书准备上孟良崮拼一把劣势:人单力孤工作量巨大,时间还紧至少两年没有写过JAVA程序了,估计框架搭建,熟悉都需要时间..优势:熟悉IT基础设施有编程基础领导对我的品性,能力还是认可的一页书背水一战的必胜决心拼中心开花的极端之处就是,要么大获全胜,要么一败涂...
ZooKeeper服务发现客户端
单位想把那套ZooKeeper集群用起来.作为配置中心,一旦出现问题,所有服务都是中断的.尤其又涉及ACL想来想去,我觉得这个客户端还是自己封装,安全系数大些.好长时间也没有写过代码了,确实感觉很生疏.写的逻辑稍微有点乱.别到时候上线了,因为自己的客户端引发问题.那就尴尬了.要求:1.在客户端实现负载均衡2.客户端ACL密...
Redis键空间通知
转载自:http://redisdoc.com/topic/notification.html事件的类型对于每个修改数据库的操作,键空间通知都会发送两种不同类型的事件。比如说,对 0 号数据库的键 mykey 执行 DEL 命令时, 系统将分发两条消息, 相当于执行以下两个 PUBLISH 命令:PUB...
Redis过期删除策略
转载自:http://blueswind8306.iteye.com/blog/2240088最近线上遇到Redis内存达到maxmemory限制后,数据淘汰过慢导致拖慢应用请求的问题。后来仔细看了一下Redis的各种数据淘汰策略,总结一下。 首先,Redis有三种删除key的时机,它们对应不同的淘汰策略: 当读/写一个已经过期的key时,会触发惰性删...
Redis主从复制网络闪断处理
先记录几个有意思的用法1.重复执行-r 选项重复执行一个命令指定的次数。-i 设置命令执行的间隔。比如查看redis每秒执行的commands(qps)./redis-cli -r 100 -i 1 info stats | grep instantaneous_ops_per_secinstantaneous_ops_per_sec:334instantaneous_ops_per_sec:306instantaneous_ops_per_sec:294instantane...
Redis优化要点--读后总结
http://www.4wei.cn/archives/1002605http://redis.io/commands/INFOinfo命令# Memoryused_memory:11570933696used_memory_human:10.78Gused_memory_rss:11895382016used_memory_peak:12194989280used_memory_peak_human:11.36Gused_memory_lua:33792mem_fragmentation_ratio:1.03mem_allocator:jemalloc-3.2.0...
ElasticSearch模板和别名
单位现在的搜索系统,每天凌晨,都会做一个全量更新.然后数据一天之内就不会变了...以后引入准实时搜索之后,为了保险起见,我可能还会保留凌晨的全量更新.我大致会采用如下方式,创建两个索引songod_m1和songod_m2,和一个别名 songod每天凌晨,全量更新备用的索引,完成之后,切换别名.周而复始.准实时搜索的功能,通过Canal...
ElasticSearch _all和_source
ElasticSearch 有两个内部结构_all和_source_all是所有字段的大杂烩,默认情况下,每个字段的内容,都会拷贝到_all字段.这样可以忽略字段信息进行搜索,非常方便.但是这样带来了额外的存储压力和CPU处理压力.在默认情况下,开启_all和_source{ "mappings": { &...
ElasticSearch Java API
官方地址:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs.html通过JAVA api实现对ES的增删改查. import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; import java.io.IOE...
canal部署使用
昨天花了一天时间,部署了canal,但是还有很多细节不明白.版本:1.0.21我发现部署之后,没有找到任何的存储文件.按说应该有中继日志这种东西,但是没有发现.后来官方群中,有大神说它是内存存储.## memory store RingBuffer size, should be Math.pow(2,n)canal.instance.memory.buffer.size = 16384## memory store Rin...
canal初探
我计划以后将单位的搜索项目,慢慢过渡到ES集群,然后实现准实时的搜索.canal可以感知数据库的变化,作为一个mysql的伪slave,我可以通过canal获取数据库变化,然后批量刷新到ES集群.canal是阿里开源的一款产品..虽然感觉国产开源不靠谱.但是没办法..洋人没做,自己又不会做.主页:https://github.com/alibaba/canal下载...
ELK尝试
安装过程不表.年初接手了搜索项目.如何使用ELK统计用户正在搜索频率最高的歌曲?如何使用ELK统计每分钟的访问量?resin accesslog 如下:192.168.216.25 - "null-user" [17/May/2016:21:13:49 +0800] "POST /search/dispatch.htm HTTP/1.1" 200 6302 "-" "Apache-HttpClient/4.2.2 (java 1.5)" "192.168.227.61:8101" -...
Java try catch finally
参考:https://www.ibm.com/developerworks/cn/java/j-lo-finally/http://www.cnblogs.com/lanxuezaipiao/p/3440471.htmlfinally 语句块一定会执行吗?有两个前提条件1.try块已经得到执行2.不能出现Error.比如关停了JVMfinally块执行的时机try或者catch return的语句执行时候,但是在实际return之前,执行finally...