2.源码解析 1.相关命令如下: {"hset",hsetCommand,,"wmF",,NULL,,,,,}, {"hsetnx",hsetnxCommand,,"wmF",,NULL,,,,,}, {"hget",hgetCommand,,"rF",,NULL,,,,,}, {"hmset",hmsetCommand,-,"wm",,NULL,…
老生常谈系列之Aop--Spring Aop源码解析(二) 前言 上一篇文章老生常谈系列之Aop--Spring Aop源码解析(一)已经介绍完Spring Aop获取advice切面增强方法的逻辑,那这篇会介绍Spring Aop是怎么根据上面获取的advice生产动态代理的,并且会介绍advice是怎么执行的,例如怎么确保@Before的逻辑在@After前面执行. 源码分析 以下代码分析基于Spring版本5.2.x,另外部分地方我摘抄保留了英文注释,希望看官可以用心体会. 我们回到Abs…
老生常谈系列之Aop--Spring Aop源码解析(一) 前言 上一篇文章老生常谈系列之Aop--Spring Aop原理浅析大概阐述了动态代理的相关知识,并且最后的图给了一个Spring Aop实现的逻辑猜测,这是一种很普通的情形,如下图: 那下面,我们就通过源码分析来看Spring到底是怎么操作的,Spring是如何识别切面并且生成动态代理的. 在讲解Spring Aop实现之前,插两句Spring IOC的实现,因为Aop是依赖了IOC的实现的.可以参考Spring官网的原文如下: On…
1.介绍 Hash是以K->V形式存储,而Set则是K存储,空间节省了很多 Redis中Set是String类型的无序集合:集合成员是唯一的. 这就意味着集合中不能出现重复的数据.可根据应用场景需要选用该数据类型.(比如:好友/关注/粉丝/感兴趣的人/黑白名单) 2.源码解析 Redis使用Dict和IntSet保存Set数据 // 1. inset 数据结构,在set数据量小且都是整型数据时使用 typedef struct intset { // 编码范围,由具体存储值决定 uint32_t…
Stack简介 Stack是栈.它的特性是:先进后出(FILO, First In Last Out). java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现的,这就意味着,Stack也是通过数组实现的,而非链表.当然,我们也可以将LinkedList当作栈来使用!在“Java 集合系列06之 Vector详细介绍(源码解析)和使用示例”中,已经详细介绍过Vector的数据结构,这里就不再对Stack的数据结构进行说明了. Stack的继承关系 java…
在前面的博文<小学徒成长系列—String关键源码解析>和<小学徒进阶系列—JVM对String的处理>中,我们讲到了关于String的常用方法以及JVM对字符串常量String的处理. 但是在Java中,关于字符串操作的类还有两个,它们分别是StringBuilder和StringBuffer.我们先来就讲解一下String类和StringBuilder.StringBuffer的联系吧. String.StringBuilder.StringBuffer的异同点 结合之前写的博…
本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7681826.html 在源码解析前,需要先理清线程池控制的运行状态,以及运行状态之间的任务调度 线程池控制状态(ctl ,原子操作 ,来自包java.util.concurrent.atomic ,保证线程并发安全),分为两大类:workerCount(当前运行的线程数)    runState(当前线程的运行状态) 1.runState运行状态: a>  RUN…
这可能是我看过的写的最详细的关于redis 选举的文章了, 原文链接 Raft协议是用来解决分布式系统一致性问题的协议,在很长一段时间,Paxos被认为是解决分布式系统一致性的代名词.但是Paxos难于理解,更难以实现,诸如Google大牛们开发的分布式锁系统Chubby都遭遇了很多坑.Raft协议设计的初衷就是容易实现,保证对于普遍的人群都可以十分舒适容易的去理解.另外,它必须能够让人形成直观的认识,这样系统的构建者才能够在现实中进行必然的扩展. 本文从Redis Sentinel集群选择Le…
学习思路 议程:代码结构-主干流程-分层架构-业务模型-数据库模型-消息模型 分布式架构:Api:横向扩展    rpc:纵向扩展 分层架构:Controller接口层.View/Manager逻辑层.DAO/Model数据库层 Nova与其他组件交互 业务模型——数据库建模 消息模型 rabbitmqctl list_queues,可以列出所有的消息队列 或者通过web管理界面,使用guest/openstack登录可以浏览   Nova代码结构 提纲挈领式的掌握,知道怎么定制化,知道组件之间…
像keys或者smembers命令,需要遍历数据集合中的所有元素.在一个大的数据库中使用,可能会阻塞服务器较长的一段时间,造成性能问题,因此不适用与生产环境. 在Redis2.8.0中引入了scan类命令,可用于迭代整个数据库或者是哈希键.集合键和有序集合键这样的数据集合. scan类命令支持增量式迭代,它们每次执行都只会返回少量元素,所以这些命令可以用于生产环境. scan类命令使用游标迭代数据集合,命令每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时,使用这个新游标作为scan类…