数据库
文章平均质量分 71
所有数据库
summer_west_fish
本科毕业深圳大学,拥有Java开发10年的经验。 拥有Devops、敏捷和项目管理多年的经验,并且获得PMP、ACP和DOP等相关证书。
展开
-
ETCD分布式缓存
ETCD的特性包括完全复制(集群中的每个节点都可以使用完整的存档)、高可用性(可用于避免硬件的单点故障或网络问题)、一致性(每次读取都会返回跨多主机的最新写入)、简单(有一个定义良好、面向用户的API)、安全(实现了带可选的客户端证书身份验证的自动化TLS)、快速(每秒10000次写入的基准速度)和可靠(使用Raft算法实现了存储的合理分布)。ETCD集群的选主过程基于Raft一致性算法,该算法要求集群中至少有一半加一(N/2 + 1)的节点是可用的,以便能够达成共识并进行正常的操作。原创 2024-03-06 09:52:14 · 402 阅读 · 3 评论 -
AI向量数据库
矢量数据库是一种将数据存储为高维向量的数据库,高维向量是特征或属性的数学表示。每个向量都有一定数量的维度,范围从几十到几千不等,具体取决于数据的复杂性和粒度。矢量数据库(Vector Database)和矢量开发库(Vector Library)都是实现矢量相似性搜索的技术,但它们在功能和可用性上有所不同。矢量数据库可以存储和更新数据,处理各种类型的数据源,在数据导入期间执行查询,并提供用户友好和企业就绪的功能。原创 2023-10-18 17:57:21 · 189 阅读 · 0 评论 -
Redis客户端通信RESP协议
RESP协议在Redis 1.2中引入,但在Redis 2.0中成为与Redis服务器通信的标准方式。这条命令,不会直接以这种格式的形式发送到 Redis Server,而是经过RESP的序列化之后再发送给Redis执行,RESP实际上是一个序列化协议,它支持以下数据类型:简单字符串、错误、整数、大容量字符串和数组。ESP是Redis序列化协议,Redis客户端RESP协议与Redis服务器通信。这个指令,而是存储RESP序列化之后的指令。set name 竹子爱熊猫。set name 竹子爱熊猫。原创 2023-10-11 16:13:40 · 137 阅读 · 0 评论 -
Redis面临的挑战
大多数业务系统,跑在Redis上,这是很多一直使用MySQL做业务系统的同学所不能想象的。看完了上面的介绍,相信你能够对Redis能够实现的存储功能有个大体的了解。打开你的社交app、游戏app、视频app,看一下它们的功能,能够涵盖多少呢?要强调的是,某些数据,并不是一定要落地到RDBMS才算安全,它们并不是一个强需求。那既然Redis这么厉害,为什么还要有mysql、tidb这样的存储呢?关键还在于业务属性上。原创 2023-10-10 10:29:57 · 285 阅读 · 0 评论 -
Redis 内存淘汰策略
为什么要有内存淘汰机制大家都知道 Redis 中的键会设置过期时间,当到达过期时间时会通过一定策略清除对应 key,但是 redis 内存是由上限的,当达到内存上限时,就要通过一定策略淘汰掉相应 kv 键值对。Redis 内存上限maxmemory 配置选项使用来配置 Redis 的存储数据所能使用的最大内存限制。可以通过在内置文件redis.conf中配置,也可在Redis运行时通过命令CONFIG SET来配置。例如,我们要配置内存上限是100M的Redis缓存,那么我们可以在 red.原创 2021-06-23 09:35:19 · 700 阅读 · 0 评论 -
Redis布隆过滤器
布隆过滤器 redis转载 2021-08-16 19:00:56 · 367 阅读 · 0 评论 -
Redis的三种集群方式
redis有三种集群方式:主从复制,哨兵模式和集群。一、主从复制主从复制原理从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 从服务器完成对快照的载入,开始接收命令请求...转载 2021-07-22 10:43:48 · 126 阅读 · 0 评论 -
Redis 内存碎片
内存碎片是指在内存分配的时候,产生的不能重复利用的空间。例如,内存空间还有3K,应用程序想申请连续的3K空间,虽然内存空间够,但是空间分配为2K,1K,内存分片会占用操作系统分配给redis的内存空间,严重影响redis性能。原创 2022-09-13 18:02:11 · 1157 阅读 · 0 评论 -
三种经典的缓存使用模式
一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。 强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大; 弱一致性:这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态; 最终一致性:最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一...转载 2021-07-19 15:13:21 · 658 阅读 · 0 评论 -
Redis分布式锁分析
方案:利用Redis的setnx方法简单实现分布式锁Redis中setnx方法有如下优点:时间复杂度: O(1)返回值:命令在设置成功时返回 1 , 设置失败时返回 0 。只在键 key 不存在的情况下, 将键 key 的值设置为 value 。 若键 key 已经存在, 则 SETNX 命令不做任何动作。 SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。一、分布式锁实际案例基础方法public void lock(String原创 2022-05-25 17:48:05 · 362 阅读 · 0 评论 -
Redis最常见应用场景
Redis的第一个应用场景是Redis作为缓存对象来加速Web应用的访问。在该场景下,有一些存储于数据库中的数据会被频繁访问,如果频繁的访问数据库,数据库负载会升高,同时由于数据库IO比较慢,应用程序的响应会比较差。此时,如果引入Redis来存储这些被频繁访问的数据,就可以有效的降低数据库的负载,同时提高应用程序的请求响应。原创 2023-10-06 09:51:04 · 319 阅读 · 0 评论 -
Redis集群 和 一致性hash算法
Redis集群简介Redis 集群是一个提供多个Redis(分布式)节点间共享数据的程序集Redis 集群的键空间被分隔了16384个hash槽(slot), 因此集群最大的节点数据是16384Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的错误。Redis 集群通过分区(partition)来提供一定程度的可用性(availabilit原创 2021-03-30 14:35:26 · 1498 阅读 · 0 评论 -
SpringCloudOAuth2-基于Redis管理Session
一、SessionRepositoryRequestWrapper重点看一下重写的getSession方法,代码如下:@Overridepublic HttpSessionWrapper getSession(boolean create) { //1、从本地缓存中获取 HttpSessionWrapper currentSession = getCurrentSession(); if (currentSession != null) { return.原创 2022-05-30 17:42:01 · 1197 阅读 · 0 评论 -
Redis为什么这么快?
Redis 的单线程指的是 Redis 的网络 IO 以及键值对指令读写是由一个线程来执行的。对于 Redis 的持久化、集群数据同步、异步删除等都是其他线程执行。原创 2021-12-17 16:28:38 · 104 阅读 · 0 评论 -
一致性哈希和哈希槽
1、集群分片模式如果 redis 只用复制功能做主从,那么当数据量巨大的情况下,单机情况下可能已经承受不下一份数据,更不用说是主从都要各自保存一份完整的数据。在这种情况下,数据分片是一个非常好的解决办法。redis 的 custer 正是用于解决该问题。它主要提供两个功能:1、自动对数据分片,落到各个节点上2、即使集群部分节点失效或者连接不上,依然可以继续处理命令对于第二点,它的功能有点类似于 sentienl 的故障转移,在这里不细说。下面详细了解下 redis 的槽位分片原理,在此之转载 2021-08-16 18:09:57 · 1406 阅读 · 1 评论 -
SpringCould Gateway统计在线人数
方案:利用Redis中zset数据类型进行在线人数统计Redis中zset数据类型有如下优点:Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。 有序集合的成员是唯一的,但分数(score)却可以重复。 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32- 1 (4294967295, 每.原创 2022-05-24 17:13:39 · 1080 阅读 · 2 评论 -
Redis5种数据类型
一、String(字符串)在任何一种编程语言里,字符串String都是最基础的数据结构, 那你有想过Redis中存储一个字符串都进行了哪些操作嘛?在Redis中String是可以修改的,称为动态字符串(Simple Dynamic String 简称 SDS),说是字符串但它的内部结构更像是一个 ArrayList,内部维护着一个字节数组,并且在其内部预分配了一定的空间,以减少内存的频繁分配。Redis的内存分配机制是这样: 当字符串的长度小于 1MB时,每次扩容都是加倍现有的空间。原创 2021-06-21 18:25:42 · 109 阅读 · 0 评论 -
数据库与缓存如何保证双写一致性?
一、操作缓存,到底是删除缓存,还是更新缓存?Cache-Aside在写入请求的时候,为什么是删除缓存而不是更新缓存呢? 线程A先发起一个写操作,第一步先更新数据库 线程B再发起一个写操作,第二步更新了数据库 由于网络等原因,线程B先更新了缓存 线程A更新缓存。 这时候,缓存保存的是A的数据(老数据),数据库保存的是B的数据(新数据),数据不一致了,脏数据出现啦。如果是删除缓存取代更新缓存则不会出现这个脏数据问题。更新缓存相对于删除缓存,还有两...转载 2021-07-19 15:54:26 · 278 阅读 · 0 评论 -
为什么Redis 6.0 引入多线程?
Redis 6.0中的多线程,也只是针对处理网络请求过程采用了多线程,而数据的读写命令,仍然是单线程处理的。但是,不知道会不会有人有这样的疑问:Redis不是号称单线程也有很高的性能么?不是说多路复用技术已经大大的提升了IO利用率了么,为啥还需要多线程?主要是因为我们对Redis有着更高的要求。根据测算,Redis 将所有数据放在内存中,内存的响应时长大约为 100 纳秒,对于小数据包,Redis 服务器可以处理 80,000 到 100,000 QPS,这么高的对于 80% 的公司来说原创 2021-12-17 17:30:54 · 1004 阅读 · 0 评论 -
Redis 缓存雪崩、缓存穿透、缓存击穿解决思路
缓存雪崩缓存雪崩,由于缓存中有大量数据同时过期失效或者缓存出现宕机,大量的应用请求无法在 Redis 缓存中进行处理,进而发送到数据库层导致数据库层的压力激增,严重的会造成数据库宕机。对于缓存中有大量数据同时过期,导致大量请求无法得到处理。解决方式:数据预热,将发生大并发访问前手动触发加载缓存不同的key, 可以避免在用户请求的时候,先查询数据库设置不同的过期时间,让缓存失效的时间点尽量均匀双层缓存策略, 在原始缓存上加上拷贝缓存,原始缓存失效时可以访问拷贝缓存,且原始缓存失效时间设置为短期,拷原创 2021-01-21 00:11:14 · 108 阅读 · 0 评论 -
Seata的AT(Automatic Transaction)
在Seata的AT模式下,应用程序在执行分布式事务时,通过在关键的业务操作前后插入补偿逻辑,以保证事务的一致性。当发生事务回滚时,通过执行补偿逻辑来撤销之前的操作,从而达到回滚的效果。1. 应用程序通过Seata的API启动一个全局事务,并获取一个全局事务ID。2. 在事务执行期间,应用程序按照业务逻辑执行数据库操作,并在关键操作前后插入补偿逻辑。4. 当应用程序调用事务的提交接口时,Seata会协调各个分支事务的提交,并等待分支事务的响应。原创 2023-06-01 11:37:40 · 613 阅读 · 0 评论 -
MySQL常用命令
MySQL常用命令。原创 2023-03-07 09:31:37 · 63 阅读 · 0 评论 -
DBLE数据拆分简介
在dble中将表格按照数据分片的大致方式将表格的归为三个种类:原创 2023-02-10 15:20:29 · 163 阅读 · 0 评论 -
mysqld_exporter安装教程
mysqld_exporter安装教程原创 2023-01-30 10:44:25 · 1966 阅读 · 0 评论 -
MySQL CPU和内存飙高排查
MySQL CPU飙高排查。原创 2023-01-10 17:42:01 · 999 阅读 · 0 评论 -
MySQL联合索引遵循最左前缀匹配原则
具体优化方式,就是匹配的时候遇到第一列索引就跳过,直接匹配第二列索引的值,这样就可以用到联合索引了。三个字段上创建联合索引时,实际上是创建了三个索引,分别是(a)、(a,b)、(a,b,c)。查询条件中包含这些索引的时候,查询就会用到索引。虽然SQL查询条件只有name字段,但是从执行计划中看到依然是用了联合索引。遵循最左前缀匹配原则,即最左优先,查询的时候会优先匹配最左边的索引。如果查询条件包含(a,c),也会用到索引,相当于用到了(a)索引。)建立联合索引,性别字段只有两个枚举值。原创 2022-11-03 21:48:53 · 388 阅读 · 0 评论 -
MySQL使用基础规范
④对null处理的时候,只能采用is null或is not null,而不能采用=、in、原创 2022-10-22 18:50:42 · 159 阅读 · 0 评论 -
ElasticSearch基础语法
【代码】ES基础语法。原创 2022-10-12 12:03:39 · 665 阅读 · 0 评论 -
Linux安装DBLE
1、下载并安装通过此链接( https://github.com/actiontech/dble/releases )下载最新版本的安装包 2、修改db.xml配置文件3、启动dble4、测试dble分库,使用man1账户 结果:2、cluster.cnf配置文件内容3、修改bootstrap.cnf文件中instance不修改会引起如下错误:原创 2022-10-10 11:51:36 · 704 阅读 · 0 评论 -
Linux7安装MySQL8.0
2、CentOS7安装MySQL8报错:Error: Package: mysql-community-server-8.0.28-1.el8.x86_64 (mysql80-community) Requires: libtirpc.so.3()(64bit)从mysql官网上获取community版本最新的yum repository并安装。1、镜像源地址一定要和操作系统版本匹配,不然安装过程中容易出现问题。安装mysql-community-server。移除所有mysql开头的包。原创 2022-10-10 10:50:19 · 1917 阅读 · 0 评论 -
Sharding-JDBC实现分库分表
Sharding-JDBC实现分库分表原创 2022-10-09 11:46:28 · 627 阅读 · 0 评论 -
MySQL单表数据到达2000w,为什么就需要考虑分表?
我们假设主键ID为bigint类型,长度为8字节(面试官问你int类型,一个int就是32位,4字节),而指针大小在InnoDB源码中设置为6字节,所以就是 8+6=14 字节,16k/14B =16*1024B/14B = 1170。B+树高度一般为1-3层,如果B+到了4层,查询的时候会多查磁盘的次数,SQL就会变慢。这是因为索引一般是B+树结构,数据千万级别的话,B+树的高度会增高,查询就变慢啦。因此,一棵高度为2的B+树,能存放1170 * 16=18720条这样的数据记录。原创 2022-10-09 10:48:23 · 1569 阅读 · 0 评论 -
MySQL两阶段提交
执行器先找到引擎取ID=2这一行。ID是主键,引擎直接用树搜索找到这一行。如果ID=2这一行所在的数据也本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。将redo log的写入拆成了两个步骤:prepare 和 commit,这就是两阶段提交。执行器拿到引擎给的行数据,把这个值加上1,得到新的一行数据,再调用引擎接口写入这行新数据。然后告知执行器执行完成了,随时可以提交事务。原创 2022-10-09 10:16:51 · 268 阅读 · 1 评论 -
行存储 VS 列存储
①数据是按行存储的。②没有索引的查询使用大量I/O。比如一般的数据库表都会建立索引,通过索引加快查询效率。③建立索引和物化视图需要花费大量的时间和资源。④面对查询需求,数据库必须被大量膨胀才能满足需求。①数据按列存储,即每一列单独存放。②数据即索引。③只访问查询涉及的列,可以大量降低系统I/O。④每一列由一个线程来处理,即查询的并发处理性能高。⑤数据类型一致,数据特征相似,可以高效压缩。转载 2022-10-05 12:48:35 · 1041 阅读 · 0 评论 -
分库分表思考
什么是分库分表为什么需要分库分表如何分库分表?什么时候开始考虑分库分表分库分表会导致哪些问题分库分表中间件简介。原创 2022-10-01 10:37:37 · 181 阅读 · 0 评论 -
DBeaver 连接 Phoenix
下载地址:https://github.com/dbeaver/dbeaver/tags原创 2022-07-14 11:07:46 · 709 阅读 · 0 评论 -
PLSQL Developer14连接Oracle详细过程
下载地址:Instant Client for Microsoft Windows (x64) 64-bit | Oracle 中国解压客户端工具到一个目录(解压文件到当前目录,自动合并成一个目录) 电脑(右键)→属性→高级系统设置→环境变量→系统环境变量→新建变量名:NLS_LANG变量值: AMERICAN_AMERICA.ZHS16GBK 变量名:TNS_ADMIN变量值:C:\xiaxinyu\software\Oracle\instantclient_19_10 在Oracle客户端(C原创 2022-07-14 10:33:20 · 3322 阅读 · 0 评论 -
Mysql事务隔离级别
更新丢失(Lost Update) 或 脏写: 多个事务在不知道其他事务存在的情况下,同时对数据做修改,就会出现脏写。最后的更新覆盖了其他事务所做的更新脏读(Dirty Reads): 当一个事务读取一条记录并对其他进行修改,但是还未提交,此时另一个事务也来读取,如果不加控制,第二个事务读取到的数据就是脏数据。事务A读取到事务B已经修改但还未提交的数据不可重复度(Non-Repeatable Reads): 一个事务读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生改变。原创 2022-06-16 17:12:46 · 120 阅读 · 0 评论 -
Docker安装MySQL
Docker安装MySQL原创 2022-06-02 18:54:23 · 96 阅读 · 0 评论 -
MySql InnoDB 记录锁、间隙锁与临键锁
什么是幻读?幻读是在可重复读的事务隔离级别下会出现的一种问题,简单来说,可重复读保证了当前事务不会读取到其他事务已提交的 UPDATE 操作。但同时,也会导致当前事务无法感知到来自其他事务中的 INSERT 或 DELETE 操作,当当前事务通过 update 等操作获取到该种记录行时,就会产生幻读。关于行锁我们要知道的行锁在 InnoDB 中是基于索引实现的,所以一旦某个加锁操作没有使用索引,那么该锁就会退化为表锁。记录锁(Record Locks)顾名思义,记录锁就是为某行记原创 2022-05-27 17:56:32 · 431 阅读 · 2 评论