![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
文章平均质量分 80
Java硬件工程师
中国科学技术大学毕业,原支付宝Java开发工程师,立志做一名资深全栈工程师
展开
-
Redis总结
redis版本升级说明接下来内容概述:安装redis6.0.8redis传统五大数据类型的落地应用知道分布式锁吗?有哪些实现方案?你谈谈对redis分布式锁的理解,删key的时候有什么问题?redis缓存过期淘汰策略redis的LRU算法简介安装redis6.0.8:Redis官网Redis中文网安全Bug按照官网提示,升级成为6.0.8进入Redis命令行,输入info,返回关于Redis服务器的各种信息(包括版本号)和统计数值。redis两个小细节说明redis基本类型原创 2022-04-05 22:12:06 · 1425 阅读 · 0 评论 -
kafka生产者
在文件存储机制中,我们了解到,通过二分查找法,找到是哪一个index,从index中找到,你要访问的消息的那条数据,然后根据这条消息的内容,然后再log文件中定位到数据的内容。1 分区策略1)分区的原因(1)方便在集群中扩展,每个 Partition 可以通过调整以适应它所在的机器,而一个 topic又可以有多个 Partition 组成,因此整个集群就可以适应任意大小的数据了; 提高负载能力(2)可以提高并发,因为可以以 Partition 为单位读写了。2)分区的原则我们需要将 produc原创 2021-04-20 22:41:37 · 380 阅读 · 3 评论 -
kafka工作流程及文件存储机制
1.kafka工作流程如图topicA有3个分区,每个分区有两个副本(包含一个leader,一个follower),发送消息可以一个一个的发送,也可以批量发送,0,1,2这种是offset偏移量,每一个分区里面都维护者一个从0开始的偏移量。作为follower,应该主动的从leader中备份过来。当然中间也可能丢失数据。消费者会找到leader拉取数据。Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic的。topic 是逻辑上的概念,而 partit原创 2021-04-20 16:02:33 · 114 阅读 · 0 评论 -
Zookeeper内部原理
1.选举机制(面试重点)1)半数机制:集群中半数以上机器存活,集群可用。所以 Zookeeper 适合安装奇数台服务器。 6台服务器挂掉3台无法工作,5台服务器挂掉3台也无法工作。2)Zookeeper 虽然在配置文件中并没有指定 Master 和 Slave。但是,Zookeeper 工作时,是有一个节点为 Leader,其他则为 Follower,Leader 是通过内部的选举机制临时产生的。3)以一个简单的例子来说明整个选举的过程。假设有五台服务器组成的 Zookeeper 集群,它们的 id原创 2021-04-13 18:51:00 · 311 阅读 · 1 评论 -
数据库系列
Redis数据库系列Redis数据库系列1.NoSQL简介2.当下NoSQL应用场景简介3.NoSQL数据库的四大分类4.分布式数据库CAP原理5.redis入门概述及简介6.redis五大数据类型7.redis事务8.主从复制Master/slaveMySQL数据库系列MySQL数据库系列MySQL基础系列1.SQL语句的分类与MySQL简单查询2.MySQL条件查询3.排序与分组函数4.group by和having5.连接查询6.子查询及limit分页7.MySQ原创 2021-04-11 11:40:00 · 96 阅读 · 1 评论 -
MySQL高级-MySQL锁
1 锁概述锁是计算机协调多个进程或线程并发访问某一资源的机制(避免资源争抢)。数据库中的锁可以用来解决因为并发访问导致数据出现的一些问题,如事务中的脏读,不可重复读机制。在数据库中,除传统的计算资源(如 CPU、RAM、I/O 等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。2.锁分类从对数据操作的粒度分 :1) 表锁:操作原创 2021-01-27 18:19:22 · 4716 阅读 · 13 评论 -
MySQL高级-MySQL并发参数调整
Mysql并发参数调整1 max_connections2 back_log3 table_open_cache4 thread_cache_size5 innodb_lock_wait_timeoutMysql并发参数调整从实现上来说,MySQL Server 是多线程结构,包括后台线程和客户服务线程。多线程可以有效利用服务器资源,提高数据库的并发性能。在Mysql中,控制并发连接和线程的主要参数包括 max_connections、back_log、thread_cache_size、table_.原创 2021-01-27 14:10:00 · 3366 阅读 · 7 评论 -
MySQL高级-内存管理及优化
1 内存优化原则1) 将尽量多的内存分配给MySQL做缓存,但要给操作系统和其他程序预留足够内存。2) MyISAM 存储引擎的数据文件读取依赖于操作系统自身的IO缓存,因此,如果有MyISAM表,就要预留更多的内存给操作系统做IO缓存。3) 排序区、连接区等缓存是分配给每个数据库会话(session)专用的,其默认值的设置要根据最大连接数合理分配,如果设置太大,不但浪费资源,而且在并发连接较高时会导致物理内存耗尽。2 MyISAM 内存优化myisam存储引擎使用 key_buffer 缓存索引原创 2021-01-26 21:36:53 · 2691 阅读 · 4 评论 -
MySQL高级-MySQL查询缓存优化
1 概述开启Mysql的查询缓存,当执行完全相同的SQL语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存。2 操作流程1. 客户端发送一条查询给服务器;2. 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段;3. 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划;4. MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询;5. 将结果返回给客户端。3 查询缓存配置原创 2021-01-26 20:47:23 · 1744 阅读 · 1 评论 -
MySQL高级-MySQL应用优化
前面章节,我们介绍了很多数据库的优化措施。但是在实际生产环境中,由于数据库本身的性能局限,就必须要对前台的应用进行一些优化,来降低数据库的访问压力。1 使用连接池对于访问数据库来说,建立连接的代价是比较昂贵的,因为我们频繁的创建关闭连接,是比较耗费资源的,我们有必要建立数据库连接池,以提高访问的性能。如果我们不用数据库连接池,那么我们每次操作数据库都需要获取连接,数据库操作完毕之后需要关闭连接,这样我们就需要频繁的开启和关闭连接,这样,就比较耗费资源。建立数据库连接池之后,我们获取数据库连接的时候就原创 2021-01-26 19:04:55 · 3054 阅读 · 7 评论 -
Redis数据库系列
1.NoSQL简介2.当下NoSQL应用场景简介3.NoSQL数据库的四大分类4.分布式数据库CAP原理5.redis入门概述及简介6.redis五大数据类型7.redis事务8.主从复制Master/slave原创 2021-01-26 16:43:22 · 3710 阅读 · 4 评论 -
MySQL数据库系列
MySQL基础系列1.SQL语句的分类与MySQL简单查询2.MySQL条件查询3.排序与分组函数4.group by和having5.连接查询6.子查询及limit分页7.MySQL数据库事务MySQL高级系列1.索引2.视图3,存储过程和函数4.触发器5.MySQL存储引擎6.SQL优化步骤7.索引的使用及优化8.SQL优化...原创 2021-01-26 16:33:54 · 1964 阅读 · 1 评论 -
MySQL高级-SQL优化
1.大批量插入数据环境准备 :CREATE TABLE `tb_user_1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(45) NOT NULL, `password` varchar(96) NOT NULL, `name` varchar(45) NOT NULL, `birthday` datetime DEFAULT NULL, `sex` char(1) DEFAULT NULL, `em原创 2021-01-26 16:07:31 · 1854 阅读 · 2 评论 -
MySQL高级-索引的使用及优化
关于MySQL索引一些具体特性在MySQL索引中有具体的介绍,这里主要介绍索引的使用索引是数据库优化最常用也是最重要的手段之一, 通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题。1 验证索引提升查询效率在我们准备的表结构tb_item 中, 一共约存储了250万记录;具体的创建过程参见SQL优化步骤(explain等)查看tb_item表中元素的个数:mysql> select count(*) from tb_item;+----------+| count(*) |+原创 2021-01-24 19:03:58 · 5302 阅读 · 4 评论 -
MySQL高级-SQL优化步骤
优化SQL步骤(explain等)1 查看SQL执行频率2 定位低效率执行SQL3 explain分析执行计划3.1 环境准备3.2 explain 之 id3.3 explain 之 select_type3.4 explain 之 table3.5 explain 之 type3.6 explain 之 key3.7 explain 之 rows3.8 explain 之 extra4 show profile分析SQL5 trace分析优化器执行计划在应用的的开发过程中,由于初期数据量小,开发人员原创 2021-01-22 15:29:12 · 2073 阅读 · 3 评论 -
MySQL高级-MySQL存储引擎
1.MySQL体系结构MySQL体系结构图解释说明:MySQL体系结构图和我们web开发中的三层架构是十分类似的。web开发中,前台发出请求经过controller,controller调用service,service调用dao,dao再去调用数据库。MySQL体系结构中,最上面的部分代表的是客户端,在这些客户端的连接中,最熟悉的是JDBC,我们在程序中可以通过JDBC来操作MySQL。下面的一大块就是MySQL的服务端。MySQL的服务端最上面一层是MySQL连接池,连接池中有很多的组件和模原创 2021-01-21 15:49:26 · 2060 阅读 · 3 评论 -
MySQL高级-触发器
1 介绍触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。(类似JS中的事件)触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作 。使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。触发器类型NEW 和 OLD的使用INSERT 型触发器NEW 表示将要或者已经新增的数据U原创 2021-01-19 18:22:41 · 1693 阅读 · 4 评论 -
MySQL高级-存储过程和函数
存储过程和函数1.存储过程和函数概述2 创建存储过程3 调用存储过程4 查看存储过程5 删除存储过程6 语法6.1 变量6.2 if条件判断6.3 传递参数6.4 case结构6.5 while循环6.6 repeat结构6.7 loop语句6.8 leave语句6.9 游标/光标7 存储函数1.存储过程和函数概述存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处原创 2021-01-19 17:08:39 · 1830 阅读 · 6 评论 -
MySQL高级-视图
本节例子中用到的表结构:create database demo_01 default charset=utf8mb4;use demo_01;CREATE TABLE `city` (`city_id` int(11) NOT NULL AUTO_INCREMENT,`city_name` varchar(50) NOT NULL,`country_id` int(11) NOT NULL,PRIMARY KEY (`city_id`)) ENGINE=InnoDB DEFAULT C原创 2021-01-16 17:21:20 · 2446 阅读 · 3 评论 -
MySQL高级-索引
1.索引概述MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据 库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数 据结构上实现高级查找算法,这种数据结构就是索引。如下面的示意图所示 :提炼观点:索引是什么?索引是一种数据结构作用是什么?高效获取数据左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是 一定物理相邻的),(而其中的col原创 2021-01-16 13:09:34 · 5831 阅读 · 6 评论 -
MySQL学习-MySQL数据库事务
事务概述1、什么是事务?一个事务是一个完整的业务逻辑单元,不可再分。比如:银行账户转账,从A账户向B账户转账10000.需要执行两条update语句:update t_act set balance = balance - 10000 where actno = 'act-001';update t_act set balance = balance + 10000 where actno = 'act-002';以上两条DML语句必须同时成功,或者同时失败,不允许出现一条成功,一条失败。要原创 2020-12-27 10:25:36 · 1975 阅读 · 4 评论 -
MySQL学习-子查询及limit分页
操作的表mysql> select * from emp;+-------+--------+-----------+------+------------+---------+---------+--------+| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |+-------+--------+-----------+------+------------+---------+--原创 2020-12-26 13:14:03 · 5551 阅读 · 4 评论 -
MySQL学习-连接查询
操作的表mysql> select * from emp;+-------+--------+-----------+------+------------+---------+---------+--------+| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |+-------+--------+-----------+------+------------+---------+--原创 2020-12-26 12:43:12 · 2341 阅读 · 2 评论 -
MySQL学习-group by和having
操作的表mysql> select * from emp;EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO7369SMITHCLERK79021980-12-17800.00NULL207499ALLENSALESMAN76981981-02-201600.00300.00307521WARDSALESMAN76981981-02-221250.00500.00307566JON原创 2020-12-26 11:06:13 · 2048 阅读 · 3 评论 -
MySQL学习-排序与分组函数
操作的表mysql> select * from emp;EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO7369SMITHCLERK79021980-12-17800.00NULL207499ALLENSALESMAN76981981-02-201600.00300.00307521WARDSALESMAN76981981-02-221250.00500.00307566JON原创 2020-12-26 10:30:13 · 3070 阅读 · 3 评论 -
MySQL学习-MySQL条件查询
1.条件查询概述操作的表mysql> select * from emp;EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO7369SMITHCLERK79021980-12-17800.00NULL207499ALLENSALESMAN76981981-02-201600.00300.00307521WARDSALESMAN76981981-02-221250.00500.0030原创 2020-12-25 18:57:40 · 1778 阅读 · 1 评论 -
MySQL学习-SQL语句的分类与MySQL简单查询
1.SQL语句的分类学习MySQL主要还是学习通用的SQL语句,那么SQL语句包括增删改查,SQL语句怎么分类呢?DQL(数据查询语言): 查询语句,凡是select语句都是DQL。DML(数据操作语言):insert delete update,对表当中的数据进行增删改。DDL(数据定义语言):create drop alter,对表结构的增删改。TCL(事务控制语言):commit提交事务,rollback回滚事务。(TCL中的T是Transaction)DCL(数据控制语言): grant原创 2020-12-25 12:22:54 · 1772 阅读 · 0 评论 -
redis学习-主从复制Master/slave
是什么行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主能干嘛读写分离容灾恢复怎么玩• 配从(库)不配主(库)• 从库配置命令:slaveof 主库IP 主库端口 • 每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件(具体位置:redis.conf搜寻#### REPLICATION ####) • info replication• 修改配置文件细节原创 2020-12-19 13:10:48 · 1812 阅读 · 3 评论 -
redis学习-redis事务
是什么可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。一次执行多个redis命令。能干嘛一个队列中,一次性、顺序性、排他性的执行一系列命令。怎么玩一个redis事务的开启使用了MULTI命令,这个命令总是会回复OK,(不知道能不能成功),此时用户可以一次性执行多个命令而不是一个一个的执行。redis将它们入队,所有命令将会被EXEC命令调用DISCARD放弃批处理操作。常用命令命令描述DISC原创 2020-12-16 23:37:54 · 1954 阅读 · 0 评论 -
redis学习-redis五大数据类型
五大数据类型简介String(字符串)string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。也就是例子中的k1 v1,k2 v2string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512MHash(哈希,类似java里的Map)Redis hash 是一个键值对集合。Redis ha原创 2020-12-15 22:53:47 · 1908 阅读 · 0 评论 -
redis学习-redis入门概述及简介
是什么Redis:REmote DIctionary Server(远程字典服务器)是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行 并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。Redis 与其他 key - value 缓存产品有以下三个特点: Persistence :Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用(关机就没了)原创 2020-12-10 19:16:07 · 2656 阅读 · 7 评论 -
redis学习-分布式数据库CAP原理
传统的ACID分别是什么A (Atomicity) 原子性C (Consistency) 一致性I (Isolation) 独立性D (Durability) 持久性关系型数据库遵循ACID规则,事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:1、A (Atomicity) 原子性 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。比如银行转账,从A账户转原创 2020-12-10 19:05:10 · 1784 阅读 · 2 评论 -
redis学习-NoSQL数据库的四大分类
KV键值对新浪:BerkeleyDB + Redis美团:Redis + tair阿里、百度:memcache + Redis文档型数据库(bson格式比较多)CouchDBMongoDB等价于Mysql++MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。列存储数据库Cassandra、HBase分布式文件系统原创 2020-12-10 18:53:18 · 1755 阅读 · 3 评论 -
redis学习-当下NoSQL应用场景简介
SQL和NoSQL双剑合璧Alibaba中文站商品信息如何存放看看阿里巴巴中文网站首页以女装/女包包为例架构发展历程:1.演变过程2.第5代3.第5代架构使命和我们相关的,多数据源类型的存储问题看看阿里巴巴中文网站首页,以女装/女宝宝为例1.商品基本信息(编号和名字等等,不变的,稳定的数据)名称,价格,出厂日期,生产厂商这些稳定不变的数据关系型数据库,Mysql/oracle目前淘宝在去O化(也即拿掉Oracle),注意,淘宝内部用 的Mysql是里面的大牛自己原创 2020-12-06 19:29:22 · 1733 阅读 · 1 评论 -
redis学习-NoSQL简介
1.互联网时代背景下大机遇,为什么用NoSQL1.1单机MySQL的美好年代在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。DAL dal是数据访问层的英文缩写,即为数据访问层(Data Access Layer)上述架构下,我们来看看数据存储的瓶颈是什么?1.数据量的总大小一个机器放不下时2.数据的索引(B+ Tree)一个机器的内存放不下时3.访问量(读写混合)一个实例不能承受如果满足了上述1or3个,进化原创 2020-12-06 19:23:21 · 1902 阅读 · 1 评论