摘要:
缓存污染问题指的是留存在缓存中的数据,实际不会再被访问了,但是又占据了缓存空间。如果这样的数据体量很大,甚至占满了缓存,每次有新数据写入缓存时,还需要把这些数据逐步淘汰出缓存,就会增加缓存操作的时间开销。 因此,要解决缓存污染问题,最关键的技术就是能识别出这些只访问一次或是访问次数很少的数据,在淘汰 阅读全文
摘要:
redis4.0之后一共有8中淘汰策略。我们按照是否会进行数据淘汰把他们分成两类: 不进行数据淘汰的策略,只有noeviction这一种 会进行数据淘汰的7中其他策略。 会进行淘汰的其中策略,我们可以进一步根据淘汰候选数据集的范围把他们分成两类: 在设置了过期时间的数据中进行淘汰,包括volatil 阅读全文
摘要:
redis是key-value数据库,我们可以设置redis中缓存的key的过期时间。redis的过期策略就是指当redis中缓存的key过期了,redis如何处理。 惰性删除:只有当访问一个key时,才会判断该key是否已经过期,过期则删除。该策略可以最大化节省CPU资源,却对内存非常不友好。极端 阅读全文
摘要:
RDB:Redis DataBase 在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork出一个子进程,先将数据集写入临时文件,写入成功后,再替换之间的文件,用二进制压缩存储。 为了写快照而暂停写操作,这肯定是不能接受的。所以这个时候,Redis就会借助操作系统提供的写时复制(Co 阅读全文
摘要:
INNODB和MYISAM 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB MYISAM INNODB 事务支持 不支持 支持 数据行锁定 不支持(表锁定) 支持 外键约束 不支持 支持 全文索引 支持 不支持 表空 阅读全文
摘要:
mysql主从同步过程: mysql的主从复制主要有三个线程:master:二进制日志转储线程(binlog dump thread)、slave:I/O线程(I/O thread)和SQL线程(SQL thread).master一条线程和slave中的两条线程。 主节点binlog,主从复制的基 阅读全文
摘要:
多版本并发控制:读取数据时通过一种类似快照的方式将数据保存下来,这样读锁就和写锁不冲突了,不同事务会话看到自己特定版本的数据,使用版本链。 MVCC只在READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作。其他两个隔离级别和MVCC不兼容,因为READ UNCOMMI 阅读全文
摘要:
A 原子性 由undo log日志保证,它记录了需要回滚的日志信息,事务回滚是撤销已经成功执行的sql C 一致性 由其他三大特性保证、程序代码要保证业务上的一致性 I 隔离性 由MVCC来保证 D 持久性 由内存+redo log来保证,mysql修改数据同时在内存和redo log记录这次操作, 阅读全文
摘要:
什么是Mysql执行计划 执行计划是Mysql如何执行一条sql语句,包括sql查询顺序、是否使用索引、索引信息、查询命中率等信息。 基本语法 explain select ... InnoDb引擎的执行计划内容 id:由一组数字组成,表示一个查询中各个子查询的执行顺序; id相同执行顺序由上之下 阅读全文
摘要:
在业务系统中,除了使用主键进行查询,其他的都会在测试库上测试其耗时。 慢查询的优化首先要搞明白慢的原因是什么?是查询条件没有命中索引?是load了不需要的数据列?还是数据量太大? 所以优化也是针对这三个方向来的: 首先分析语句,看看是否load了额外的数据列,可能是查询了多余的行并且抛弃掉了(使用s 阅读全文