09 2017 档案
摘要:本文实现了一个重试的装饰器,并且使用了指数退避算法。指数退避算法实现还是很简单的。先上代码再详细解释。 1、指数退避算法 欠奉。http://hugnew.com/?p=814 2、重试装饰器retry实现 这里我们自己定义了两个东西: 1)枚举类Result,标识过程调用的状态,其中有三个状态,成
阅读全文
摘要:之前写过一篇博客,里面吭哧吭哧半天,使用Redis实现了一个分布式锁。 今天闲来没事看源码,突然发现redis set命令的用法可以直接指定nx和ex,文档中没有明说这是个原子方法,但是后面给出了一个例子使用set nx ex的方法实现了redis锁。 感觉应该是原子性的,挺好。 相比这篇文章里的方
阅读全文
摘要:1、安装RabbitMQ 1)下载和安装erlang 下载erlang 安装erlang,root用户使用rpm安装 2)下载和安装RabbitMQ 下载RabbitMQ 安装RabbitMQ,root用户使用rpm安装 一般来说不会有什么问题,如果安装RabbitMQ过程中遇到如下错误,清空rpm
阅读全文
摘要:本文介绍在使用curator框架的时候如何handle session expire。 1、什么是zookeeper的会话过期? 一般来说,我们使用zookeeper是集群形式,如下图,client和zookeeper集群(3个实例)建立一个会话session。 在这个会话session当中,cli
阅读全文
摘要:本文记录一些redis事务相关的原理。 1、基本概念 1)什么是redis的事务? 简单理解,可以认为redis事务是一些列redis命令的集合,并且有如下两个特点: a)事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
阅读全文
摘要:在前一篇我们说了,mybatis-generator反向生成代码。 这里我们开始说如何在django中反向生成mysql model代码。 我们在展示django ORM反向生成之前,我们先说一下怎么样正向生成代码。 正向生成,指的是先创建model.py文件,然后通过django内置的编译器,在数
阅读全文
摘要:在Dao层,通过数据库表反向生成,可以节省我们很多的精力,把更多的精力投入复杂的业务中。 数据库表反向生成,指的是通过数据库如mysql中的库表schema生成dao层读写表的基础代码,包括model(entity)和dao(mapper)。 在本文中我先介绍java中mybatis-generat
阅读全文
摘要:在这一篇中我们实现了不通过zk来编写codis集群proxys的api,http://www.cnblogs.com/kangoroo/p/7481567.html 如果codis集群暴露zk给你的话,那么就方便了,探活和故障摘除与恢复codis集群都给你搞定了,你只需要监听zookeeper中实例
阅读全文
摘要:在使用codis时候,我们遇到的场景是,公司提供了HA的Proxy(例如N个),但是不暴露zookeeper(也就是说没有codis后端服务列表)。 如果暴露zk的话,可以看这一篇,http://www.cnblogs.com/kangoroo/p/7485760.html 要求在开发客户端api的
阅读全文