MyISAM

高并发下,php与redis实现的抢购、秒杀功能

放肆的年华 提交于 2020-04-30 02:07:33
抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。 重点在于第二个问题 常规写法: 查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大于0处,如果在高并发下就会有问题,导致库存量出现负数 <? php $conn = mysqli_connect ("localhost","root","" ); if (! $conn ){ echo "connect failed" ; exit ; } mysqli_select_db ( $conn ,"ceshi" ); mysqli_query ( $conn ,"set names utf8" ); $price =10 ; $user_id =1 ; $goods_id =1 ; $sku_id =11 ; $number =1 ; // 生成唯一订单 function build_order_no(){ return date ('ymd'). substr ( implode ( NULL , array_map ('ord', str_split ( substr ( uniqid (), 7, 13), 1))

2、自增主键为什么不是连续的

蓝咒 提交于 2020-04-29 23:20:47
自增主键可以让主键索引尽量的保持递增顺序,避免页分裂,因此索引更紧凑. 但是,自增索引在某些情况下,是会出现不连续的情况的 // 有这样一个表,id是自增主键,c是唯一索引 CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `c` (`c`) ) ENGINE=InnoDB; 1、自增值保存在哪 1) MYISAM引擎的自增值保存在数据文件中 2) InnoDB的自增值保存在内存中,8.0版本中引入了自增值持久化的能力,如果发生重启,表的自增值可以恢复到重启之前的值 具体情况是: 1) 5.7及之前版本里,自增值保存在内存中,没有持久化,每次重启之后,第一次打开表时,都会去查找自增值的最大值max(id),然后将max(id)+1 作为这个表的当前的自增值. 举例来说,如果当前数据行里的最大id是10,Auto_Increment=11,这是删除id=10的行,Auto_Increment还是11,如果马上重启实例,重启之后 这个表的Auto_Increment就会变成10. 也就是说,重启之后会修改一个表的Auto_Increment值. 2)

MySQL基础知识和常用命令总结

你离开我真会死。 提交于 2020-04-29 08:59:18
说明:以下内容是阅读书籍<<MySQL必知必会>>的摘要和总结 检索数据 排序检索数据 过滤数据 使用通配符过滤 使用正则表达式进行搜索 创建计算字段 使用数据处理函数 汇总数据 分组数据 使用子查询 联结表 创建高级联结 组合查询 全文本搜索 插入数据 更新和删除数据 创建和操纵表 使用视图 使用存储过程 使用游标 使用触发器 管理事务处理 全球化和本地化 安全管理 数据库维护 改善性能. 模式可以用来描述数据库中特定的表以及整个数据库,和其中表的关系 行(row) 表 中的一个记录 必须先使用use命令打开数据库,才能读取其中的数据。 mysql> show columns from user;//DESCRIBE help show; > select distinct prod_id prod_name,prod_price from products;//返回不同的行!DISTINCT,限制返回结果。LIMIT SELECT prod_name,FROM products LIMIT 3,3(start,rows) help 命令 如果使用DISTINCT关键字, 它必须直接放在所有列的前面 ,完全限定符:表名.列名 子句(clause) SQL语句由子句构成,有些子句是必需的,而有的是可选的。 不同行distinct,排序order by XXX DESC SELECT

阿里java程序员都学的MySQL架构调优笔记及面试百问解析,建议收藏

Deadly 提交于 2020-04-28 16:23:39
数据库是一个综合系统,其背后是发展了几十年的数据库理论。也许你会觉得数据库并不难,因为你可以熟练地写出SQL ,也可以在各个客户端里玩得游刃有余。但就以最常见的MySQL为例,作为程序员,你在使用MySQL的过程中, 是不是曾经遇到过类似的问题: 1.为什么我的count()这么慢? 2.为什么我建了索引,却根本没有效果? 3.为什么我只查一行的语句, 也执行这么慢? 4.MySQL对于大表要怎么优化? 之前,你大概都是通过搜索别人的经验来解决问题。你有没有想过,如果能够理解MySQL的工作原理,那么在遇到问题的时候,是不是就能更快地直戳问题的本质?比如说,知道了索引的实现原理,那遇到索弓问题的时候,你是不是就能从原理的角度,推断可能的解决方案? 在这里给大家分享一个文档《MySQL性能调优与架构设计解析文档》,这个文档包含了基础篇、性能优化篇、架构设计篇三个主要部分,详细知识点还得自己慢慢去吸收哦~ MySQL性能调优与架构设计解析文档 一、基础篇 第1 章MySQL 基本介绍 第2 章MySQL 架构组成 第3 章MySQL 存储引擎简介 第4 章MySQL 安全管理 第5 章MySQL 备份与恢复 二、性能优化篇 第6 章 影响MySQLServer 性能的相关因素 第7 章MySQL 数据库锁定机制 第8 章MySQL 数据库Query 的优化 第9 章MySQL

