1 | ##准备测试数据 |
非唯一索引
范围查询,临键锁(一)
举例
1 | #事务A |
结论
列 | 值 |
---|---|
数据(col1) | 10、20、40、50 |
查询条件 | > 30 and < 50 |
锁类型 | 临键锁 |
加锁区间 | (20,40]、(40,50] |
记录锁 | 40,50 |
1 | ##准备测试数据 |
1 | #事务A |
列 | 值 |
---|---|
数据(col1) | 10、20、40、50 |
查询条件 | > 30 and < 50 |
锁类型 | 临键锁 |
加锁区间 | (20,40]、(40,50] |
记录锁 | 40,50 |
共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。
其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。
如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获得共享锁的事务只能读数据,不能修改数据。
排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。排它锁是悲观锁的一种实现。
排他锁指的是一个事务在一行数据加上排他锁后,其他事务不能再在其上加其他的锁。mysql InnoDB引擎默认的修改数据语句,update,delete,insert都会自动给涉及到的数据加上排他锁。
select语句默认不会加任何锁类型,加排他锁可以使用select …for update语句,加共享锁可以使用select … lock in share mode语句。所以加过排他锁的数据行在其他事务种是不能修改数据的,也不能通过for update和lock in share mode锁的方式查询数据,但可以直接通过select …from…查询数据,因为普通查询没有任何锁机制。
若事务 1 对数据对象A加上X锁,事务 1 可以读A也可以修改A,其他事务不能再对A加任何锁,直到事物 1 释放A上的锁。这保证了其他事务在事物 1 释放A上的锁之前不能再读取和修改A。排它锁会阻塞所有的排它锁和共享锁。
Redis支持五种数据类型:字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(sorted set)。
每一种数据类型所对应的操作命令不同,当然也存在一些通用的,而且Redis的所有命令有很多,本文中记录的都是日常使用频率相对多一些的。
通用命令:
1 | keys:遍历所有key【O(n)】 |
O(n)代表时间复杂度比较高,不建议在线上使用,O(1)代表时间复杂度较低,可以任意使用
写时复制Copy on Write,也缩写为COW。
优点:省去了分配内存和管理内存地址的计算开销, 减少资源的占用
COW是常用的优化手段,可以归类于:资源延迟分配。只有在真正需要使用资源时才占用资源, 写时复制通常能减少资源的占用。
关于内存使用情况,可以使用php函数:memory_get_usage() 来进行查看
例子:
1 | <?php |
1 | 执行结果为: |
通过结果可以看出来,拷贝出新的内存空间后,内存占用量明显增加。
可以理解为开设一个账号,权限为只读
创建并授权用户
1 | GRANT select ON *.* to 'test_readonly'@'localhost' identified by '1234'; |
不必先insert into user…以后再进行授权,以上语句是创建用户的同时并且已授权
1、__METHOD__:返回所在类的方法的名称。与__FUNCTION__不用的是,__METHOD__返回的是”class::function”的形式,而__FUNCTION__返回”function”的形式。
2、__FILE__: 返回当前文件的完整路径。
3、__FUNCTION__:返回所在函数的名字。
4、__LINE__:返回文件中当前的行号。
5、__CLASS__:返回所在类的名字。
6、__DIR__:返回文件所在目录,如果用在被包含文件中,则返回被包含的文件所在的目录
7、__NAMESPACE__:返回当前命名空间的名称(区分大小写)。此常量是在编译时定义的。
8、__TRAIT__:返回Trait被定义时的名字。Trait名包含其被声明的作用区域。
一、首先要先把my.cnf配置文件复制一份,开几个端口要复制几份,并且要重新命名。
cp /etc/my.cnf /etc/my3307.cnf
二、 修改/etc/my3307.cnf 配置文件
1 | [client] |
三、创建数据库指定存放数据的目录
1 | mkdir /alidata/server/mysql3307/data |
四、创建log日志存放目录
1 | mkdir /alidata/log/mysql3307/ |
工作的时间不算短了,但其实想想对于业务和技术并没有非常系统的整理,比较碎片化,平日里遇到的一些问题和解决方案没有完全落实到纸面上,有时觉得记忆力还可以…但是终归好记性不如烂笔头,还是决定通过blog方式进行梳理和归纳,将这几年积累的下来经验和技术做一个很好的沉淀,也以此督促自己,不断的扩充自己的知识点,建立良好的技术体系。在这里会记录一些技术知识、心得感想等等。
嗯,就从这里开始。