最近在实现一个定时发送推送消息的功能,用到了延迟消息,想整理一下延迟消息消息相关的东西。 实现定时发送这个需求通常有两种方式: 轮询定时任务:给定周期内扫描数据表,查看是否有认为还没执行。 这种实现可以很简单,只需要启动一个定时任务即可;但缺点同样也很明显,这个间隔扫描的时间不好控制。 给短了会造成很多无意义的扫描,增大数据库压力,给长了又会使得误差较大。 延时消息:创建定时任务的时候,发送 N … 继续阅读
分类目录归档:编程
变量命名问题
写出机器能理解的代码难度不大, 但是能写出容易被大多数人理解并且容易维护的的代码,就不容易了。写出容易理解又容易维护的代码,包括很多方面。这包括,代码组织、程序结构、函数结构、函数、变量命名等等。 这里主要关注命名问题。 Phil Karlton: There are only two hard things in Computer Science:Cache invalidation and n … 继续阅读
Raft一致性算法
最近在看一些基础的分布式理论的书,整理一下相关的问题,做了一些详细的整理,方便之后梳理和查阅。 一致性问题 在分布式系统中,一致性问题(consensus problem)是指对于一组服务器,给定一组操作,我们需要一个协议使得最后它们的结果达成一致。 CAP理论对于分布式系统的论述,如果不想牺牲一致性,我们就只能放弃可用性,所以,数据一致性模型主要有以下几种:强一致性、弱一致性和最终一致性等,在本 … 继续阅读
CAP理论
这是分布式理论的理论基石。 CAP理论概述 一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。 定义 Consistency 一致性 一致性指“all nodes see the same data at the same time”,即所有节点在同一时间的数据完全一致。 一致性是 … 继续阅读
Spring的编程式事务
常用的是通过注解方式来使用,但是时候需要编程式,在代码块里面管理事务,以便实现一些定制化的逻辑,故总结。 编程式事务管理 编程式事务管理: 通过Transaction Template手动管理事务 实现声明式事务的四种方式: 基于 TransactionInterceptor 的声明式事务: Spring 声明式事务的基础,通常也不建议使用这种方式,但是与前面一样,了解这种方式对理解 Spring … 继续阅读
GC Root和可达性分析算法
对象生死判定 如何判断Java中一个对象应该 “存活” 还是 “死去”,这是 垃圾回收器要做的第一件事。 GC Root GC Root也成为GC根对象。 GC根对象 在Java中, 可作为GC Roots的对象包括以下四种: 虚拟机栈(栈帧中的本地变量表)中引用的对象 本地方法栈 中 JNI (Native方法)引用的变量 方法区 中类静态属性引用的变量 方法区 中常量引用的变量 可达性分析算法 … 继续阅读