2020最新Java工程师面试题-MySQL篇(附答案)

血红的双手。 提交于 2020-04-28 03:04:25
1、MySQL 中有哪几种锁? 1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最 高,并发度最低。 2、行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最 低,并发度也最高。 3、页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表 锁和行锁之间,并发度一般。 2、MySQL 中有哪些不同的表格? 共有 5 种类型的表格: 1、MyISAM 2、Heap 3、Merge 4、INNODB 5、ISAM 3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别 MyISAM: 不支持事务,但是每次查询都是原子的; 支持表级锁,即每次操作是对整个表加锁; 存储表的总行数; 一个 MYISAM 表有三个文件:索引文件、表结构文件、数据文件; 采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引 基本一致,但是辅索引不用保证唯一性。 InnoDb: 支持 ACID 的事务,支持事务的四种隔离级别; 支持行级锁及外键约束:因此可以支持写并发; 不存储总行数: 一个 InnoDb 引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制, 一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受 操作系统文件大小限制,一般为 2G),受操作系统文件大小的限制; 主键索引采用聚集索引

MYSQL优化-存储过程、范式

北慕城南 提交于 2020-04-28 02:54:54
一、存储过程 1.1、什么是存储过程   就是一组 SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于 JAVA语言中的方法。   ps:存储过程跟触发器有点类似,都是一组 SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用。 1.2、 存储过程有哪些特性   有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;   函数的普遍特性:模块化,封装,代码复用;   速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤; 1.3、创建存储过程 create proc | procedure pro_name [{@参数数据类型} [ = 默认值] [output], {@参数数据类型} [ = 默认值] [output], .... ] as   porcedureName 1.4、调用存储过程 call porcedureName (); 1.5、存储过程优缺点    优点:     1.在生产环境下,可以通过直接修改存储过程的方式修改业务逻辑(或bug),而不用重启服务器。但这一点便利被许多人滥用,在正式服务器上修改存储过程,而没有经过完整的测试,后果非常严重。     2.执行速度快。存储过程经过编译之后会比单独一条一条执行要快

mysql性能优化之服务器参数配置-内存配置

久未见 提交于 2020-04-28 02:06:26
MySQL服务器参数介绍 MySQL获取配置信息路径 命令行参数 mysqld_safe --datadir=/data/sql_data 配置文件 mysqld --help --verbose | grep -A 1 'Default options' /etc/my.cnf/ /etc/mysql/my.cnf /home/mysql/my.cnf ~/.my.cnf MySQL配置参数的作用域 全局参数(需要重新登录才能生效) set global 参数名=参数值; set @@global.参数名:=参数值; 会话参数 set[session]参数名=参数值; set @@session.参数名 := 参数值; 内存配置相关参数 确认可以使用的内存的上限 确认MySQL的每个连接使用的内存(都是为线程分配的) sort_buffer_size 排序缓冲区大小 join_buffer_size 连接缓冲区的大小 read_buffer_size 分配的值必须是4k的倍数 read_rnd_buffer_size 确认需要为操作系统保留多少内存 如何为缓存池分配内存(Innodb严重依赖缓存池) InnoDB缓存池(InnoDB buffer pool)是提升InnoDB提升性能的关键,它既可以缓存数据,又可以缓存索引,甚至其他的管理数据(元数据、行级锁)等。可以使用show

MySQL与PostgreSQL相比哪个更好?

