摘要: redis的事务很简单,他主要目的是保障,一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。 看下面例子: 我们调用jedis.watch(…)方法来监控key,如果调用后key值发生变化,则整个事务会执行失败。另外,事务中某个操作失败,并不会回滚其他操作(好奇 阅读全文
posted @ 2016-10-02 20:51 okay4321 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 有时,我们需要采用异步方式,一次发送多个指令,不同步等待其返回结果。 利用pipeline的方式从client打包多条命令一起发出,不需要等待单条命令的响应返回, 而redis服务端会处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端(ps:有点类似存储过程的特点)。 这样可以取得非常好的 阅读全文
posted @ 2016-10-02 20:39 okay4321 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 首先说下这个问题的使用场景,有些时候我们业务逻辑是在不同的jvm进程甚至是不同的物理机上的jvm处理的。 这样如何来实现不同jvm上的同步问题呢,其实我们可以基于redis来实现一个锁(秒杀场景)。 Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 k 阅读全文
posted @ 2016-10-02 20:18 okay4321 阅读(520) 评论(0) 推荐(0) 编辑
摘要: kafka集群搭建 Java代码 1.zookeeper集群 搭建在110, 111,112 2.kafka使用3个节点110, 111,112 修改配置文件config/server.properties broker.id=110 host.name=192.168.1.110 log.dirs 阅读全文
posted @ 2016-10-02 19:32 okay4321 阅读(897) 评论(0) 推荐(0) 编辑
摘要: 使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip 如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar,下载地址:http://files.c 阅读全文
posted @ 2016-10-02 18:59 okay4321 阅读(432) 评论(0) 推荐(0) 编辑
摘要: TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据。 TopK问题是个很常见的问题:例如学校要从全校学生中找到成绩最高的500名学生,再例如某搜索引擎要统计每天的100条搜索次数最多的关键词。 对于这个问题,解决方法有很多: 方法一:对源数据中所有数据进行排序,取出前K个数据,就是T 阅读全文
posted @ 2016-10-02 11:45 okay4321 阅读(394) 评论(0) 推荐(0) 编辑
摘要: java堆外内存 (直接内存 非托管内存) 堆外内存的好处是: 例如NIO为了高效,提供了ByteBuffer ps:进程间通信的方法除了管道,信号,套接字等常规方法,共享内存,读写文件也可以实现进程间的通信。 http://www.importnew.com/14292.html 阅读全文
posted @ 2016-10-01 21:00 okay4321 阅读(648) 评论(0) 推荐(0) 编辑
摘要: 阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信。其中,服务提供者和服务消费者之间,服务提供者、服务消费者和性能统计节点之间使用 Netty 进行异步/同步通信。 除了 Du 阅读全文
posted @ 2016-10-01 19:37 okay4321 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 消息队列作用: 解耦 削峰 异步操作 举一个例子,对于我们的订单系统,订单最终支付成功之后可能需要给用户发送短信积分什么的,但其实这已经不是我们系统的核心流程了。如果外部系统速度偏慢(比如短信网关速度不好),那么主流程的时间会加长很多,用户肯定不希望点击支付过好几分钟才看到结果。那么我们只需要通知短 阅读全文
posted @ 2016-10-01 10:41 okay4321 阅读(1045) 评论(0) 推荐(0) 编辑
摘要: http://jobar.iteye.com/blog/2023477 Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 Java代码 //Before Java 8: new Thread(new Runnable() { @Override publ 阅读全文
posted @ 2016-09-30 16:28 okay4321 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务。Java没有提供一种安全直接的方法来停止某个线程,但是Java提供了中断机制。 Java中断机制是一种协作机制,也就是说通过中断并不能直接终止另一 阅读全文
posted @ 2016-09-30 15:46 okay4321 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 服务器: 启动了一个线程监听 Socket 端口, 有Socket访问了, 反序列化解析出调用哪个方法, 以及传入的参数,再用Socket 写回去.客户端: 利用 Jdk 的Proxy 生成了一个代理类,在创建Proxy 时建立与服务器的Socket连接.调用 Proxy 的方法时, 向服务器发送数 阅读全文
posted @ 2016-09-30 13:14 okay4321 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 除了synchronized的功能,ReentrantLock多了三个高级功能. 等待可中断,公平锁,绑定多个Condition. 1.等待可中断 在持有锁的线程长时间不释放锁的时候,等待的线程可以选择放弃等待. tryLock(long timeout, TimeUnit unit) 2.公平锁 阅读全文
posted @ 2016-09-29 15:56 okay4321 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 角色: Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。 Monitor: 统计服务的调用次数和调用时间的监控中心。 Container: 服务运行容器。 Provider: 暴露服务的服务提供方。 Consu 阅读全文
posted @ 2016-09-29 15:02 okay4321 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 1 package cn.fansunion.zookeeper; 2 import org.apache.zookeeper.CreateMode; 3 import org.apache.zookeeper.ZooDefs.Ids; 4 import org.apache.zookeeper.ZooKeeper; 5 6 public class ZooKeeperTest... 阅读全文
posted @ 2016-09-29 12:01 okay4321 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 假设系统中有以下两个表user(id, name, amt_sold, amt_bought)transaction(xid, seller_id, buyer_id, amount)其中user表记录用户交易汇总信息,transaction表记录每个交易的详细信息。 这样,在进行一笔交易时,若使用 阅读全文
posted @ 2016-09-29 11:46 okay4321 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2.对于多列索引,不是使用的第一部分,则不会使用索引 3.like查询以%开头 4. 阅读全文
posted @ 2016-09-29 08:15 okay4321 阅读(1931) 评论(0) 推荐(0) 编辑
摘要: 另外一些APM工具也可以帮助进行性能定位 http://blog.csdn.net/neutrojan/article/details/50532590 阅读全文
posted @ 2016-09-28 17:03 okay4321 阅读(1705) 评论(0) 推荐(0) 编辑
摘要: 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称CI)。 持续集成指的是,频繁地(一天多次)将代码集成到主干。 它的好处主要有两个。 (1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易 阅读全文
posted @ 2016-09-28 16:58 okay4321 阅读(126) 评论(0) 推荐(0) 编辑
摘要: Mycat关键特性 关键特性 支持SQL92标准 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。 支持Galera for MySQL集群,Percona Cluster或者Mari 阅读全文
posted @ 2016-09-28 16:39 okay4321 阅读(642) 评论(0) 推荐(0) 编辑
摘要: 知乎是国内很少的使用Python开发的一个网站,也很多值得我们学习的地方,从知乎让我们也可以了解到一些新的WEB技术。 一、Python框架 知乎目前使用的是Tornado 框架。Tornado 全称Tornado Web Server,是一个用Python 语言写成的Web 服务器兼Web 应用框 阅读全文
posted @ 2016-09-28 16:20 okay4321 阅读(670) 评论(0) 推荐(0) 编辑
摘要: Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有 阅读全文
posted @ 2016-09-28 11:16 okay4321 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 线程如果获得监视锁成功,将成为该监视者对象的拥有者。 在任一时刻内,监视者对象(Monitor)只属于一个活动线程 (Owner) wait()、notify(),notifyAll()的使用: obj.wait()方法将使本线程挂起,并释放obj对象的monitor。只有其他线程调用obj对象的n 阅读全文
posted @ 2016-09-28 09:42 okay4321 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 使用order by会引发全局排序 select * from baidu_click order by click desc; 使用distribute和sort进行分组排序 select * from baidu_click distribute by product_line sort by  阅读全文
posted @ 2016-09-26 21:34 okay4321 阅读(10067) 评论(0) 推荐(0) 编辑
摘要: 如上图,是一颗b+树,关于b+树的定义可以参见B+树,这里只说一些重点,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于 阅读全文
posted @ 2016-09-26 10:30 okay4321 阅读(169) 评论(0) 推荐(0) 编辑