自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

有道无术,术尚可求,有术无道,止于术。

颗粒归仓,不断积累,温故知新

原创 Mycat 双主双从实现读写分离

上一篇博客我们已经实现了 mysql 数据库的双主双从的搭建,今天应粉丝的要求,用mycat 实现数据库的读写分离。

2020-07-20 21:48:21 66

原创 【MySQL 实战】04. MySQL 主从复制(双主双从)

角色ip 地址简称Master1192.168.183.134134 主Slave1192.168.183.133133 从Master2192.168.183.128128 主Slave2192.168.183.135135 从修改134主配置文件 vi /etc/my.cnf#主服务器唯一IDserver-id=1#启用二进制日志log-bin=mysql-bin# 设置不要复制的数据库(可设置多个)binlog-ignore-...

2020-07-19 12:02:26 53

原创 【MySQL 实战】03. MySQL 主从复制(一主一从)

1. 原理主动复制原理图:主库负责写,从库负责读,从库需要不断获取主库数据更新到从库。(存在延时)我们知道主库添加数据是要写逻辑日志binlog,从库通过 I/O进程获取主库的binlog文件,然后写入到中转日志文件 Relay log,在从Relay log 中恢复数据。2. 配置134 主服务器配置,首先修改 mysql 配置文件 vi /etc/my.cnf#主服务器唯一IDserver-id=1#启用二进制日志log-bin=mysql-bin# 设置不要复制的数据库(可设置多

2020-07-19 10:40:00 41

原创 Centos7 搭建数据库中间件 - Mycat

个人习惯,一般安装到 /usr/local/software--解压tar -zxvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz定位到 conf 目录 进行文件配置,分别修改server.xml文件和schema.xml 文件。vi server.xml,修改user标签。vi schema.xml,删除文件,重新编写配置文件<?xml version="1.0"?><!DOCTYPE mycat:

2020-07-19 09:11:40 30

原创 【MySQL 实战】基础篇:Centos7 安装 MySQL

1. 安装# 下载wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm# 下载安装rpm -ivh mysql57-community-release-el7-8.noarch.rpm# 安装 mysqlserversudo yum install mysql-server# 启动 mysqlservice mysqld.service start获取临时密码 sudo grep 'temporary

2020-07-18 10:44:47 38

原创 【JVM】01 内存模型(运行时数据区)

JVM(java virtual machine),一种可以运行 java 字节码的虚拟机。java 语言一次编译,到处运行,间接的说明了,只要编译的文件和 jvm 对加载编译的文件格式一致,任何语言都可以由 JVM 运行。JVM 由三个主要的子系统构成类加载子系统运行时数据区(内存结构)执行引擎今天我们主要学习 JVM 的内存模型 — 运行时数据区。Java 的内存模型(运行时数据区)方法区堆...

2020-06-02 15:21:32 123 2

原创 【Redis】16. HyperLogLog — 亿级别的基数统计

