Knight Dawn


  • 首页

  • 归档

HashedWheelTimer

发表于 2018-06-01

场景

netty内部有一个时间轮的Timer来管理大量的定时调度,例如管理心跳检测

使用方法

1
2
3
4
5
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.4.Final</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) throws InterruptedException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
HashedWheelTimer hashedWheelTimer = new HashedWheelTimer(10, TimeUnit.SECONDS);
System.out.println("start:" + LocalDateTime.now().format(formatter));
// timeout1
Timeout t1 = hashedWheelTimer.newTimeout(timeout -> {
System.out.println("task1 :" + LocalDateTime.now().format(formatter));
}, 20, TimeUnit.SECONDS);
// timeout2
Timeout t2 = hashedWheelTimer.newTimeout(timeout -> {
System.out.println("task2 :" + LocalDateTime.now().format(formatter));
}, 20, TimeUnit.SECONDS);
Thread.sleep(15000);
t1.cancel();
System.out.println("task1 cancel :" + LocalDateTime.now().format(formatter));
}

output
start:2018-06-01 18:33:41
task1 cancel :2018-06-01 18:33:56
task2 :2018-06-01 18:34:11

阅读全文 »

avro序列化+反序列化

发表于 2018-05-29

链接

Apache Avro: a New Format for Data Interchange
Apache Avro™ 1.8.2 Getting Started (Java)
Apache Avro™ 1.8.2 Specification

用于交换大数据的序列化项目

  • Protocol Buffers 基于定义好的数据结构生成代码后组装数据,同时使用注解解决定义与数据不一致的情况,导致数据量变大,解析困难;
  • Thrift FIXME
  • avro 支持生成代码的方式,也提供一种通用的方式处理数据,使用模式进行匹配,数据缺失使用默认值,数据不匹配则忽略。
    阅读全文 »

分布式锁

发表于 2018-05-26

特性

  • 排他性,只有一个客户端能持有锁
  • 不死锁
  • 容错,部分redis节点挂了,也支持锁特性

Redis分布式锁

极客时间耗子叔分布式锁
Redis分布式锁官方文档
Is Redlock safe
How to do distributed locking

Redis 命令

  • 加锁
    SET NX 在key不存在的时候给key赋值,
    PX通知 Redis 保存这个key 30000ms(锁过期时间),当资源被锁定超过过期时间时,锁自动释放
    my_random_value 必须全局唯一

    1
    SET resource_name my_random_value NX PX 30000
  • 解锁
    根据my_random_value判断是否自己持有的锁,然后执行del

    1
    2
    3
    4
    5
    if redis.call("get",KEYS[1]) == ARGV[1] then 
    return redis.call("del",KEYS[1])
    else
    return 0
    end
阅读全文 »

单例模式java

发表于 2018-05-25
静态方法1234567891011// 这种方法,多线程下会有并发问题public class SingletonDemo { private static SingletonDemo instance = null; private SingletonDemo() { ...
阅读全文 »

定时器

发表于 2018-05-25
场景 指定时间点执行任务 指定时间间隔执行任务 在二的基础上指定次数执行任务(场景较少) 线程轮询+Sleep最简单的实现方法是启动一个线程,设定时间间隔或时间点,进入循环后,调用Sleep睡眠对应时间间隔,然后执行任务(放入线程池执行任务)1234567891011121314151617181 ...
阅读全文 »

StructedStreaming

发表于 2018-05-25
阅读全文 »

缓存实现和更新设计

发表于 2018-05-25
场景 提升查询性能,修改操作如果大于查询操作时则没必要做Cache设计 Cache类型客户端Cache页面Cache浏览器Cache代理Cache(边缘Cache)服务端CacheDB Cache (MySql)应用CacheCache算法EhcacheGuavaCacheRedisCache更新 ...
阅读全文 »

异步设计

发表于 2018-05-22
什么是异步我的理解,异步的概念是相对同步而言的,同步和异步在并发编程上也有对应的概念,对应的是串行和并行,并发编程上考虑的更微观是在线程上考虑,设计范围局限在语言层面。更宏观点的概念,同步是实时响应的过程,而异步则非实时。 异步设计异步设计包括有两方面的内容 系统级别的异步通讯优点:系统之间解耦解决 ...
阅读全文 »

Hello World

发表于 2018-05-21
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in ...
阅读全文 »
12

sugengbin

19 日志
26 标签
© 2019 sugengbin
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4