Java 线程的 5 种状态
线程状态图:线程共包括以下 5 种状态:1. 新建状态(New): 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU
分布式锁
概念:在分布式系统中,多个服务需要访问共享资源,实现多个进程访问共享资源,锁需要放在公共存储(Redis,memcache,数据库)以实现多个进程并发访问同一个临界资源,同一时刻只有一个进程可访问共享资源,确保数据的一致性。redis分布式锁2.1 分布式锁的实现逻辑基本逻辑:所有的客户端同一时间都去一个地方“占坑”,如果当前客户端占到了坑,就执行业务逻辑,如果没有占到就必须等待,直到其他的客户端
分布式锁中使用lua脚本,为什么lua脚本是原子性的?
Redis 的 Lua 脚本保证原子性的原理在于,Redis 在执行 Lua 脚本时,会将其作为一个整体来执行,直到脚本执行完毕之前,不会执行其他命令。以下是 Redis 保证 Lua 脚本原子性的几个关键点:单线程执行:Redis 是单线程模型,这意味着同一时间只处理一个请求。当执行 Lua 脚本时,Redis 会将整个脚本序列化,确保在执行脚本的过程中不会有其他命令插入。脚本作为一个整体:当
redis缓存雪崩、穿透、击穿概念及解决办法
https://www.cnblogs.com/yoishion/p/10791501.html
final,volatile等关键字相关
final:用于变量声明,表示变量不可变。用于类,表示类不能被继承。用于方法,表示方法不能被重写。volatile: 关键字用于表示可以被多个线程异步修改的成员变量。volatile 的目标用途是为了确保所有线程所看到的指定变量的值都是相同的。Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile
redis的高并发和高可用方案
单机版的redis支持上万到几万的QPS不等。主要根据你的业务操作的复杂性,redis提供了很多复杂的操作,lua脚本.redis高并发:主从架构,一主多从,读写分离。一般来说,很多项目其实就足够了,单主用来写入数据,单机几万QPS,多从用来查询数据,多个从实例可以提供每秒10万的QPS。redis高并发的同时,还需要容纳大量的数据:一主多从,每个实例都容纳了完整的数据,比如redis主就10G的
高并发处理方案总结
处理高并发的主要方案可以从以下入手。1:应用拆分,将一个应用拆分为多个子应用,用dubbo来搞。然后每个系统连一个数据库,这样把一个库的压力分散到多个库。2:缓存,大部分的高并发场景,都是读多写少,那你完全可以在数据库和缓存里都写一份,然后读的时候大量走缓存不就得了。毕竟人家redis轻轻松松单机几万的并发啊。没问题的。所以你可以考的虑考虑你的项目里,那些承载主要请求读场景,怎么用缓存来抗高并发。
queryWapper开发使用笔记
Mybatis-plus动态条件查询QueryWrapper的函数用法
RocketMQ和RabbitMQ对比
RocketMQ和RabbitMQ是两个流行的消息队列系统,它们各自有着不同的特点和适用场景。RocketMQ和RabbitMQ的区别:架构设计:RocketMQ是基于主题(Topic)的发布/订阅模式,而RabbitMQ则是基于队列(Queue)的消息代理系统。语言支持:RocketMQ主要使用Java开发,而RabbitMQ则使用Erlang语言开发。性能:RocketMQ在性能方面更强,具备