摘要:
概述 多线程编程的三个问题:可见性、有序性及原子性。volatile关键字: 保证多线程环境下的可见性通过防止重排序解决有序性对volatile变量的单次读/写操作可保证原子性,如long和double类型变量,但不能保证i++这种操作的原子性,因i++是读、写两次操作 volatile变量可以用于 阅读全文
摘要:
需求背景 Redis是内存数据库,数据都是存储在内存中,为避免进程意外退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。此外,为了灾备,可将持久化文件拷贝到一个远程位置。 Redis支持四种持久化方式: 阅读全文
摘要:
概述 分离,又隔离,目地是将系统或者资源分隔开。 系统隔离的目的:在系统发生故障时,限定传播和影响范围,不至于出现雪崩效应,保证其他服务的可用性。 资源隔离,通过隔离来减少资源竞争,保障服务间不相关影响,提高性能等。 技术 常见的分离(隔离)技术包括: 读写分离 常见于数据库和缓存系统。 对于数据库 阅读全文
摘要:
概述 通常情况下,一个类的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改。 采用空间换时间,用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突。数据都被封 阅读全文
摘要:
概述 想要知道线程的执行结果,除了FutureTask和CompletableFuture之外,CompletionService是另一个不错的选择。 CompletionService是一个Java8新增的泛型接口,其实现类ExecutorCompletionService,用于主线程提交多个任务 阅读全文
摘要:
概述 MySQL中至少有7种日志文件: 重做日志(redo log)回滚日志(undo log)二进制日志(binlog)错误日志(errorlog)慢查询日志(slow query log)一般查询日志(general log)中继日志(relay log)。 MySQL Server Log有4 阅读全文
摘要:
引言 作为高可用的解决方案其一,负载均衡具备极度的重要性。 定义 负载均衡,Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上, 阅读全文
摘要:
概述 超时:在HTTP请求中设置超时时间,超时后就断开连接,防止服务不可用导致请求一直阻塞,从而避免服务资源的长时间占用。 重试:一般使用在对下层服务强依赖的场景。利用重试来解决网络异常带来的请求失败的情况,超时次数不应该太多,超时时间也比较关键。通过设置请求时间和记录请求次数来判断是否需要重试即可 阅读全文
摘要:
pipeline 综述 流水线,亦称管线,现代计算机处理器中必不可少的部分,是指将计算机指令处理过程拆分为多个步骤,并通过多个硬件处理单元并行执行来加快指令执行速度。——from 流水线 Wikipedia 在类Unix等操作系统中,管道(Pipeline)是一系列将标准输入输出链接起来的进程,其中 阅读全文
摘要:
概述 Spring Expression Language,SpEL,类似于Struts2x中使用的OGNL表达式语言,及JSP的EL,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等。表达式语言给静态Java语言增加动态功能。SpEL是单独模块,只依赖于core模块,可单独使用,依赖如下, 阅读全文