≯℡__Kan透↙ 提交于 2020-04-28 02:03:18
网上已经有很多拿PostgreSQL与MySQL比较的文章了,这篇文章只是对一些重要的信息进行下梳理。在开始分析前,先来看下这两张图: MySQL MySQL声称自己是最流行的开源数据库。LAMP中的M指的就是MySQL。构建在LAMP上的应用都会使用MySQL,如WordPress、Drupal等大多数php开源程序。MySQL最初是由MySQL AB开发的,然后在2008年以10亿美金的价格卖给了Sun公司,Sun公司又在2010年被Oracle收购。Oracle支持MySQL的多个版本:Standard、Enterprise、Classic、Cluster、Embedded与Community。其中有一些是免费下载的,另外一些则是收费的。其核心代码基于GPL许可,由于MySQL被控制在Oracle,社区担心会对MySQL的开源会有影响,所以开发了一些分支,比如: MariaDB和Percona。 PostgreSQL PostgreSQL标榜自己是世界上最先进的开源数据库。PostgreSQL的一些粉丝说它能与Oracle相媲美,而且没有那么昂贵的价格和傲慢的客服。最初是1985年在加利福尼亚大学伯克利分校开发的,作为Ingres数据库的后继。PostgreSQL是完全由社区驱动的开源项目。它提供了单个完整功能的版本,而不像MySQL那样提供了多个不同的社区版、商业版与企业版

Mysql--开篇&目录

假如想象 提交于 2020-04-28 02:02:47
Mysql 现在是互联网公司中使用得非常广泛的数据库产品了,开源、免费、小巧、易用等诸多特性奠定了其夯实的基础。自己从事 JavaWeb 也有一段时间了,工作中也是用的 Mysql,也会涉及到分析、慢查询、调优等工作。于是,也需要学习 Mysql 高级部分的知识。 说来也巧,Mysql 高级在北京的一家著名培训机构上也有公开的教学视频可供下载,于是,自己也就跟着进行学习。 这家培训机构就是: 尚硅谷 ,视频下载 主页 尚硅谷发布了很多教学视频,对于像我这种从事 JavaWeb 工作不久的童鞋来说,是非常值得学习的。的确,自己也下载了其很多教学视频来学习,收获破丰, 在此,感谢尚硅谷教学老师的辛苦付出 。 本系列内容是 Mysql 高级相关,也是看过数遍尚硅谷的 Mysql 高级 视频教学内容并加上自己的一些思考和分析并最终整理出来的内容。 本系列内容如下: Mysql--逻辑架构 Mysql--七种 Join 查询 Mysql--存储引擎(MyISam & InnoDB) Mysql--索引 Mysql--执行计划 Explain 索引优化--单表 索引优化--两张表 索引法则--最佳左前缀法则 索引法则--不要在索引列上做任何计算 索引法则--范围之后全失效 索引法则--尽量使用覆盖索引 索引法则--不等于会导致索引失效 索引法则--IS NULL, IS NOT NULL

MySQL系列详解一:MySQL&&多实例安装-技术流ken

与世无争的帅哥 提交于 2020-04-27 22:06:45
简介 MySQL是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言,它使得存储、更新和存取信息更加容易。MySQL是一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和许多不同的客户程序以及库组成的。 分为关系数据库(mysql、sqlserver、oracle)和 非关系型数据库(redis )。 关系型数据库 库中的数据二维表的方式存储 一.概念 关系:存储数据的表的表名 元组:就是表中的一条记录(一行就是一条记录) 属性:就是表中的一个字段(一列就是一个字段) 域:字段的取值范围 关键字:可以唯一标识一条记录的字段(这也是一个或多个字段) 关系模型:表和表之间的关系 二.关系型数据库的优点 1. 容易理解 2. 可以借助于sql语句来进行数据的读写 3. 便于维护表中的数据(主要用于保证数据完整、数据一致) 三.关系型数据库的缺点 1. 事务一致性(数据一致性) 为了保证数据的完整,会带来额外的开销,导致性能降低 2. 关系型数据库在高并发的读写请求下,会程序系统的性能瓶颈 3. 可扩展性 拆分, 分库,分表 4. 读写的时效性 金融:对时效性往往要求不高 web,社交网络:对时效要较高 5. 需要写复杂的SQL,甚至需要用多表联合查询 非关系型数据库(NoSQL) NoSQL Not Only SQL