首页
统计
壁纸
关于我
Search
1
Mysql delete from table 和 truncate table 的区别
863 阅读
2
Spring AOP 术语说明
745 阅读
3
MySQL事务隔离级别
689 阅读
4
Java引用类型:强引用、软引用、弱引用、软引用
621 阅读
5
好冷
83 阅读
随笔
时政
技术
登录
Search
标签搜索
Java
Mysql
Xiaodong
累计撰写
6
篇文章
累计收到
17
条评论
首页
栏目
随笔
时政
技术
页面
统计
壁纸
关于我
搜索到
6
篇与
的结果
2024-01-23
好冷
今天广州的天气真冷,速冻模式呀
2024年01月23日
83 阅读
1 评论
0 点赞
2024-01-23
Linux开启BBR
什么是BBR? BBR(Bottleneck Bandwidth and Round-trip time)是一种由谷歌开发的 TCP 拥塞控制算法,主要用于优化网络传输效率。开启BBR的特点? BBR 算法的特点是通过测量网络的带宽利用率和往返延迟时间(RTT),来判断网络的瓶颈位置,并根据这些信息来调整 TCP 的拥塞窗口大小,以达到最佳的传输效率。BBR 算法采用了一种基于模型的拥塞控制方法,能够在网络状况变化时自适应地调整拥塞窗口大小,从而提高网络传输的吞吐量和响应速度。 BBR 算法在实际应用中表现出了很好的性能,尤其是在高延迟和高丢包的网络环境中,它能够显著提高网络传输效率和稳定性。如何开启BBR?Linux kernel 4.9 及以上已支持 tcp_bbr1.查看系统内核版本:uname -r看内核版本是否大于等于4.9,否则要升级内核,或者安装bbr。2.开启BBR:echo "net.core.default_qdisc=fq" >> /etc/sysctl.confecho "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf3.保存生效:sysctl -p4.重启5.检查BBR是否启用:sysctl net.ipv4.tcp_available_congestion_control返回值一般为:net.ipv4.tcp_available_congestion_control = reno cubic bbrsysctl net.ipv4.tcp_congestion_control返回值一般为:net.ipv4.tcp_congestion_control = bbrsysctl net.core.default_qdisc返回值一般为:net.core.default_qdisc = fqlsmod | grep bbr返回值有类似:tcp_bbr 20480 10则BBR模块已启动
2024年01月23日
51 阅读
0 评论
0 点赞
2020-07-16
Spring AOP 术语说明
举个例子一个aspect切面classpublic class Logging { /** * This is the method which I would like to execute * before a selected method execution. */ public void beforeAdvice() { System.out.println("Going to setup student profile."); } /** * This is the method which I would like to execute * after a selected method execution. */ public void afterAdvice() { System.out.println("Student profile has been setup."); } /** * This is the method which I would like to execute * when any method returns. */ public void afterReturningAdvice(Object retVal) { System.out.println("Returning:" + retVal.toString()); } /** * This is the method which I would like to execute * if there is an exception raised. */ public void AfterThrowingAdvice(IllegalArgumentException ex) { System.out.println("There has been an exception: " + ex.toString()); } }SpringAOP.xml配置<bean id="student" class="com.seeyon.SpringBean.aop.Student" p:name="yangyu" p:age="27"></bean> <bean id="logging" class="com.seeyon.SpringBean.aop.Logging"></bean> <aop:config> <!-- 切面class --> <aop:aspect id="log" ref="logging"> <!-- 切点 --> <aop:pointcut id="studentMethod" expression="execution(* com.seeyon.SpringBean.aop.Student.get*(..))"/> <!-- 方法执行之前触发切面class的beforeAdvice方法 --> <aop:before pointcut-ref="studentMethod" method="beforeAdvice"/> <!-- 方法执行之后触发切面class的afterAdvice方法 --> <aop:after pointcut-ref="studentMethod" method="afterAdvice"/> </aop:aspect> </aop:config>术语说明术语说明Aspect(切面)泛指交叉业务逻辑,比如日志处理、事务处理的逻辑可以理解为切面,上面xml中aop:aspect标签表示的就是一个切面。JoinPoint(连接点)连接点指切面可以织入的位置,是一个虚拟的概念,可以理解为所有满足切点扫描条件的所有的时机。Pointcut(切入点)切面具体切入的位置,上面aop:pointcut标签表示的就是一个切点,也就是满足条件被扫描到的目标方法。Advice(通知/增强)切面的一种实现,可以完成切面的功能的函数,例如日志记录,权限验证,事务控制,性能检测,错误信息检测等。Weaving(织入)指将切面的逻辑插入到目标对象中的过程。参考:https://www.jianshu.com/p/c57a5a998c6b
2020年07月16日
745 阅读
5 评论
1 点赞
2020-07-07
MySQL事务隔离级别
什么是事务事务的定义数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。假如A转账给B 100元,先从A的账户里扣除100元,再在B的账户上加上100元。如果扣完A的100元后,还没来得及给B加上,银行系统异常了,最后导致A的余额减少了,B的余额却没有增加。所以就需要事务,将A的钱回滚回去,就是这么简单。事务的四大特性原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。事务并发存在的问题假设现在有张表CREATE TABLE `account` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, `balance` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `un_name_idx` (`name`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;数据如下idnamebalance1张三1002李四200更新丢失(lost update)A和B事务并发执行,A事务执行更新后,提交;B事务在A事务更新后,B事务结束前也做了对该行数据的更新操作,然后回滚,则两次更新操作都丢失了。第一类丢失更新(回滚丢失,Lost update)事务A和B并发执行,A事务修改数据并提交事务,然后B事务回滚事务,A事务已经提交的数据被回滚。时间节点A事务B事务T1开始事务-T2-开始事务T3查询账号余额 100 元-T4-查询账号余额 100 元T5存入 100 元,账户余额 200 元-T6提交事务-T7-取款10元,账户余额 90 元T8-回滚事务T9-账户余额 100 元(A事务更新丢失)第二类丢失更新(覆盖丢失/两次更新问题,Second lost update)事务A和B并发执行,A事务修改数据并提交事务,然后B事务修改数据并提交,A事务已经提交的数据被覆盖。时间节点A事务B事务T1开始事务-T2-开始事务T3查询账号余额 100 元-T4-查询账号余额 100 元T5存入 100 元,账户余额 200 元-T6提交事务-T7-取款10元,账户余额 90 元T8-提交事务T9-账户余额 90 元(A事务更新被覆盖)脏读(dirty read)A和B事务并发执行,A事务读取了B事务修改后未提交的数据,如果之后B事务进行事务回滚,则事务A读到的数据是不存在的脏数据。时间节点A事务B事务T1开始事务-T2-开始事务T3-查询账号余额 100 元T4-取款10元,账户余额 90 元T5查询账号余额 90 元-T6存入 100 元,账户余额 190 元-T7-回滚事务T8-账户余额 100 元T9提交事务-T10账户余额 190 元(数据被B事务干扰)-不可重复读(unrepeatable read)A和B事务并发执行,A事务读取了B事务修改并已经提交的数据,导致A事务内多次读取同一记录但结果却不相同不稳定。时间节点A事务B事务T1开始事务-T2-开始事务T3查询账号余额 100 元-T4-查询账号余额 100 元T5-取款10元,账户余额 90 元T6-提交事务T7查询账号余额 90 元(数据被B事务干扰)-幻读(phantom read)A和B事务并发执行,A事务读取了B事务提交的新增数据,这时A事务将出现幻读的问题。幻读一般发生在计算统计数据的事务中。时间节点A事务B事务T1开始事务-T2-开始事务T3查询ID大于1的账户数量:1-T4-新增账户(id:3,name:王五,balance:300)T5-提交事务T6查询ID大于1的账户数量:2 (莫名其妙多出一条数据)-可以看出前面几种问题都偏重于对同一记录的修改更新,幻读偏重于多条记录的增删,它们之间是递进的。事务的四大隔离级别ISO标准定义了4个事务隔离等级,分别是读未提交(Read Uncommitted)读已提交(Read Committed)可重复读(Repeatable Read)串行化(Serializable)MySQL查看和设置隔离级别查看MySQL当前事务隔离级别命令:* show variables like 'tx_isolation' * show variables like 'transaction_isolation' * select @@tx_isolation * select @@transaction_isolation设置本次会话的事务隔离级别该设置只对本次会话的事务生效,不影响其他会话,随着本次会话关闭而失效。set session transaction isolation level read uncommitted / read committed / repeatable read / serializable设置全局会话的事务隔离级别该设置不影响当前已连接的会话,新会话使用新的事务隔离级别。set global transaction isolation level read uncommitted / read committed / repeatable read / serializable设置一次操作的事务隔离级别该设置只对下一次事务生效,随着事务的提交而失效。set transaction isolation level read uncommitted / read committed / repeatable read / serializableMySQL的事务四大隔离级别我们通过MySQL看看四大隔离级别的效果读未提交(READ UNCOMMITTED)读未提交是隔离级别最低的一种,打开两个MySQL连接,分别设置隔离级别,然后两个事务交替执行,如下:可以看到,事务A可以读取到事务B未提交的数据(事实上事务B也可以读到事务A的),如果一方回滚事务,则会造成脏读等严重问题。读已提交(Read Committed)可以看到,此隔离级别可以有效解决脏读的问题,但还是无法避免不可重复读的问题可重复读(Repeatable Read)可以看到,此隔离级别可以有效解决不可重复读的问题,接下来我们看看会不会出现幻读。显然,还是有幻读的问题。串行化(Serializable)可以看到,串行化隔离最严格,可以避免幻读问题,但效率也是最低的。在选择隔离级别时,需要考虑开发的业务环境和需求,以选择最适合自己业务的隔离级别。MySQL隔离级别的实现原理待续...
2020年07月07日
689 阅读
4 评论
1 点赞
2020-06-28
Mysql delete from table 和 truncate table 的区别
truncate属于DDL即数据控制语言而非DML数据操作语言,所做操作不能回滚。truncate是删除整张表后再重建,对比delete操作逐行删除数据效率高,特别是大数据表。truncate操作会执行隐式的commit,所以不能回滚。如果会话持有活动表锁,则不能执行 truncate 操作。InnoDB或者NDB表有字段作为外键被其他表引用时,对该表执行truncate操作会失败,表内字段间的外键关联不影响此操作。truncate操作不会返回删除记录数,操作成功提示的“0 rows affected”无实际意义。只要表格式文件tablename.frm是有效的,那么即使数据或者索引文件损坏了也能通过truncate操重新创建空表。执行truncate操作后,表中如果有自增序列字段的话,自增序列会重置回初始值。即使对于MyISAM和InnoDB也是如此,它们通常不重用序列值。对分区表执行truncate操作的话,表的数据和索引文件会删除重建,但是表分区定义文件则不受影响。truncate操作不会触发ON DELETE触发器。原文参见 官方文档
2020年06月28日
863 阅读
2 评论
1 点赞
1
2