百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

分布式常用工具组件 distributed-tool

cac55 2024-10-20 04:21 11 浏览 0 评论

distributed-tool

项目介绍

这是一个分布式常用工具组件。其中包括但不限于:

分布式List、分布式Set、分布式Long、分布式信号量、分布式缓存、分布式锁、分布式序列号生成器、分布式订阅发布模式等常用工具类

目前微服务开发的系统很多,这个就涉及到分布式集群问题。像以前如果是单机,那么这些解决方案都可以使用JVM的API来实现

但在分布式环境下,这些API都不可用,所以急需一套分布式的API来支持这种常用操作,那么我来提供了,后面持续添加各种分布式常用工具类

注意:所有组件目前都是线程不安全,如果多线程请使用多实例,或者自己加同步锁

软件架构

目前项目分两个module,distributed-tool和distributed-tool-test。前者是核心源码。后者是测试代码。

distributed-tool主要分如下模块:分布式List、分布式Set、分布式Long、分布式信号量等

  1. core 提供基本分布式组件。(V1.3支持)
  2. cache 简单的分布式缓存模块。(V1.3支持)
  3. lock 分布式锁。(V1.3支持)
  4. pubsub 分布式订阅发布组件。(V1.3支持)
  5. sequence 分布式序列号生成器。(V1.3支持)

Maven引用

<dependency>
 <groupId>com.xuanner</groupId>
 <artifactId>distributed-tool</artifactId>
 <version>1.3</version>
</dependency>

使用教程

初始化(目前底层使用了Redis来实现,所以使用Redis方式初始化)

Dt.getInstance().initJedis("xxx", 8380, "xxx");

销毁(注意,在应用的结束生命周期上加上销毁代码,例如Spring的destroy周期)

Dt.getInstance().getDefaultJedisFactory().destroy();

一个分布式List使用例子

DtList list = Dt.newDtList("listName");
list.pushLeft(new String[] { "a", "b" });
list.popLeft();
list.close();//使用完毕记得close

一个分布式缓存锁使用例子

DtLock lock = Dt.newDtLock("lockName");
String kId = lock.tryLock();
//你的临界资源操作逻辑
lock.unLock(kId);
lock.close();//使用完毕记得close

核心分布式集合使用

原理说明

很多有用的组件,都基于核心的分布式集合来实现。例如:分布式List、分布式Queue、分布式Set等等。我这里也实现了一些基本的分布式合集和原子类。

分布式DtList

支持基本的push、pop操作

DtList list = Dt.newDtList("listName");
list.pushLeft(new String[] { "a", "b" });//从列表的左边push一个元素
String element = list.pushPop();//从列表的右边pop一个元素,这里element==a
//使用完后记得close
list.close();

分布式DtLong

支持分布式自增和自减去

DtLong dtLong = Dt.newDtLong("longName");
long l = dtLong.incr(1);
l = dtLong.decr(1L);
l = dtLong.getValue();
//使用完后记得close
dtLong.close();

分布式DeQueue

支持尾部push,头部pop,很容易就可以基于整个Queue实现一个简单的分布式队列(生产者消费者模式)

DtQueue queue = Dt.newDtQueue("queueName");
queue.push("eeee");
String eeee = queue.pop();
//使用完后记得close
queue.close();

下面是一个简单的生产者消费者实现案例

//消费者
final DefaultDtQueue consumer = new DefaultDtQueue("testName3");
consumer.setClientFactory(clientFactory);
new Thread(() -> {
 while (true) {
 String e = consumer.pop();
 sleep(1);
 System.out.println(e);
 }
}).start();
//生产者
final DefaultDtQueue provider = new DefaultDtQueue("testName3");
provider.setClientFactory(clientFactory);
new Thread(() -> {
 while (true) {
 provider.push("来一个时间戳:" + System.currentTimeMillis());
 sleep(3);
 }
}).start();

分布式DtSemaphore(信号量)

JDK自带的信号量大家都熟悉吧,整个是分布式的信号量,可以很方便的基于整个组件来做分布式控资源访问。 里面使用了Lua实现,绝对高校可靠。

DtSemaphore semaphore = Dt.newDtSemaphore("semaphoreName", 3);//这里限制同时只能访问3个资源
String sId1 = semaphore.acquire();
String sId2 = semaphore.acquire();
String sId3 = semaphore.acquire();
String sId4 = semaphore.acquire();//第四个就返回null表示拿不到信号量
semaphore.release(sId1);
String sId5 = semaphore.acquire();//因为上面释放了一个信号量,所以这里又可以拿到了
//这里注意,为了防止系统拿到信号量当机后无法释放信号量,每个背获取的信号量都有默认30S的超时时间
//如果过了30S你还没有释放,那么这个信号量就会默认背释放,如果要自己设定这个超时时间,你可以这样新建
//这里被设置成了60S,注意单位是:秒
DtSemaphore semaphore = Dt.newDtSemaphore("semaphoreName", 3, 60);
//使用完后记得close
semaphore.close();

分布式DtSortedSet(可排序Set)

首先他是一个Set集合,且他支持设置score进行排序

