后端—中间件
文章平均质量分 79
Redis、MQ、MySql等
测试开发abbey
高级测试工程师,2年C语言开发,4年服务端测开,擅长服务端测试、音视频测试
展开
-
Nginx—macOS系统上安装nginx
在macOS系统上安装nginx原创 2022-06-29 21:14:27 · 580 阅读 · 0 评论 -
MySQL—通过Adjacency List(邻接表)存储树形结构
转载自:https://www.jb51.net/article/130222.htm以下内容给大家介绍了MYSQL通过Adjacency List (邻接表)来存储树形结构的过程介绍和解决办法,并把存储后的图例做了分析(可以用来做权限控制)。今天来看看一个比较头疼的问题,如何在数据库中存储树形结构呢?像mysql这样的关系型数据库,比较适合存储一些类似表格的扁平化数据,但是遇到像树形结构这样有深度的人,就很难驾驭了。举个栗子:现在有一个要存储一下公司的人员结构,大致层次结构如下:.原创 2021-06-07 15:48:36 · 558 阅读 · 2 评论 -
消息队列—简介以及使用场景
一. RabbitMQ 简介MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。A.转载 2020-11-27 10:33:14 · 259 阅读 · 0 评论 -
消息队列—主要消息中间件优势对比
各种消息中间件对比 Kafka RabbitMQ RocketMQ 资料文档 中 有kafka作者自己写的书,网上资料也有一些 多 有一些不错的书,网上资料多 少 没有专门写rocketmq的书,网上的资料良莠不齐,官方文档很简洁,但是对技术细节没有过多的描述 开发语言 Scala Erlang java 支持的协议 自己的一套,基于TC...原创 2020-11-27 11:17:47 · 432 阅读 · 0 评论 -
RabbitMQ—AMQP协议重要概念介绍
目录一、AMQP简介二、AMQP协议中的几个重要概念1、ConnectionFactory、Connection、Channel2、Queue(队列)3、Message acknowledgment(ack 消息的确认)4、Message durability(消息的持久化)5、Prefetch count(每次向消费者发送消息的总数)6、Exchange(交换器)7、Routing key(路由key)8、Binding(绑定)9、Binding key10原创 2020-12-17 10:04:12 · 408 阅读 · 0 评论 -
RabbitMQ—流控机制
一、为什么进行流控当RabbitMQ发布消息速度快于消费速度或者系统资源不足时,RabbitMQ为避免服务器资源饱满而宕机将降低或阻断发布消息速度。可以通过rabbitmqctl和web管理页面查看连接的状态为flow,当服务器资源不足时,连接会被blocked。连接被流控后和正常使用没有什么区别。二、流控手段1.内存控制RabbitMQ服务器在启动时会计算系统内存总大小。然后会根据vm_memory_high_watermark参数指定的百分比,进行控制.可通过命令 rabbitmq...转载 2020-12-16 15:55:59 · 1398 阅读 · 0 评论 -
RabbitMQ—流量控制之内存阈值
原文:http://www.rabbitmq.com/memory.html一、内存阈值生效时间RabbitMQ服务器在启动时以及rabbitmqctl set_vm_memory_high_watermark fraction命令执行时,会检查计算机的RAM总大小。默认情况下,当RabbitMQ server的内存使用量超过RAM的40%,就会发出内存警报,并阻塞所有连接,一旦内存警报清楚(如,服务器将消息转存于磁盘,或者将消息投递给clients),服务又将恢复。默认内存阈值设置为已安装原创 2020-12-29 16:38:10 · 2571 阅读 · 2 评论 -
RabbitMQ—常见报错
1、异常:code=320, text="CONNECTION_FORCED - broker forced connection closure with reason 'shutdown' "原因:队列服务端重启后,队列发布端断开了接口,无法再次发送消息解决:发送端设置断开连接后自动启动属性,默认为断开后每隔五秒钟重试连接var factory = new ConnectionFactory();factory.AutomaticRecoveryEnabled = true; //..原创 2021-01-04 19:23:21 · 2973 阅读 · 1 评论 -
RabbitMQ—为什么使用信道channel
大家都知道,在使用rabbitmq时不管是消费还是生产都需要创建信道(channel) 和connection(连接),如下图producer示例。我们完全可以直接使用Connection就能完成信道的工作,为什么还要引入信道呢,试想这样一个场景,一个应用有多个线程需要从rabbitmq中消费,或是生产消息,那么必然会建立很多个connection ,也就是多个tcp连接,对操作系统而言,建立和销毁tcp连接是很昂贵的开销,如果遇到使用高峰,性能瓶颈也随之显现,rabbitmq采用类似nio的做法,连接t原创 2020-12-21 15:59:58 · 1760 阅读 · 0 评论 -
RabbitMQ—集群原理
一、RabbitMQ集群原理---普通模式RabbitMQ本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的erlang.cookie来实现)。因此,RabbitMQ天然支持集群。集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞吐量能力的目的。下图为集群的示例:上面图中采用三个节点组成了一个RabbitMQ的集群,Exchange A(交换器)的元数据信息在所有节点上是一致的,而Queue(存放消息的队列)的完整数据则只会存在于它转载 2020-12-16 14:43:47 · 369 阅读 · 1 评论 -
RabbitMQ—重复消费、数据丢失和消息顺序性
一 重复消息为什么会出现消息重复?消息重复的原因有两个:1.生产时消息重复,2.消费时消息重复。1.1 生产时消息重复由于生产者发送消息给MQ,在MQ确认的时候出现了网络波动,生产者没有收到确认,实际上MQ已经接收到了消息。这时候生产者就会重新发送一遍这条消息。生产者中如果消息未被确认,或确认失败,我们可以使用定时任务+(redis/db)来进行消息重试。@Component@Slf4Jpublic class SendMessage { @Autowired pr原创 2020-12-08 14:11:30 · 319 阅读 · 0 评论 -
RabbitMQ—队列迁移插件shovel的使用
原文作者:xiaoliuliu2050原文地址:rabbitmq 学习 之 shovel 插件使用(24)一、shovel插件基本功能Shovel 插件允许你同时配置多个shovel 以便在 broker 启动的时候可以随之自动启动。shovel 的高层次的目标是保证可靠连续地将 message 从某个 broker 上的 queue (作为源端)中取出,再将其 publish 到另外一个 broker 中的相应 exchange 上(作为目的端)。作为源的 queue 和...原创 2021-03-10 10:58:18 · 1121 阅读 · 0 评论 -
RabbitMQ—性能测试
线上环境出现问题,由于某数据上报接口的大量请求,导致rabbitmq的消息队列中Ready消息超过300W条,rabbitmq挂掉一、信息确认确认线上数据库配置 线上数据库几主几从,多少个分库 数据库配置文件须和线上保持一致(bin_log) 数据库容量应和线上环境一致 确认服务器是否有第三方系统依赖 最大多少个线程生产消息和最大多少个线程消费消息 确认线上并发数据 线上最大TPS 线上最大线程数二、业务逻辑客户端HTTP上报数据 adapt接收数据,解析并封装数据 ada转载 2020-12-16 10:31:46 · 3529 阅读 · 1 评论 -
Kafka—简明教程
目录学习目标:一、Kafka发展历程1、Kafka一代 - 消息队列2、Kafka二代 - Partition3、Kafka三代 - Broker集群二、Kafka的消息结构?三、Zookeeper和Kafka的关系?四、数据可靠性和重复消费五、 pull or push六、如何提高消费者处理性能参考文献&学习资源学习目标:1、Kafka的特点?2、Kafka的消息结构?3、Kafka与ZooKeeper的关系?4、Kafka与如何实现原创 2020-12-20 22:13:21 · 207 阅读 · 0 评论 -
Kafka性能强于RabbitMQ的原因
目录一、Kafka VS RabbitMQ 1、衡量指标2、结论二、Kafak的高吞吐和低延迟是怎么实现的?1.页缓存技术+磁盘顺序写 2.零拷贝技术三、关于页缓存、磁盘顺序写、Socket缓存1、页缓存2、磁盘顺序写3、Socket缓存一、Kafka VS RabbitMQ 1、衡量指标检验一款消息队列的核心性能指标是系统吞吐量和系统延迟。系统吞吐量:测量队列在硬件(特别是磁盘和 CPU)使用方面的效率。 系统延迟:测量每个...原创 2020-12-21 09:53:39 · 1251 阅读 · 0 评论 -
系列10—消息中间件
原创 2020-12-21 21:55:03 · 104 阅读 · 0 评论 -
Redis—主从复制
原文作者:编程迷思原文地址:深入学习Redis(3):主从复制一、主从复制概述主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。主从复制的作用:数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。 故障恢复:当主节点出现问题.原创 2021-01-25 10:44:38 · 297 阅读 · 0 评论 -
redis持久化的几种方式
1、前言Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。转载 2020-12-03 09:51:45 · 112 阅读 · 0 评论 -
Redis 是属于多线程还是单线程?
不同版本的Redis是不同的,在Redis4.0之前,Redis是单线程运行的,但单线程并不代表效率低,像Nginx、Nodejs也是单线程程序,但是它们的效率并不低。原因是Redis是基于内存的,它的瓶颈在于机器的内存、网络带宽,而不是CPU,在CPU还没达到瓶颈时机器内存可能就满了、或者带宽达到瓶颈了。因此CPU不是主要原因,那么自然就采用单线程了,况且使用多线程比较麻烦。但是在Redis4.0的时候,已经开始支持多线程了,比如后台删除等功能。简单来说,Redis在4.0之前使用单线程的模式转载 2020-12-03 09:30:23 · 562 阅读 · 1 评论 -
系列(三)—Redis
1、redis为什么是key,value的,为什么不支持sql?key-value简单粗暴,使用方便,对可以满足快速读写功能2、redis数据结构:String、LinkedList、HashMap、Set、ZSet考察基础知识:Redis五种数据结构3、用于查找所有符合给定模式 pattern 的 keyKEYS PATTERN(比如KEYS runoob*)Redis Keys 命令4、如果Redis有1亿个key,使用keys命令是否会影响线上服务?执行keys命令原创 2020-12-03 10:51:09 · 169 阅读 · 0 评论 -
关于redis的keys命令的性能问题
KEYS pattern查找所有符合给定模式pattern的key。KEYS*匹配数据库中所有key。 KEYSh?llo匹配hello,hallo和hxllo等。 KEYSh*llo匹配hllo和heeeeello等。 KEYSh[ae]llo匹配hello和hallo,但不匹配hillo。特殊符号用\隔开NOTICE:KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查...转载 2020-11-24 14:29:09 · 648 阅读 · 0 评论 -
Redis的过期机制
本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为缓存,有很多数据都是临时缓存一下,可能用过之后很久都不会再用到了(比如暂存session,又或者只存放日行情股票数据)那么就会出现一下几个问题了Redis会自己回收清理不用的数据吗? 如果能,那如何配置? 如果不能,如何防止数据累加后大量占用存储空间的问题? 之前一直接触Redis不是很深入,最近项目当中遇到一个需求场景,需要清空一些存放在Redis的数据,主要是通过一些时间进转载 2020-11-24 14:17:41 · 1035 阅读 · 0 评论 -
Redis -基础命令
登录redis-cli -p 5566 -a password检查key是否存在EXISTS key搜索某关键字KSYS *4返回一个Key所影响的vsl的类型TYPE key1 String设置一个键的值SET key value获取一个建的值GET key删除键对DEL key同时获取多个mget key1 key22 Hash设置一个hashHMSET key valueKey value --<key,<valueKey,value>&...转载 2020-11-24 11:05:32 · 150 阅读 · 0 评论 -
Redis五种数据结构
对redis来说,所有的key(键)都是字符串,所谓的5种数据结构是指针对value而言1、Redis五种数据结构如下:数据结构类型 说明 使用场景 常用方法 其他链接 String字符串类型 1、redis中最基本的数据类型,一个key对应一个value。 2、是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。 1.缓存: 经典使用场景,把常用信息,字符串,原创 2020-11-24 11:04:25 · 334 阅读 · 0 评论 -
SpringBoot+Redis(实现处理热点数据)
一、什么是热点数据在很短的时间内,许多数据要被多次查询(像双十一购物,查询商品)二、为什么要使用redisredis是非关系型数据库,Redis将数据存储在内存上,避免了频繁的IO操作三、场景短时间内有大量的请求来获取用户列表的数据,每次都需要从数据库进行查询。处理热点数据的基本思路:用户首次访问从数据库中取值,之后每次进行判断只要redis中有数据,就从redis中取值,其中涉及到多线程访问造成的内存穿透问题,采用双重检查的形式解决。package com.abbey.myb原创 2020-11-22 18:26:08 · 1318 阅读 · 0 评论 -
SpringBoot连接Redis超简单
建立一个springboot项目,什么也不用设置,建立一个最简单的就可以的,首先还是加入我们的Maven驱动包<!-- 加入redis连接池--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>加原创 2020-11-22 16:54:06 · 7171 阅读 · 0 评论 -
Redis面试题总结
1、Redis基础知识什么是Redis?Redis的全称是什么?Redis的全称是Remote Dictionary Server,本质上是一个key-value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中运行,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理10万次读写操作,是已知性能最快的ke-value DB。Redis的出色之处不仅仅是性能,Redis最大的魅力支持保存多种数据结构,此处单个val原创 2020-09-28 16:42:16 · 143 阅读 · 0 评论 -
(三)docker-compose 启动 Redis 服务
建议看此篇文章前先看下Docker中以redis.conf配置文件启动Redis一、编写docker-compose.yml在任意目录中创建docker-compose.yml,比如我的与redis配置文件放在同一目录下:在docker-compose.yml文件中写入下列内容:version: '3.0'services: redis: image: redis container_name: redis_02 restart: always ..原创 2020-09-24 22:10:22 · 1242 阅读 · 0 评论 -
(二)Docker中以redis.conf配置文件启动Redis
xxx原创 2020-09-23 10:18:04 · 1556 阅读 · 0 评论 -
Redis Sentinel集群部署
目录实验环境机器规划原理说明主从复制存在的问题Redis Sentinel方案安装部署1.配置并启动Master节点2.配置并启动两个Slave节点3.验证主从关系部署Sentinel节点1.配置Sentinel1节点2.启动Sentinel1节点3.确认Sentinel1节点Sentinel状态配置并启动Sentinel2和Sentinel3节点验证Sentinel状态Sentinel 配置说明port,daemonize,logf.转载 2020-09-21 15:02:26 · 308 阅读 · 0 评论 -
Redis 常用命令
Redis 常用命令登录redis-cli -p 5566 -a password检查key是否存在EXISTS key搜索某关键字KSYS *4返回一个Key所影响的vsl的类型TYPE key1 String设置一个键的值SET key value获取一个建的值GET key删除键对DEL key同时获取多个mget key1 key22 Hash设置一个hashHMSET key valueKey value --<key,<valueKe...转载 2020-09-21 14:36:37 · 77 阅读 · 0 评论 -
Redis的配置文件介绍
目录1、开头说明 2、INCLUDES 3、MODULES 4、NETWORK 5、GENERAL 6、SNAPSHOTTING 7、REPLICATION 8、SECURITY 9、CLIENTS 10、MEMORY MANAGEMENT 11、APPEND ONLY MODE 12、LUA SCRIPTING 13、REDIS CLUSTER转载 2020-09-21 13:58:14 · 250 阅读 · 0 评论 -
Redis系列(二):Redis缓存穿透和缓存雪崩是什么?
一、Redis穿透缓存穿透现象:用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。介绍两种常用解决方案:1.解决方案1:布隆过滤器参考下面这篇文章,我觉得讲得非常详细了,详解布隆过滤器的原理、使用场景和注意事项2.解决方案2:缓存空对象缓存穿透:黑客发送大量请求,请求的原创 2020-07-02 10:55:12 · 214 阅读 · 0 评论 -
Redis系列(一):各大厂都在用的Resid到底是什么?
一、redis是什么?1.Redis的定义先上一段官方定义:Redis 是开源免费(遵守BSD协议)、高性能的key-value数据库。是不是觉得上面的一句话既熟悉又陌生,作者怎么想的为啥开源免费?BSD协议又是什么?key-value数据库是什么,与传统的mysql、oracle有什么区别?别急,欲知详情,请看下面分解:Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary原创 2020-06-30 17:24:53 · 2251 阅读 · 1 评论 -
MySql—锁机制原理
原文作者:蹲厕所的熊原文地址:谈谈MySQL的锁锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具。在计算机中,是协调多个进程或线程并发访问某一资源的一种机制。在数据库当中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一种供许多用户共享访问的资源。如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素。从这一角度来说,锁对于数据库而言就显得尤为重要。1、MySQL中的锁MySQL中有着Loc..原创 2021-01-25 13:43:31 · 815 阅读 · 0 评论 -
MySql—索引原理
一、数据库索引很大一部份程序员对索引的了解仅限于到“加索引能使查询变快”这个概念为止,但有没有考虑过索引为什么能使查询变快呢?索引是使用B+树(二叉树)实现的数据结构。上图中左边是数据库中的数据表,有col1和col2两个字段,一共有15条记录;右边是以col2列为索引列的B_TREE索引,每个节点包含索引的键值和对应数据表地址的指针,这样就可以都过B_TREE在O(logn)的时间复杂度内获取相应的数据,这样明显地加快了检索的速度。再来思考下以下几个问题:数据表为什么会使用主键? ...原创 2021-01-25 11:28:58 · 106 阅读 · 0 评论 -
MySql—主从复制原理
原文作者:启迪云原文地址:深度探索MySQL主从复制原理MySQL Replication (MySQL 主从复制) 是什么?为什么要主从复制以及它的实现原理是什么?1. MySQL 主从复制概念MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。2. MySQ..原创 2021-01-25 09:53:08 · 418 阅读 · 0 评论 -
数据库性能优化—全局优化思路
一、数据库访问优化法则要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制文件时硬盘可能会是瓶颈点,为什么这些一般的工作我们能快速确认瓶颈点呢,因为我们对这些慢速设备的性能数据有一些基本的认识,如网络带宽是2Mbps,硬盘是每分钟7200转等等。因此,为了快速找到SQL的性能瓶颈点,我们也需要了解我们计算机系统的硬件基本性能指标,下图展示的当前主流计算机性能指标数据:1、从图原创 2020-11-27 14:29:32 · 545 阅读 · 0 评论 -
数据库性能优化—数据库连接池
文章出自:阿里巴巴十亿级并发系统设计(2021版)链接:https://pan.baidu.com/s/1lbqQhDWjdZe1CBU-6U4jhA提取码:8888目录接下来,让我们正式进入课程。那么为什么频繁创建连接会造成响应时间慢呢?来看一个实际的测试。用连接池预先建立数据库连接用线程池预先创建线程课程小结在前面几节课程中,我从宏观的角度带你了解了高并发系统设计的基础知识,你已经知晓 了,我们系统设计的目的是为了获得更好的性能、更高的可用性,以及更强的系统扩展能...原创 2021-01-25 09:49:38 · 683 阅读 · 1 评论 -
数据库性能优化—分库分表
文章出自:阿里巴巴十亿级并发系统设计(2021版)链接:https://pan.baidu.com/s/1lbqQhDWjdZe1CBU-6U4jhA提取码:8888目录如何对数据库做垂直拆分如何对数据库做水平拆分解决分库分表引入的问题课程小结前一节课,我们学习了在高并发下数据库的一种优化方案:读写分离,它就是依靠主从复制的技术使得数据库实现了数据复制为多份,增强了抵抗大量并发读请求的能力,提升了数据库的查询性能的同时,也提升了数据的安全性,当某一个数据库节点,无论是主库...原创 2021-02-17 19:22:42 · 722 阅读 · 0 评论