Java 开发 / 中间件

Redis中通过scan命令获取key、value【Java实现】

中间件

基于 Redisson 实现切面分布式锁(升级版)

中间件

基于 Redis 实现分布式锁

中间件

基于 Redisson 实现切面分布式锁

中间件

RabbitMQ 发消息报错 Listener not registered

基于 Redisson 实现切面分布式锁(升级版)
11月23日 · 2020年

基于 Redisson 实现切面分布式锁(升级版)

263 0
之前使用过Redis作为分布式锁,但是因为本身特性的局限性,存在很多隐患,故将Redis替换成了Redisson。(由于公司直接买的腾讯云的Redis,对于开发者来说,它是单实例的,屏蔽了内部的底层实现,故本文暂且只考虑Redis是单实例的场景,如果想要了解在多实例情况下,基于Redis/Redisson作为分布式锁,可以自行搜索RedLock的具体实现,也很简单)。...
Elasticsearch 常规概念及底层原理
11月1日 · 2020年

Elasticsearch 常规概念及底层原理

312 0
一、ES 分布式架构原理 ES设计的理念是分布式搜索引擎,底层实现基于Lucene,核心思想是在多台机器上启动多个ES进程实例,组成一个ES集群。 概念描述 接近实时:ES是一个接近实时的搜索平台,这就意味着,从存入一个文档直到文档能够被搜索到有一个轻微的延迟 集群(cluster):一个集群由多个节点(服务器)组成,所有节点一起保存全部数据,每一个集群有一个唯一的名称标识...
Sharding-JDBC 支持动态扩容及刷新 ActualDataNodes
9月7日 · 2020年

Sharding-JDBC 支持动态扩容及刷新 ActualDataNodes

932 0
需求 目前,有一个基于自增message_id的范围分片表(message_id_mapping),如何动态地创建分表并刷新分表的配置(ActualDataNodes)?开发 范围分片配置 # message_id_mapping表的路由策略spring.shardingsphere.sharding.tables.message_id_mapping.actual-data-nodes = shardingds.message_id_mappingspring.shardingsphere.sharding.tables.message_id_mapping.table-strategy.standard.sharding-column = message_idspring.shardingsphere.sharding.tables.message_id_mapping.table-strategy.standard.precise-algorithm-class-name = com.xxx.yyy.persistence.config.MessageIdShardingAlgorithmspring.shardingsphere.sharding.tables.message_id_mapping.table-strategy.standard.range-algorithm-class-name = com.xxx.yyy.persistence.config.MessageIdShardingAlgorithm...
8月23日 · 2020年

基于 Redisson 实现切面分布式锁

502 0
之前项目中使用的是`基于 Redis 实现分布式锁`中的基于 redis 1.5.* 版本使用 setIfAbsent实现的分布式锁,为了使用简单,也是通过AOP切面的方式实现的,但是随着并发量的增长,难免会产生一些担心:...
8月23日 · 2020年

基于 SpringBoot + (ShardingSphere)Sharding-JDBC + Flyway + JOOQ + Gradle 进行水平分表的问题汇总

620 0
Sharding-JDBC 的性能问题ShardingSphere 与 JOOQ 的版本兼容问题多数据源与 Flyway 的结合问题Sharding-JDBC 与 JOOQ 的兼容问题多数据源下的 DSLContext 配置多数据源下的事务问题数据迁移问题......
3月17日 · 2020年

Redis中通过scan命令获取key、value【Java实现】

2556 5
需求:通过 Job 每秒去 Redis 中获取 Key 前缀为:“message:xxx:yyy:id: ”的所有 Value,Value以字符串类型存储,键值对存储量级:几百万。 Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的 Key 的信息,有两种方式:1、通过 keys 命令,简单粗暴,由于Redis单线程这一特性,keys 命令以阻塞的方式执行。keys 命令通过遍历查找,时间复杂度是 O(n)。Redis 库中 key 的数量越多,查找实现的代价越大,产生阻塞的时间越长。2、通过 scan 命令,以非阻塞的方式实现 key 值的查找,绝大多数情况下是可以替代 keys 命令的,可选性更强。...
12月7日 · 2019年

基于 Redis 实现分布式锁

1195 0
分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。由于线上出现了并发问题,导致出现了很多脏数据,分布式环境下,考虑到乐观锁无法解决,也只能请教于分布式锁了。实现分布式锁的方式有:数据库乐观锁、基于 Redis 的分布式锁.....
11月29日 · 2019年

RabbitMQ 发消息报错 Listener not registered

25874 1
在完成 MQ 的发送方代码后,通过单元测试(mock 方式)发现发送方代码是没有问题的,但是通过 JOB 发送消息就一直提示“Listener not registered..”,又通过 http 直接调用接口来发送消息,也是提示“Listener not registered..”,然后各种检查配置、各种谷歌都无济于事,最后只能 debug 源码了。...
11月29日 · 2019年

RabbitMQ 发送端和消费端的总体设计

880 0
使用场景:系统解耦、异步、多服务订阅消息、消息可靠性、消息时序性 发送端:.....
11月29日 · 2019年

ZooKeeper 简单概括

761 0
Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。更新是全序的。使用ZooKeeper的公司包括Rackspace、雅虎和eBay,以及类似于象Solr这样的开源企业级搜索系统。...