MySQL
Charles_yy
一个挣扎在学习路上的学渣渣
展开
-
缓存与数据库数据不一致 解决方法
Redis缓存与数据库数据一致性不管是先写数据库,再删除Redis缓存;还是先删除缓存,再写库,都有可能出现数据不一致的情况:1.如果删除了缓存,还没有来得及写数据库,另一个线程就来读取,发现缓存为空,则去数据库中读取数据写入缓存,此时缓存中为脏数据。 2.如果先写了库,在删除缓存前,写库的线程宕机了,没有删除掉缓存,则也会出现数据不一致情况。1.第一种方案:延时双删策略+缓存超时设置在写库前后都进行删除缓存操作(redis.del(key)),并且设定合理的缓存过期时间。具体的步骤就是:.原创 2020-10-22 17:41:23 · 1212 阅读 · 0 评论 -
MySQL 主从同步机制 undo log redo log和bin log的区别
1. 二进制日志 bin log 1.1 bin log的功能 MySQL为了兼容其它非事务引擎的复制,在server层面引入了 binlog, 它可以记录所有引擎中的修改操作。binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。 binlog不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但可以通过查询通用日志来查看MySQL执行过的所有语句。...原创 2020-10-21 11:05:16 · 1134 阅读 · 0 评论 -
count(*) 和 count(1)和count(字段)区别
执行效果上看: count(*) 包括了所有的列,相当于行数,在统计结果的时候,不会忽略字段值为NULL的列 ; count(1) 包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略字段值为NULL的列 ; count(列名) 只包括列名那一列,在统计结果的时候,会忽略字段值为值为NULL的列(这里的空不是指 空字符串“” 或者 0,而是表示null)的计数,即某个字段值为NULL时,不统计。执行效率上看: 列名为主键,count(列名)会比count(1)快 且 sel...原创 2020-10-13 08:55:18 · 971 阅读 · 0 评论 -
CAS下ABA问题及优化方案
CAS下ABA问题及优化方案一、什么是CAS二、什么是ABA问题三、解决方法1. 表结构加字段解决版本号: Version(更新数据时通过对比原始版本号,如果一致则更新,同时版本号version+1) 更新时间:update_time: update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP2. 优化锁粒度防止因乐观锁,导致并发失败次数较多,引起用户体验不好,需要.原创 2020-10-08 11:09:57 · 263 阅读 · 1 评论 -
MySQL两种主要存储引擎 MyISAM 和 InnoDB
MyISAM引擎MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISA...原创 2018-09-03 09:50:33 · 280 阅读 · 0 评论