- 博客(819)
- 资源 (14)
- 收藏
- 关注
原创 Zookeeper 分布式锁案例
Zookeeper 是一个开源的分布式协调服务,可以用于维护分布式系统中的一致性、顺序性和命名等。其中,Zookeeper 的分布式锁机制可以用于实现分布式系统中的互斥访问,确保在多个节点上对共享资源进行同步访问。Zookeeper 分布式锁的实现原理是基于 Zookeeper 的临时有序节点和 Watcher 机制。当一个节点需要获取锁时,它会向 Zookeeper 创建一个临时有序节点,并通过 Watcher 机制监听该节点的子节点。
2023-07-13 22:29:05 1283
原创 k8s 2003面试题(1):k8s有哪些特性?
对于应用所依赖的一些敏感数据,如用户名和密码、令牌、密钥等信息,Kubernetes专门提供了Secret对象以实现依赖解耦,既便利了应用的快速开发和交付,又提供了一定程度上的安全保障。此外,Kubernetes还通过iptables或ipvs内置了负载均衡机制。存储编排:Kubernetes支持Pod对象按需自动挂载不同类型存储系统,包括节点本地存储、公有云服务商的云存储(如AWS和GCP等),以及网络存储系统(如NFS、iSCSI、Gluster、Ceph、Cinder和Flocker等)。
2023-07-13 11:14:04 899
原创 秒杀要关注哪些问题,以及如何解决
具体地,我们使用了tryAcquire()方法获取信号量,如果获取成功,说明当前没有其他用户访问系统,可以开始秒杀活动。在秒杀活动中,我们首先更新商品库存为0,表示可以开始秒杀,然后生成订单并保存到数据库中,最后释放信号量,允许其他用户访问系统。如果库存足够,就更新商品库存为0,表示已经秒杀成功,并生成订单并保存到数据库中。如果验证成功,就更新商品库存为0,表示可以开始秒杀,并生成订单并保存到数据库中。如果库存足够,就更新商品库存为0,表示已经秒杀成功,并生成订单并保存到数据库中。
2023-07-05 09:49:38 1578
原创 Zookeeper的选举机制
Zookeeper的选举机制是它的一项核心功能,用于在分布式系统中选择一个领导者(leader)来处理各种请求和操作。服务器ID(Server ID):每个Zookeeper服务器在启动时都会被分配一个唯一的服务器ID(SID)。这个ID用于标识服务器在集群中的位置和角色。选举状态(Election State):在选举过程中,Zookeeper服务器有四种状态:LOOKING(寻找状态)、FOLLOWING(跟随状态)、OBSERVING(观察状态)和LEADING(领导状态)。
2023-07-01 22:53:08 3135
原创 Springboot 定时任务,分布式下幂等性如何解决
在分布式环境下,定时任务的幂等性问题需要考虑多个节点之间的数据一致性和事务处理。一种解决方法是使用分布式锁来保证同一时间只有一个节点能够执行该任务。具体实现可以使用Redis或Zookeeper等分布式协调工具提供的分布式锁功能。另一种解决方法是使用消息队列来保证任务的幂等性。当一个节点执行任务时,先将任务发送到消息队列中,然后等待其他节点确认任务已经执行完毕后再进行后续操作。如果有节点出现故障或者网络异常导致任务未能成功执行,则可以重新发送任务并等待其他节点确认。
2023-06-30 10:56:55 1010
原创 Redission的RSemaphore信号量有什么作用?
RSemaphore是Redisson基于Redis实现的分布式信号量,用于限制同时访问共享区域的线程数量。与Java的Semaphore相似,RSemaphore也有一个acquire()方法用于获取资源,但在获取资源的顺序上是不可预测的,因此它是一种非公平锁。
2023-06-30 10:19:17 662
原创 爬虫中的网页去重最适合的算法---simhash算法
Simhash算法是一种用于字符串相似度比较的算法,它可以用于爬虫中的网页去重。Simhash算法的基本思想是将字符串分解成一些基本的特征,如字符、单词、n-gram等,然后对每个特征计算一个hash值,并将这些hash值合并成一个整体hash值。对于两个字符串,如果它们的整体hash值相似,那么它们的内容也就相似。需要注意的是,Simhash算法也存在一些问题。例如,对于一些相似的字符串,它们的整体hash值可能相差很大,这就会影响去重的准确性。
2023-06-29 16:52:36 1244
原创 Springboot 如何自动上传秒杀商品数据到Redis中上架商品
如下图秒杀活动:在这个秒杀活动中,需要自动上架一定时间段的商品,我们如何实现自动上传呢?我们可以通过定时任务来实现的。在秒杀活动开始前,需要将商品信息存储到数据库中,并设置好库存和价格等信息。然后,可以通过定时任务的方式,每天定时从数据库中读取商品信息,并将其上传到秒杀页面上。这样,就可以实现自动上传商品的功能了。
2023-06-29 15:20:20 833 1
原创 支付宝支付收单时存在哪些问题,解决方法有哪些?
1、设置支付超时时间:String timeout = aliPayConfig.getTimeout();如果此时订单未付款,且关闭了,调用 payService.closePay(order)手动关闭支付宝支付。2.、使用相对时间"“timeout_express”:“” + timeout + “”,"1、订单在支付页,不支付,一直刷新,订单过期了才支付,订单状态改为已支付了,但是库。订单解锁完成,正在解锁库存的时候,异步通知才到。3、网络阻塞问题,订单支付成功的异步通知一直不到达。
2023-06-29 10:29:43 1053
原创 Zookeeper的应用场景
我们使用getChildren方法来获取队列中的第一个消息,并使用getData方法来获取消息的内容。在每个循环迭代中,我们使用dequeue方法来获取队列中的第一个消息,并打印出消息的内容。当队列为空时,我们跳出循环并结束程序。分布式队列通常采用先进先出(FIFO)的方式实现,即每个消息都会被依次加入队列,并按照加入的顺序被处理。Zookeeper分布式队列是一种基于Znode的数据结构实现的分布式队列,它可以为分布式系统中的每个组件提供唯一的队列管理,从而实现分布式系统中的消息传递和一致性。
2023-06-28 22:11:29 3443
原创 Zookeeper集群的特点
ZooKeeper 数据模型的结构与 Unix 文件系统很类似,整体上可以看作是一棵树,每个节点称做一个 ZNode。每一个 ZNode 默认能够存储 1MB 的数据,每个ZNode都可以通过其路径唯一标识。Znode可以通过路径进行访问,类似于文件系统中的目录结构。每个节点可以包含子节点,也可以是叶子节点。Zookeeper使用Znode来存储和管理数据,可以用来实现分布式锁、分布式队列、配置管理等功能。
2023-06-28 21:20:00 725
原创 Spring 2023面试题(3)-- @RequestMapping的用法
以上示例中,@GetMapping、@PostMapping、@PutMapping 和 @DeleteMapping 是 @RequestMapping 的具体子注解,分别用于处理 GET、POST、PUT 和 DELETE 请求。它们可以组合使用,如 @GetMapping(“/{id}”),表示处理 GET 请求,路径为 /users/{id}。除了处理 HTTP 请求外,@RequestMapping 还可以用于处理 HTTP 请求参数和返回结果。在类上使用时,它指定了处理请求的基本路径。
2023-06-28 17:05:54 840
原创 Spring 2023面试题(2)--Spring mvc 运行流程
【代码】Spring 2023面试题(2)--Spring mvc 运行流程。
2023-06-28 15:41:22 814
原创 Spring 2023面试题(1)--事务的隔离级别
在 Spring 中,可以通过在事务管理器中设置隔离级别来控制事务的隔离程度。其中,default_隔离级别可以是上述任何一个隔离级别。
2023-06-28 14:55:44 992
原创 Redis 缓存数据库双写不一致怎么处理?
Redis 缓存数据库可能会出现双写不一致的情况,这是因为在进行缓存更新时,同时有多个线程或进程对同一个缓存键进行读写操作,导致了数据的不一致性。具体来说,假设有两个线程 A 和 B 都要对同一个缓存键进行写操作,此时缓存键的值是过期了的,即需要从数据库中读取最新的值,并进行更新。线程 A 开始执行,它首先要从数据库中读取最新的值,然后将其更新到缓存中。在线程 A 执行的过程中,线程 B 也开始了执行,它也要对同一个缓存键进行写操作。
2023-06-27 20:57:59 1547
原创 使用RabbitMQ死信队列关闭未支付的订单
RabbitMQ死信队列(Dead-Letter Exchange,简称DLX)是一种特殊类型的交换机,用于处理在队列中无法被消费的消息。当消息无法被消费时,它会被转发到死信队列中,以便进一步处理。消息无法被消费者处理:例如,如果消费者崩溃或消息的格式不正确,则无法处理消息。此时,消息将被发送到死信队列进行进一步处理。消息的优先级较低:如果消息的优先级较低,则可能无法在队列中得到及时处理。在这种情况下,消息也会被发送到死信队列中,以确保它最终被处理。
2023-06-26 15:06:54 2792
原创 RabbitMQ 2023面试5题(四)
exchange根据指定的路由规则将消息路由到相应的队列中,这个规则可以是基于消息内容的,也可以是基于其他属性的。提供基本的最终一致性实现:RabbitMQ可以帮助实现面向服务的架构(SOA),通过消息队列来通信,从而实现不同服务之间的解耦,并确保最终一致性。实现应用程序之间的异步和解耦:通过使用消息队列,应用程序可以通过读写消息来实现通信,无需直接调用彼此,从而减少了对彼此的直接依赖。实现RPC调用:通过使用消息队列,可以在分布式系统中实现RPC调用,从而实现不同服务之间的通信。
2023-06-26 14:04:12 901
原创 RabbitMQ 2023面试5题(三)
RabbitListener 标注在方法上,直接监听指定的队列,此时接收的参数需要与发送市类型一致;而 @RabbitHandler 标注在类上,表示当有收到消息的时候,就交给该类中的方法处理。另外,在实际开发过程中,您可能需要参考具体的编程语言和消息队列客户端库的文档,以了解如何正确地使用 basicNack 和 basicReject 方法。需要注意的是,虽然 RabbitMQ 通过上述方式来保证消息的可靠性,但在一些极端情况下,如网络故障、硬件故障等,仍然可能发生消息丢失的情况。
2023-06-26 10:34:10 1362
原创 RabbitMQ 2023面试5题(二)
Dead Letter Exchange其实就是一种普通的exchange,和创建其他exchange没有两样。只是在某一个设置Dead Letter Exchange的队列中有消息过期了,会自动触发消息的转发,发送到Dead Letter Exchange中去。一个消息被Consumer拒收了,并且reject方法的参数里requeue是false。也就是说不会被再次放在队列里,被其他消费者使用。消息的TTL到了,消息过期了。队列的长度限制满了。排在前面的消息会被丢弃或者扔到死信路由上。
2023-06-25 16:49:57 661
原创 使用Rabbitmq死信队列解锁库存
订单系统需要通知库存系统,如果想要解锁库存,可以通过stock.locked路由键发送一个消息给交换机stock-event-exchange,消息内容包括哪个订单、哪些商品、多少库存。订单取消和订单回滚。下订单成功,订单过期没有支付被系统自动取消、被用户手动取消。下订单成功,库存锁定成功,接下来的业务调用失败,导致订单回滚;之前锁定的库存就要自动解锁。库存锁定,sql执行锁定锁定。
2023-06-25 15:46:15 876
原创 RabbitMQ 2023面试5题(一)
例如,可以将用户订阅的消息发送到一个延时队列中,并设置一个延迟时间(例如1小时),然后在延迟时间到达后,将消息从队列中取出并推送给用户。例如,可以将需要定期执行的任务发送到一个延时队列中,并设置一个延迟时间(例如每天),然后在延迟时间到达后,将任务从队列中取出并执行。然后,我们发送了一条消息到这个队列中,接着模拟了一个消费失败的场景,将消息转发到DLX和DLQ中。动态路由:您可以使用延时队列来实现动态路由的功能,将消息发送到延时队列中,并设置一定的路由规则,以实现消息在特定时间后被路由到不同的目标队列中。
2023-06-25 11:19:31 1383
原创 Redis 2023面试5题(七)
Redis缓存穿透是指查询一个不存在的数据,由于Redis中没有缓存数据,所以每次请求都会直接查询数据库,导致缓存失效,严重影响系统性能和稳定性。缓存空对象:在Redis中缓存一个空对象,当查询一个不存在的数据时,先将空对象从缓存中取出,然后再次查询数据库,如果数据库中也没有该数据,则返回空对象。这样可以避免多次查询数据库,同时也可以避免缓存穿透。static {// 连接Redis// 查询数据库// .. .// 将空对象存入缓存} }
2023-06-24 22:32:26 1321
原创 Redis 2023面试5题(六)
因为新master的选举需要大于半数的集群master节点同意才能选举成功,奇数个master节点可以在满足选举该条件的基础上节省一个节点,比如三个master节点和四个master节点的集群相比,大家如果都挂了一个master节点都能洗举新master节点,如果都挂了两个master节点都没法选举新master节点了,所以奇数的master节点更多的是。具体来说,当一个线程获取了分布式锁并执行业务逻辑时,如果主Redis实例挂掉了,那么在主从切换过程中,从Redis实例上就不会有该线程持有的锁。
2023-06-24 10:24:34 1304
原创 Redis 2023面试5题(五)
需要注意的是,在备份数据时,需要同时备份Redis的配置文件和日志文件等,以便在恢复时可以完全恢复Redis服务器的状态。Redis主从复制风暴是指当Redis主从复制出现故障时,大量的从节点会同时进行主节点复制操作,导致网络带宽和CPU资源被大量占用,引起系统性能下降,甚至导致系统崩溃。需要注意的是,网络抖动的原因可能不是单一的,而是多种因素共同作用的结果。8. 对于大量的从节点复制操作,可以使用Redis Sentinel或Cluster的自动化分片功能,将数据分散到多个节点上,避免单个节点压力过大。
2023-06-23 22:34:13 1581
原创 Redis 2023面试5题(四)
注意,虽然bgsave命令是异步的,但在快照创建期间,新的数据写操作可能会被延迟,这取决于你的硬件资源和当时的Redis负载情况。通过同时启用RDB和AOF持久化,Redis可以根据你的需求自动选择使用哪种持久化方式,或者将两种持久化方式结合使用。Redis的RDB持久化是通过快照(Snapshot)的方式来保存数据,即定时将内存中的数据写入到硬盘中,以防止断电等情况下数据的丢失。AOF(Append Only File)持久化是 Redis 的一种持久化方式,它通过记录所有收到的写命令来保存数据。
2023-06-22 13:37:48 1093
原创 Redis 2023面试5题(三)
在混合持久化模式下,Redis 会根据配置文件中的规则,将一些常用的数据保存到 RDB 快照文件中,其他的数据则记录到 AOF 文件中。当主节点恢复后,从节点晋升为主节点,此时该节点的数据可能比其他从节点的数据更旧,导致其他从节点在同步数据时可能会出现缓存雪崩的情况。slave 自己是不会清理过期 key,当一个 key 要过期时,master 会先清理删除它,之后 master 向 slave 发送一个 DEL 命令,告知 slave 也删除这个 key,以此达到主从库的数据一致性。
2023-06-21 22:35:36 900
原创 Redis 2023面试5题(二)
如果一个key没有被设置过期时间,但是已经很久没有被访问了,那么Redis会将其标记为“过期”,并在下一次垃圾回收时将其删除。需要注意的是,如果你设置了太多的键,而且这些键的过期时间很短,那么 Redis 的内存占用可能会迅速增加,从而导致性能下降或者宕机。总的来说,删除Key的操作在Redis中是一个相对较快的操作,不会阻塞其他操作。但是,在某些情况下,它可能会对其他操作产生影响,因此需要仔细考虑在使用Redis时如何处理删除Key的操作。然而,在某些情况下,删除Key可能会阻塞Redis。
2023-06-20 22:38:38 1380
原创 面试题:分布式事务有哪些方案及运用场景
分布式事务是指涉及多个不同资源或数据库的事务处理,这些资源或数据库分布在不同的网络节点上,通过协调器将多个事务组合成一个分布式事务。分布式事务的目的是确保多个事务操作要么全部成功,要么全部失败,保持事务的一致性和完整性。在分布式事务中,涉及到的节点可能位于不同的计算机、不同的进程或者不同的数据库系统中。事务管理器。本地资源管理器。事务管理器:作为一个全局的调度者,负责对各个本地资源管理器统一号令提交或者回滚。二阶提交协议(2PC)和三阶提交协议(3PC)就是根据此协议衍生出来而来。
2023-06-20 11:35:39 550
原创 Redis 2023面试5题(一)
当进行插入或删除操作时,Redis会根据元素的值计算出该元素在跳表中的位置,然后将元素插入到相应的级别中。Redis的底层使用跳表(SkipList)来存储数据,跳表是一种基于链表的数据结构,可以在链表的基础上增加多级索引,从而提高查询效率。需要注意的是,Redis的跳表实现并不是严格按照SkipList的标准算法实现的,而是在SkipList的基础上进行了一些优化和调整,例如使用双向链表代替了单向链表,使用哈希表代替了每个节点都有的游标等。
2023-06-19 22:49:25 1252
原创 Springboot分布式事务
本地事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器位于同一节点相同数据库上。又称为传统事务。它是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单位。例如,银行转账工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。数据库事务必须具备ACID特性,即原子性、一致性、隔离性和持久性。CAP定理,指的是在一个分布式系统中:一致性(Consistency):在分布式系统中的所有数据备份,在同一时刻是一致的。
2023-06-19 14:11:30 4688
原创 Redis 批处理优化
第二种方案:串行slot,简单来说,就是执行前,客户端先计算一下对应的key的slot,一样slot的key就放到一个组里边,不同的,就放到不同的组里边,然后对每个组执行pipeline的批处理,他就能串行执行各个组的命令,这种做法比第一种方法耗时要少,但是缺点呢,相对来说复杂一点,所以这种方案还需要优化一下。第三种方案:并行slot,相较于第二种方案,在分组完成后串行执行,第三种方案,就变成了并行执行各个命令,所以他的耗时就非常短,但是实现呢,也更加复杂。在批处理时,可以使用管道技术来提高效率。
2023-06-18 09:48:20 1985
原创 什么是Redis的BigKey,如何处理BigKey?
Key本身的数据量过大:一个String类型的Key,它的值为5 MB。Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100 MB。
2023-06-15 22:25:55 2935
原创 Redis搭建分片集群
Redis分片集群是用于将Redis的数据分布在多个Redis节点上的分布式系统。通过分片集群,可以将数据分成多个部分,并将每个部分存储在不同的节点上,以便实现Redis的高可用性和高性能。
2023-06-08 11:54:10 3374 1
原创 Redis主从集群与哨兵集群
如果一个哨兵实例出现故障,其他哨兵实例仍然可以监控 Redis 实例的状态,并执行故障转移操作。如果哨兵实例无法与 Redis 实例通信,则哨兵实例会认为该实例已经出现故障,并开始执行故障转移操作。故障转移操作包括将故障实例的故障状态通知其他哨兵实例,并选举出一个新的主节点来接管故障实例的职责。一旦新的主节点被选举出来,所有哨兵实例都会将新的主节点添加到自己的配置中,并停止向故障实例发送 PING 命令。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。
2023-06-06 21:37:29 1404 2
原创 使用Redis的HyperLogLog进行海量数据统计
Redis的HyperLogLog(HyperLogLog)是一种用于估算集合中不重复元素数量的数据结构。它是Redis的一个流行功能,经常用于处理大型数据集的基数估计(即不重复元素的数量)。HyperLogLog的关键思想是使用一段随机二进制码序列的长度来估计输入集合中不重复元素数量的近似值。散列(Hash):将每个元素转换为4字节的哈希值。这是通过将元素的每个比特位都转换为0或1,然后对2的幂进行取模来实现的。这个哈希值用于确定该元素在HyperLogLog中的位置。
2023-06-04 22:06:00 737
原创 Redis GEO功能详细介绍与实战
Redis的Geo功能主要用于存储地理位置信息,并对其进行操作。该功能在Redis 3.2版本新增。geoadd:添加地理位置的坐标;geopos:获取地理位置的坐标;geodist:计算两个位置之间的距离;georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合;georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合;geohash:返回一个或多个位置对象的geohash值。
2023-06-03 21:33:00 3163 1
原创 使用Redis的zset集合实现小程序的滚动分页
其中,ZRangeArgs构造函数中的参数表示从集合的起始位置开始返回文档ID,lastDocId表示只返回大于lastDocId且score值小于当前时间戳的文档ID,86400000L表示一天的毫秒数,表示向前滚动一页。
2023-06-03 11:16:46 1598 1
原创 Java最新版发送阿里短信教程
为什么现在的企业越来越多使用阿里云短信服务,究其原因是阿里云短信服务是一种可靠、高效、安全的短信发送服务,它具有以下优点:高可靠性:阿里云短信服务采用全球领先的短信网关进行短信发送,确保了短信的高可靠性和稳定性。高并发性:阿里云短信服务支持高并发的短信发送,可以满足大规模短信发送的需求。安全性:阿里云短信服务采用了多种安全措施,包括加密传输、防攻击等,保障了短信发送的安全性和隐私性。灵活性:阿里云短信服务提供了多种API接口和SDK,可以方便地集成到各种应用中,同时还支持自定义短信内容和模板。
2023-05-29 16:18:56 1272
原创 什么是Redission可重入锁,其实现原理是什么?
Redission是一个可重入锁,它可以在分布式系统中用于实现互斥锁。这种锁可以允许多个线程同时获取锁,但在任何给定时间只有一个线程可以执行受保护的代码块。Redission锁提供了一种简单的方法来保证在分布式系统中的互斥性,同时支持可重入性。这意味着一个线程可以在获取锁之后再次获取同一个锁,而不需要等待锁释放。Redission锁使用lua脚本来实现加锁和解锁操作。当一个线程想要获取锁时,它会发送一个lua脚本到redis服务器。
2023-05-28 15:39:33 2581
maven工程,可实现对多模块的打包
2023-04-09
nexus-3.2.0-01-win64
2017-11-16
apache-tomcat-7.0.65
2017-10-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人