DtSortedSet set = Dt.newDtSortedSet("setName");
set.add(1, "a1");
set.add(20, "a20");
set.add(99, "a99");
//获取指定值的排位
long rank = set.rank("a20");//这里rank==1
//可以根据score的范围进行批量删除
set.removeByScoreRange(1, 98);//这里值"a1"和"a20"会被删除 
//使用完后记得close
set.close();

更多使用教程: https://gitee.com/xuan698400/distributed-tool/wikis/

相关推荐

正点原子开拓者FPGA开发板资料连载第四十章 SD卡图片显示实验

1)实验平台:正点原子开拓者FPGA开发板2)摘自《开拓者FPGA开发指南》关注官方微信号公众号,获取更多资料:正点原子3)全套实验源码+手册+视频下载地址:http://www.openedv.c...

东芝存储改名为铠侠了,铠侠microSD卡128GB全网首测

作为一个数码爱好者,平时总爱把玩各种科技数码产品,最近又迷上了口袋云台相机,大疆OsmoPocket、飞宇口袋相机、SnoppaVmate口袋相机什么的,不过这类产品由于设计的机身体积很小(毕竟为...

SD存储卡卡面上奇奇怪怪的图标,你知道几个?

现在对高像素照片、连拍、4K甚至8K的需求越来越多,对存储卡的传输速度、容量等,要求也越来越多了。但是,看到SD存储卡卡面上奇奇怪怪的图标,让人非常迷惑。这篇文章让你简单认识这些图标和奇奇怪怪的数字。...

拍摄4K视频上选!铠侠 EXCERIA PLUS microSD卡

大家好,我是波导终结者。今天跟大家分享的是铠侠的EXCERIAPLUS极至光速microSDXCUHS-1存储卡,名字有点长,但是不用担心,我会帮大家梳理好存储卡的选购建议。有不少刚入门的朋友...

高速稳定,一卡多用:铠侠极至光速microSD存储卡评测

Hello,大家好,我是小胖子。半个月前收到了KIOXIA铠侠寄来的一张256GB的TF卡,用了大半个月,让我们看看这款产品表现如何吧。其实很多人并不太了解铠侠,问我铠侠是什么品牌,好不好。其实,东芝...

读速205MB/s、V30规格,雷克沙SILVER系列存储卡再添新成员

IT之家6月19日消息,雷克沙今日推出3款SILVER系列SD/microSD存储卡新品,支持4K60fps录像。据介绍,该系列存储卡均符合V30标准,其中micr...

相机、无人机拍视频,选择SD存储卡有什么需要知道的?

本文章不涉及产品推荐导购行为,致力于给到小白带来基础知识。相机一般使用SD卡,无人机一般使用microSD卡(也叫TF卡),使用的标准和图标标识是一样的。相机、无人机拍视频,选择SD存储卡有什么需要知...

PNY推出适用Switch 2的microSD Express卡,读取速度高达890MB/s

任天堂Switch2开始预订,其比前代产品变得更加昂贵,各种配件的价格都高于预期,这也包括转向microSDExpress存储。此时,PNY推出了新款microSDExpress闪存卡。新款mi...

SD卡迎来25周年:全球售出120亿张,容量翻50万倍

IT之家5月21日消息,科技媒体betanews今天(5月21日)发布博文,报道称SD卡迎来了25周年的生日。自2000年首款SD存储卡问世以来,已走过25个年头...

微单相机买一款什么样的SD卡才够用?写入速度更为关键

最近,评价君朋友发现自己的卡拍摄视频时候总断流,于是感觉写入速度应该是不够的,打算换卡,评价君正好跟他说道说道。目前的SD存储卡,很多只标注读取速度,比如95MB/s,80MB/s等等,而没有写写入速...

金士顿Canvas Go!Plus 系列存储卡评测

前言2020年,金士顿推出了CanvasGo!Plus系列存储卡,凭借其优秀的读写速度和稳定性获得了广大用户的认可。时隔5年,金士顿推出了其全新升级产品:SDG4/SDCG4,可选容量覆盖64GB...

TF卡速度等级|MK米客方德(tf卡速度等级图)

TF卡(TransFlash卡,又称MicroSD卡)是一种常见的便携式存储媒体,广泛用于智能手机、相机、平板电脑等设备中。TF卡的性能通常由速度等级来衡量,这些等级反映了TF卡的数据传输速度。拓优星...

关于SD卡,看这张表就够了(sd卡的作用)

这里是溢图科技(原“相机笔记”)。这两天有不少存储产品促销,随之而来的就是关于SD卡的一些提问。文章以前已经写过很多了,这里主要给大家看一张表格:上面就是SD卡协会官方制作的“族谱”,明确给出了不同版...

轻量化储存的首选——凯侠极致光速256G microSD存储卡实测

对于摄影师而言,我们经常会接触到相关存储设备,像照片拍摄中给相机安装的SD卡,视频录制中外录高规格画面的SSD等,都属于专业的存储介质,被应用于商业拍摄、电影级别拍摄之中。而针对生活中我们日常用于拍摄...

首发1569元,读取速度可达250MB/s,闪迪推出最新2TB至尊超极速存储卡

近日,闪迪(SanDisk)正式发布了其最新的2TB至尊超极速microSDXCUHS-I存储卡。据悉,这款存储卡的读取速度可达250MB/s,写入速度则达到150MB/s。这意味着用户在处理高分辨...

取消回复欢迎 发表评论: