12 2020 档案

摘要:事务命令 Redis通过MULTI、EXEC、WATCH等命令来实现事务 MULTI //事务开始 SET "name" "test" //do something ... EXEC //提交事务 WATCH "name" //WATCH监视 DISCARD //丢弃事务 事务执行流程 事务命令队列 阅读全文
posted @ 2020-12-31 10:06 曹自标 阅读(97) 评论(0) 推荐(0) 编辑
摘要:redis持久化配置 redis.conf // RDB配置 save 900 1 save 300 10 save 60 10000 // AOF配置 appendonly yes //AOF三种同步方式 # appendfsync always appendfsync everysec # ap 阅读全文
posted @ 2020-12-31 09:24 曹自标 阅读(182) 评论(0) 推荐(0) 编辑
摘要:基于数据库 基于数据库(MySQL)的方案,一般分为3类:基于表记录、乐观锁和悲观锁 基于表记录 用表主键或表字段加唯一性索引便可实现,如下; CREATE TABLE `database_lock` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `resource` 阅读全文
posted @ 2020-12-30 14:07 曹自标 阅读(762) 评论(1) 推荐(1) 编辑
摘要:查询语句优化 选取最适用的字段属性。设置合适表中字段的宽度,尽量把字段设置为NOTNULL,这样在将来执行查询的时候,数据库不用去比较NULL值。对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起 阅读全文
posted @ 2020-12-29 13:46 曹自标 阅读(119) 评论(0) 推荐(0) 编辑
摘要:按锁思想分类 悲观锁 优点:适合在写多读少的并发环境中使用,虽然无法维持非常高的性能,但是在乐观锁无法提更好的性能前提下,可以做到数据的安全性 缺点:加锁会增加系统开销,虽然能保证数据的安全,但数据处理吞吐量低,不适合在读书写少的场合下使用 乐观锁 优点:在读多写少的并发场景下,可以避免数据库加锁的 阅读全文
posted @ 2020-12-26 15:42 曹自标 阅读(182) 评论(0) 推荐(0) 编辑
摘要:事务的实现 redo log保证事务的持久性,undo log用来帮助事务回滚及MVCC的功能。 InnoDB存储引擎体系结构 redo log Write Ahead Log策略 事务提交时,先写重做日志再修改页;当由于发生宕机而导致数据丢失时,就可以通过重做日志来完成数据的恢复。 InnoDB首 阅读全文
posted @ 2020-12-25 23:33 曹自标 阅读(1620) 评论(0) 推荐(1) 编辑
摘要:数据结构与对象 SDS SDS(simple dynamic string): 简单动态字符串 SDS定义: SDS与C字符串区别: C字符串并不记录自身的长度信息,SDS有len属性。 C字符串容易缓冲区溢出,SDS不会,SDS会先检查空间是否满足需要,不够扩展空间 SDS字符串可以减少修改字符串 阅读全文
posted @ 2020-12-24 22:52 曹自标 阅读(91) 评论(0) 推荐(0) 编辑
摘要:索引 查找一条数据的过程 先看下InnoDB的逻辑存储结构: 表空间:可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。默认有个共享表空间ibdata1。如果启用innodb_file_per_table参数,需要注意每张表的表空间内存放的只是数据、索引和插入缓冲Bitma 阅读全文
posted @ 2020-12-24 15:14 曹自标 阅读(505) 评论(0) 推荐(1) 编辑
摘要:MySQL体系结构 连接池组件 管理服务和工具组件 SQL接口组件 查询分析器组件 缓冲组件 插件式存储引擎 物理文件 各存储引擎对比 InnoDB存储引擎 InnoDB存储引擎体系架构 InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责: 维护所有进程/线程需要访问的多 阅读全文
posted @ 2020-12-23 14:17 曹自标 阅读(179) 评论(0) 推荐(0) 编辑
摘要:ThreadPoolExecutor的参数解释 public class ThreadPoolExecutor extends AbstractExecutorService { public ThreadPoolExecutor(int corePoolSize, int maximumPoolS 阅读全文
posted @ 2020-12-21 17:00 曹自标 阅读(94) 评论(0) 推荐(0) 编辑
摘要:Java内存结构图 说明: 每个线程都会有一个局部变量 threadLocals,存放在各自线程栈帧局部变量表中,指向堆中的ThreadLocalMap实例对象 不同的线程在堆中对应不同的ThreadLocalMap实例对象 ThreadLocalMap的key是ThreadLocal实例对象 每个 阅读全文
posted @ 2020-12-21 14:16 曹自标 阅读(144) 评论(0) 推荐(0) 编辑
摘要:Semaphore Semaphore最主要功能特点,是控制同时访问特定资源的线程数量。 其源码实现就是在初始化时传入permits参数,紧接着调用AQS同步器setState方法,将内存中state值设为permits传入的参数值; 而当要同时访问的线程数, 大于state的值,即remainin 阅读全文
posted @ 2020-12-18 15:16 曹自标 阅读(101) 评论(0) 推荐(0) 编辑
摘要:ReentrantReadWriterLock 读写锁类图(截图来源https://blog.csdn.net/wangbo199308/article/details/108688148) state的设计 读写锁将变量state切分成两个部分,高16位表示读,低16位表示写 源码中将4字节(32 阅读全文
posted @ 2020-12-18 13:11 曹自标 阅读(322) 评论(0) 推荐(0) 编辑
摘要:synchronized synchronized的作用范围 public class SynchronizedTest { // 实例方法,方法访问标志ACC_SYNCHRONIZED,锁对象是对象实例 public synchronized void test1(){} // 静态方法,方法访问 阅读全文
posted @ 2020-12-17 22:08 曹自标 阅读(299) 评论(0) 推荐(1) 编辑
摘要:锁分类 对象头 对象头内存布局 使用jol查看对象头内存布局(查看锁标志时,注意大端存储和小端存储) 引入依赖 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.1 阅读全文
posted @ 2020-12-16 22:21 曹自标 阅读(337) 评论(0) 推荐(0) 编辑
摘要:JMM (Java内存模型) Java线程的实现 实现线程主要有三种方式,Java线程从JDK1.3后采用第一种方式实现: 使用内核线程实现(1:1实现) 使用用户线程实现(1:N实现) 使用用户线程加轻量级进程混合实现(N:M实现) KTL: 内核线程 LWP:轻量级进程 UT:用户线程 线程之间 阅读全文
posted @ 2020-12-16 17:20 曹自标 阅读(1164) 评论(0) 推荐(2) 编辑
摘要:Java堆溢出 /** * -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails */ public class HeapOOM { static class OOMObject{} public static voi 阅读全文
posted @ 2020-12-02 20:27 曹自标 阅读(108) 评论(0) 推荐(0) 编辑
摘要:实验条件 环境:JDK1.8 工具:Jclasslib Class文件格式 General Information 写个测试代码,打开Jclasslib public class ClassTest extends SuperClass implements Interface1 { String 阅读全文
posted @ 2020-12-02 14:26 曹自标 阅读(162) 评论(0) 推荐(0) 编辑