场景老板让你统计一下网站的PV(浏览量,用户访问一次自增一次)和UV((独立访客,每个用户每天只记录一次)。PV 可以很好解决,我们可以使用redis 计数器,当天日期为key,每收到一个请求,INCRBY 就自增加一,最后结果就是浏览量了。UV,一个用户每天访问多次,但只能记录一次,是不是可以用缓存的 SET 集合,SET 可以去重,但是问题来了,随着访问量的增加,如果用 SET 集合,这是相当浪费内存的,不仅如此,如果对set集合聚合统计,实现也很复杂。使用位图,位图是以bit 为存储单位,是i

2020-05-28 10:41:37 149

原创 【Redis】15. 布隆过滤器(Bloom Filter) — 亿级别的过滤器

问题在 缓存穿透 一文中我们讲到了可以使用布隆过滤器可以解决缓存穿透问题。例如查询一个用户ID,它是如何快速查询,它又不是数组,又是怎么提高随机访问特性的查询效率的呢?我们平时刷短视频(抖音,快手等)是如何做到刷到的视频是不重复的呢?如果把用户刷到的信息都存放在数据库中,抖音八亿用户,每次都要进行 exists 判断该视频是否被看过,滑动一下就需要去库中查看,磁盘是远远跟不上性能的。如果用缓存,缓存容量有限,且需要对浏览的记录设置永不过期,这么多用户,用内存存记录,成本的?哪个企业会这么做?什么是布

2020-05-28 09:50:50 172

原创 【Redis】14. 跳跃表(SkipList) — 为什么 Redis 使用跳跃表来实现有序集合(Sorted Set)而不是红黑树或者平衡二叉树呢?

Redis 的有序集合(Sorted Set)就是用跳表来实现的。跳跃表是一种随机化的数据结构。我们可以把他看做 Java 中 SortedSet 和HashMap 的结合体,set 保证了value 值就有唯一性,且可以保证每一个value 有一个自己的权重值 socre ,用socre 达到排序的目的。一个单链表的结构无论是不是有序的,遍历都是从头到尾进行遍历,有的人说了,用二分法,二分法是针对数组进行查找的一种方法,而链表不可以,链表逻辑上是连续的,物理存储上是不连续的。数组不支持随机的插入和删除,

2020-05-27 18:55:17 78

原创 【Redis】13. Redis 为什么选择单线程,而 redis 4.0 之后部分命令开始使用多线程。

Redis 为什么使用单线程?因为 Redis 是基于内存的操作,CPU 不是 Redis 的瓶颈,Redis 的瓶颈最有可能是 机器内存的大小 或者 网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了。----官方解释。Redis 真正的瓶颈问题并不是CPU ,而是内存,以及网络传输各种延迟。使用单线程带来的好处?使用单线程模型能带来更好的 可维护性,方便开发和调试;(相对于多线而言,程序执行顺序具有却行性,没有任何诡异的bug)使用单线程模型也能 并发

2020-05-27 11:59:39 95

原创 【redis】12. 缓存和数据库双写一致性问题

上一篇我们在 缓存雪崩,穿透,击穿中讲到了为什么使用缓存,以及使用缓存可能会遇到哪些问题?其中就有缓存和数据库双写一致性问题。那什么是缓存和数据库双写一致性问题呢?是什么导致了一致性的问题呢?什么是缓存和数据库双写一致性问题?数据库中的数据和缓存中的数据不一致如果我们只是读操作,肯定不会存在缓存和数据库双写一致性问题。但是如果更新或者删除操作呢?是什么导致了数据库和缓存双写一致性问题?我们知道执行一个更新操作花费的时间远远大于一个读操作花费的时间。更新操作,我们是先更新数据库呢还是先更新缓存呢?

2020-05-27 11:25:27 96

原创 【Redis】8. 你了解缓存雪崩,缓存穿透,缓存击穿么?它们用共性么?

什么是缓存雪崩,缓存击穿,缓存穿透呢?

2020-05-27 09:40:41 96

原创 【Redis】11. pipeline 流水线

上一节我们 redis 执行命令的生命周期大概为:发送命令 (客户端发送)排队 (服务端排队)执行命令 (服务端执行)返回结果 (服务端返回)我们知道服务端每秒可执行上万条命令,执行一条命命令是微妙级别的,客户端发送一条命令,需要在网络中进行传输,网络是不稳定的,这个传输时间是很长的,可见网络传输对redis 的性能是有一定影响的。n 条命令所花费的时间为: n 次网络传输时间 + n次服务器处理时间pipeline(流水线):客户端批量发送命令,此时处理n 条命令所花费的

2020-05-26 19:19:41 70

原创 【Redis】10. 慢查询

redis 运行生命周期发送命令排队 (单线程,所以要排队)执行命令 (不同的命令,执行时间不同。有的执行时间长,影响整体性能)返回结果慢查询慢查询发生在执行命令阶段(第三阶段),当发现某redis命令执行时间过长,就会记录该命令到慢查询日志当中。使用者可以更好地监视和找出在业务中一些慢redis操作,找到更好的优化方法。慢查询设置最大超时时间,慢查询的阈值(单位:微妙)CONFIG SET slowlog-log-slower-than num设置超过多少微秒的查询

2020-05-26 17:00:18 51

原创 【Redis】0. 关系型数据库和非关系型数据库入门篇

什么是关系型数据库关系型数据库是依据关系模型来创建的数据库。所谓关系模型就是“一对一、一对多、多对多”等关系模型,关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。关系模型包括数据结构(数据存储的问题,二维表)、操作指令集合(SQL语句)、完整性约束(表内数据约束、表与表之间的约束)。什么是非关系型数据库NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.

2020-05-26 16:35:09 164

原创 【Redis】7. SpringBoot 整合 lettuce
原力计划

新建 maven 项目导入依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.

2020-05-23 14:51:04 113

原创 【消息队列】06 避免内存溢出和频繁的垃圾回收

内存如果溢出,通过自动内存管理机制实现,垃圾回收是不可控的,但是可以降低回收的频率。自动内存管理机制的实现原理 —避免内存溢出1申请内存过程计算要创建对象所需要占用的内存大小在内存中找一块儿连续并且是空闲的内存空间,标记为已占用;把申请的内存地址绑定到对象的引用上,这时候对象就可以使用了。垃圾回收过程— 标记、清除两阶段标记阶段:从 GC Root 开始,你可以简单地把 GC Root 理解为程序入口的那个对象,标记所有可达的对象,因为程序中所有在用的对象一定都会被这个 GC Root

2020-05-18 11:11:57 70

原创 【消息队列】05 如何处理消息积压问题

为什么会有消息积压?如何处理消息积压?

2020-05-18 10:59:07 125

原创 【消息队列】04 幂等性解决重复消息问题

幂等性如果一个函数 f(x) 满足:f(f(x)) = f(x),则函数 f(x) 满足幂等性。计算机中描述一个操作,方法或者服务,一个幂等操作的特点是,其任意多次执行所产生的影响均与一次执行的影响相同。总结 :一个幂等方法使用相同参数,进行一次或多次调用对系统产生的影响是一样的,重复执行对系统没有任何改变。...

2020-05-18 10:57:03 59

原创 【消息队列】03 消息队列是如何确保消息不丢失的

消息可靠传递,我们要看消息都在出现在哪里?生产阶段通过收到broker 的确认响应,则表示发送成功。同步发送消息可以通过 try catch 捕获异常,进行重发,如果是异步发送消息,则需要写回调方法检查消息是否丢失。存储阶段将消息写入多个副本,或者通过配置刷盘和复制相关参数,不因Broker宕机导致消息丢失。消费阶段处理完所有的消费业务逻辑后,在发ACK。...

2020-05-18 10:52:58 82

原创 【消息队列】02 如何选择消息队列 —技术选型

消息队列这么多,你是怎么做技术选型的呢?技术选型的标准是什么?技术选型的标准必须是开源产品,有Bug可以修改源码。必须是近几年流行,社区活跃度高,遇到Bug方便解决。与周边的生态系统兼容和集成度要高。消息传递可靠;确保消息不丢失,支持集群,有良好的性能且满足大多数场景的性能要求。RabbitMqRocketMqkafka第二梯队消息队列总结若对消息队列的功能和性能没有很高的要求,建议用RabbitMq,开箱即用。RocketMq主要场景是处理在线业务,例如交易系统用消

2020-05-18 10:44:13 66

原创 【消息队列】01 为什么需要消息队列 — 解耦、异步、削峰

为什么需要消息队列?如何做消息队列的选型? 消息队列——解耦,异步,削峰!

2020-05-18 10:23:06 139

原创 【Java 并发编程】 06 从底层解读万能的 synchronized
原力计划

synchronized上一篇 【Java 并发编程】 05 一个能和面试官扯很久的 volatile 关键字 中讲到了 volatile 可以解决线程并发执行中可见性和有序性问题。 在【Java 并发编程】 07 线程安全 中简单介绍了可以通过 CAS 解决原子性问题。volatile 关键字和 乐观锁只能解决特定的问题,那有没有一种方法可以解决这些统一的问题呢? 万恶的 Bug 起源—并发编程的三大特性 有,有请我们今天的主角闪亮登场 synchronized 关键字synchronized 关键

2020-05-17 16:41:49 43

原创 【Java 并发编程】 07 线程安全 — 没有共享就没有伤害! 东西多了就不知道珍惜了! 我有残疾,你随意修改!我抢到了我加把锁!即使被伤害,世界也要充满爱!

什么是线程安全呢?线程安全并非“线程安全”,大家不要望文生义,所谓的线程安全其实指的是内存的安全,随着操作系统的发展,不再是单核CPU,而是多核多任务,也就意味的进程的并发执行,回想一下是不是可以一边敲着代码,一边听着歌,此时问题来了,为什么这两个进程互不影响呢?操作系统对此做了一系列的保障,是的每一个进程有自己的一块内存空间,进程之间是隔离的,彼此不能互相访问。每个进程有自己的一块特殊公共的区域,称为堆内存,既然是公共区域,那么一个进程里面的多个线程都可访问的到,这也就是 bug 的起源。一个线程访问

2020-05-17 12:00:26 98

原创 【Java 并发编程】 01 多线程的实现
原力计划

常用的实现多线程的2种方式:继承 Thread 或者实现 Runanable 接口Thread 类 实现了 Runnable 接口public class Thread implements Runnable {}//继承 Thread 类public class MyThread extends Thread { /* static Thread currentThread(),返回正在执行的线程对象的引用 public static void sleep(l

2020-05-16 18:27:28 115 1

原创 【Java 并发编程】 02 线程的生命周期(线程状态之间的转换)
原力计划

如果对并发编程状态不是很了解的同学,我们可以回想一下操作系统原理关于进程的生命周期的学习,学习操作系统原理的同学都知道,进程也有自己的生命周期,进程可大致分为三种状态,以及三种状态之间的转变, ???? 操作系统—进程。三种状态执行态:CPU正在运行的状态就绪态:一旦获得CPU就可以运行的状态。一句话总结;完事具备,只欠东风(CPU)阻塞态:进程等待资源或某个事件的发生而暂停的状态。状态间转换阻塞态 ???? 就绪态(唤醒过程)执行态 ???? 就绪态(因为是分时操作,当时间片用完,执行

2020-05-16 17:28:32 175

原创 【Java 并发编程】 05 一个能和面试官扯很久的 volatile 关键字

上一篇我们在Java内存模型中(JMM)中 Happens-before 中讲到了volatile原则,对于volatile变量的写操作会早于对其的读操作。 volatile 意思就是可见的,常用来修饰某个共享变量,意思是当共享变量的值被修改后,会及时通知到其它线程上,其它线程就能知道当前共享变量的值已经被修改了。volatile 关键字用来修饰实例变量和类变量。被 volatile 修饰后的变量可以解决并发编程可见性和有序性问题。但是不能保证原子性,且volatile 只能作用于实例或者类变量,不能修饰

2020-05-13 15:58:06 65

原创 【Java 并发编程】 04 JMM内存模型解决有序性和可见性问题

Java内存模型,即 JMM (Java Memory Model),JMM 是一种规范,它规范了 JVM 运行的行为,多线程操作对共享内存读取时,所能读取到的值应该遵守的规则。提供了一些解决可见性和有序性问题的方法例如 volatile、synchronized 和 final 三个关键字。JMM为程序中的所有操作定义了一定的规则,叫做Happens-Before 规则**Happens-Before 规则 解决了有序性和可见性的问题,如果你想保证你代码执行顺序不变(即有序性),你就需要遵守 Hap

2020-05-13 11:56:52 59

原创 【Java 并发编程】 03 万恶的 Bug 起源—并发编程的三大特性
原力计划

今天让我们一起走进并发编程中万恶的Bug起源—并发编程中三大特性。今天学习目标如下:并发编程的三大特性都要哪些 ?并发编程三大特性的由来?如何解决并发编程三大特性问题?一张导图概览全文基本概念原子性:一组操作要么全部成功,要么全部失败。可见性:一个线程对变量进行了修改,另外一个线程能够立刻读取到此变量的最新值。有序性:代码执行顺序并不一定和你编写的顺序一致。为什么会有并发编程的三大特性呢?话说女娲补天,精卫填海 …一直到上世纪60年代英特尔创始人戈登·摩尔讲的:“集成电路上可容纳的

2020-05-13 11:13:59 67

原创 【MongoDB 实战】 08 MongoDB 事务开发(三)—多文档事务

待续!

2020-04-26 20:46:34 98

原创 【MongoDB 实战】 08 MongoDB 事务开发(二)—读操作事务

待续!

2020-04-26 20:45:57 67

原创 【MongoDB 实战】 08 MongoDB 事务开发(一)— 写操作事务
原力计划

准备在学习 MongoDB 事务之前我们需要搭建一个 MongoDB 的复制集,可以参考 【MongoDB 实战】 04 单台服务器搭建 MongoDB 复制集。盲区MongoDB 数据库是支持事务的,2018 年 MongoDB 4.0 开始支持分布式事务,那么MongoDB 是如何保证事务数据的一致性的呢? 我们从读操作和写操作两方面分别介绍一下MongoDB 事务是如何保证数据的一致...

2020-04-26 20:45:02 90

原创 【MongoDB 实战】 07 MongoDB 是如何进行文档模型设计的呢?
原力计划

传统的数据库设计是如何进行的呢?MongoDB 文档模型设计有哪些特点,与关系模型区别?文档模型设计步骤有哪些 ?文档模型设计优点?传统模型设计首先进行需求分析,得出概念模型,其次通过E-R 实体关系图,描述各实体之间的关系,最后进行物理模型设计,三范式等设计原则设计表结构,这是一个逐层细化的过程。E-R实体关系图三要素我们还记得么,实体,属性,关系,结构如下所示:JSON ...

2020-04-26 16:06:40 102

原创 【MongoDB 实战】 06 MongoDB 聚合框架(Aggregation Framework)

在说 MongoDB 聚合框架之前,我们先了解下关系型数据库中的聚集函数和分组统计,我们常见的SQL五大的聚集函数有如下所示:可见SQL 中的聚集函数是用来对数据表中的数据进行筛选过滤,然后对过滤后的数据进行一系列的函数运算。MongoDB 中的聚合框架(Aggregation Framework)和SQL 中的聚集函数一样,它是一个计算框架,作用在一个或几个集合上面,对集合中的数据进行...

2020-04-25 15:43:11 48

原创 【MongoDB 实战】 05 MongoDB 基本操作
原力计划

mysql 与 MongoDB 逻辑关系对比,关系型数据库中的表和行 ,分别对应 mongodb 数据库中的集合和文档。库操作show dbs :查看当前数据库列表use user :两个含义,一个是创建名为user的数据库,一个是使用该数据库db :查看当前数据库db.createCollection('表名') :当前使用的数据库创建表show collections :展示当前...

2020-04-25 11:39:02 101

原创 【MongoDB 实战】 04 单台服务器搭建 MongoDB 复制集
原力计划

前提安装 MongoDB,且已经配置好的环境变量创建数据目录mkdir -p /data/db{1,2,3}分别在 db1 db2 db3 目录下创建 mongod.conf 配置文件,三个配置文件的端口号分别是 27017,27018,27019,且修改配置文件日志以及数据存放路径。配置文件具体如下:systemLog: destination: file path...

2020-04-21 09:06:56 66

原创 【MongoDB 实战】 03 MongoDB 复制集机制及原理—实现高可用

MongodDB 复制集解决了什么问题? 复制集的机及其原理是什么? 复制集的选举投票机制是什么?是如何实现的? 复制集的常用事项是?

2020-04-20 19:40:00 57

原创 【MongoDB 实战】 01 MongoDB 入门篇

概览图MongoDB vs 关系型数据库OLTP 和 OLAP数据库的垂直扩展和水平扩展数据表的垂直拆分和水平拆分现在你用自己的语言说一下,mongoDB 有哪些优势,适用哪些场景么,欢迎评论回复!...

2020-04-20 11:53:29 58

原创 【MongoDB 实战】 02 Centos7 安装 MongoDB 4.0.6
原力计划

下载中心下载,解压,改名定位到 usr/local 目录下进行 下载wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.6.tgz解压tar -zxvf mongodb-linux-x86_64-rhel70-4.0.6.tgz修改名称为 mongodbmv mongodb-linux...

2020-04-20 11:53:06 80

原创 【MySQL 实战】02. 一条SQL 更新语句是如何具体执行的呢?
原力计划

我们在 MySQL 实战 01 篇中讲到了一条SQL查询语句是如何执行的? 首先经过连接器进行客户端的连接,权限认证等操作,其次先去缓存中查看,如果缓存中命中则直接返回,如果未命中,则进入分析器,分析器对SQL查询语句进行语法语义分析,优化器执行查询计划,选在最佳执行计划,执行器调用存储引擎的接口,返回要查询的结果集。文章末尾我们讲到了,一条查询语句是这样进行的,那么一条更新语句是如何进行的呢?...

2020-04-13 10:47:35 73

提示
确定要删除当前文章?
取消 删除