0%

事务特性:ACID

特性

数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。(执行单个逻辑功能的一组指令或操作称为事务)

原子性

指事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。

Read more »

乐观锁和悲观锁, 是并发控制了两种手段, 是一种思想.

悲观锁(Pessimistic Lock)

在修改数据之前先锁定, 再修改.

之所以叫做悲观锁,是因为这是一种对数据的修改抱有悲观态度的并发控制方式。我们一般认为数据被并发修改的概率比较大,所以需要在修改之前先加锁。

悲观锁的实现,往往依靠数据库提供的锁机制

共享锁/排它锁

悲观锁又可以分为共享锁和排它锁

  • 共享锁(读锁): 多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。
  • 排它锁(写锁): 如果一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据行读取和修改。
Read more »

常见索引模型

  • 哈希表
    适用于只有等值查询的场景,比如 Memcached 及其他一些 NoSQL 引擎。
  • 有序数组
    适用于静态存储引擎; 等值查询和范围查询效率都很高, 但是更新效率低.
  • 搜索树
    • 二叉搜索树
      查询和更新都是O(logn)
    • N叉数
      适配磁盘的访问模式, N取决于数据块的大小

InnoDB索引

在 InnoDB 中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。所以可以理解为 每一个表是好几棵B+树, 新建索引就是新建一颗B+数

Read more »

事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL 中,事务支持是在引擎层实现的。而MyISAM 引擎就不支持事务.

事物操作

  • 显示启动

    1
    2
    3
    4
    begin / start transaction
    rollback
    commit
    commit work and chain // 提交事务后自动启动下一个事务, 省去了再次被begin的开销; 适用于频繁使用事务的业务
  • 配置启动

    1
    set autocommit=0

    注意: 这种方法下, 任何语句都会开启事务, 直到显示commit / rollback

  • 查询系统长事务

    1
    2
    // 查询时间超过60s的长事务
    select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60
  • 查询事务隔离级别

    1
    show variables like 'transaction_isolation';
Read more »

概述

复制

复制是高可用 Redis 的基础,哨兵 和 集群 都是在 复制基础 上实现高可用的。复制主要实现了数据的多机备份以及对于读操作的负载均衡
缺点: 故障恢复无法自动化、写操作无法负载均衡、存储能力受到单机的限制

哨兵

在复制的基础上,哨兵实现了 自动化故障恢复
缺点: 写操作无法负载均衡、存储能力受到单机的限制

集群

解决了 写操作无法负载均衡、存储能力受到单机的限制

Read more »

使用

为了保证原子性, redis提供了简单的事务. 但不支持事务回滚

1
2
3
multi 开始事务, 之后输入命令, 会放入队列而不是真正的执行
discard 停止事务
exec 执行事务, 真正执行命令
Read more »

消息队列

注意, 如果对消息的可靠性有极致追求, 则不建议使用redis作为队列

直接用redis的list结构来实现, 生产者 rpush, 消费者 lpop

Read more »

telnet

基于http的网络协议

  • 检查端口是否可达, 发送http请求
    telnet ip port

    nc

  • 检查端口是否可达

    1
    2
    3
    nc -zv ip port 
    -v 显示详情
    -z 不发送数据包, 三次握手后退出
  • 发送http请求
    nc ip port

  • 监听本地端口 nc -l -p 端口号

netstat

netstat是基于Netstat这个命令行工具的指令,它可以用来查询系统上的网络套接字连接情况,包括tcp,udp以及Unix套接字;另外它还能列出路由表,接口状态和多播成员等信息。
netstat

Read more »

exec

exec共有三种用法

  1. 执行程序
  2. 文件重定向
  3. 当做find命令的一个选项
    Read more »