
数据库
文章平均质量分 83
OceanStar的学习笔记
这个作者很懒,什么都没留下…
展开
-
数据库系列文章目录
目录转载 2020-05-08 19:22:45 · 1300 阅读 · 1 评论 -
redis:sentinel哨兵模式
在redis主从复制模式中,因为系统不具备自动恢复的功能,所以当主服务器(master)宕机后,需要手动把一台从服务器(slave)切换为主服务器。在这个过程中,不仅需要人为干预,而且还会造成一段时间内服务器不可用状态,同时数据安全性也得不到保障,因此主从模式的可用性较低,不适用线上生成环境。redis官方推荐一种高可用方案,也就是redis sentinel哨兵模式,它弥补了主从模式的不足。Sentinel 通过监控的方式获取主机的工作状态是否正常,当主机发生故障时,Sentinel 会自动进行【故障转转载 2021-10-08 10:05:15 · 915 阅读 · 0 评论 -
centos7下安装redis6.0以上版本,出现gcc低版本导致报错
如果大家在centos7下编译redis6.0版本,如果出现以下错误In file included from server.c:30:0:server.h:1022:5: error: expected specifier-qualifier-list before ‘_Atomic’_Atomic unsigned int lruclock; /* Clock for LRU eviction */请先检查gcc的版本是否低于5,如果是请先升级,可以使用以下命令:#第一步sudo yum i转载 2020-11-11 09:20:24 · 749 阅读 · 0 评论 -
MySQL:InnoDB的存储结构
MySQL 的存储结构分为 5 级:表空间、段、簇、页、行。转载 2021-12-24 23:00:43 · 370 阅读 · 0 评论 -
MySQL面试:索引为啥使用B+树而不是B树
本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分。第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。第二部分结合MySQL数据库中MyISA.转载 2020-10-21 09:02:33 · 2515 阅读 · 0 评论 -
MySQL:MySQL InnoDB VS MyISAM索引实现
看了很多关于索引的博客,讲的大同小异。但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引….或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等结构,导致在面试的时候答非所问!索引是什么索引是帮助MySQL高效获取数据的数据结构索引能干什么提高数据查询的效率索引:排好序的快速查找数据结构!索引会影响where后面的查找,和order by 后面的排序索引的分类从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引转载 2020-10-20 19:44:53 · 352 阅读 · 0 评论 -
sql server:更改Sql Server 事务隔离级别为READ_COMMITTED_SNAPSHOT
1。 查看当前数据库的隔离级别DBCC Useroptions– isolation level 这项的值就代表当前的隔离级别2。 更改数据库 (必须关闭除了当前连接之外的所有的数据库连接 )ALTER DATABASE [dbname] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;ALTER DATABASE [dbname] SET REA...转载 2019-08-14 15:05:20 · 6306 阅读 · 0 评论 -
MySQL:数据目录
也叫做文件空间)的概念。这个表空间是抽象的,对应文件系统上一个或者多个真实文件,每一个表空间可以被划分成多个页,表数据就存放在表空间下的某些页中。可以看到,除了information_schema这个系统数据库外,其他的数据库在数据目录下都有对应的文件夹。数据都是以记录的形式插入到表中的。创建一个数据库时,在文件系统中实际发生了什么呢?为了管理这些页,引入了。表空间可以分成多种类型。存储数据,什么时候使用。...转载 2021-03-30 13:18:47 · 444 阅读 · 0 评论 -
MySQL:InnoDB数据页详情
我们知道,InnoDB有各种各样的页,而这个FileHeader是所有页的通用部分,也就是说各个类型的页都会以FileHeader作为一个组成部分。的一些信息,比如当前数据页中已经存储了多少条记录、freespace在页面中的地址偏移量,当前有多少个槽等。FIL_PAGE_OFFSET每一个页都有一个单独的页号,通过这个页号可以唯一定位一个页。FIL_PAGE_PREV和FIL_PAGE_NEXT上一个页和下一个页。它主要描述了比如这个页的编号是多少,它的上一个页和下一个页是谁等。...转载 2019-11-20 17:56:22 · 899 阅读 · 0 评论 -
MySQL:字符集与比较规则
计算机实际存储的是二进制数据,那它是怎么存储字符串的呢?当然是建立字符与二进制数据的映射关系了。人们抽象出一个字符集的概念来描述某个字符范围的编码规则。转载 2022-07-21 15:19:44 · 421 阅读 · 0 评论 -
MySQL:MySQL客户端和服务端之间是如何连接的呢?
无论客户端和服务器进程采用哪种方式进行通信,最后实现的效果都是客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程返回一段文本(处理结果)。那么,服务器进程对客户端发送的请求做了什么处理,才能产生最后的处理结果呢?问题如果客户端和服务端不位于同一台主机上。问题如果3306端口被占用了怎么办?客户端进程就会去连接本机目录下的。......转载 2022-07-21 11:35:25 · 2188 阅读 · 1 评论 -
MySQL:锁总结
锁的类型表锁MyISAM默认是表锁分类读锁(read lock),也叫共享锁(shared lock):针对同一份数据,多个读操作可以同时进行而不会互相影响(select)即:读锁会阻塞写操作,不会阻塞读操作写锁(write lock),也叫排他锁(exclusive lock):当前操作没完成之前,会阻塞其它读和写操作(update、insert、delete)即:写锁会阻塞读和写操作特点对整张表加锁开销小加锁快加锁快锁粒度大,发生锁冲突概率大,并发性低.转载 2022-04-11 16:33:56 · 284 阅读 · 0 评论 -
redis面试:缓存雪崩、缓存击穿、缓存穿透
无处不在的缓存缓存在计算机系统是无处不在,在CPU层面有L1-L3的Cache,在Linux中有TLB加速虚拟地址和物理地址的转换,在浏览器有本地缓存、手机有本地缓存等。可见,缓存在计算机系统中有非常重要的地位,其主要作用是提高响应速度、减少磁盘访问等,本文主要讨论在高并发系统中的缓存系统。一句话概括缓存系统在高并发系统中的地位的话:如果高并发系统是烤羊肉串,那么缓存系统就是那一撮孜然。高并发系统中的缓存缓存系统的作用缓存系统在高并发系统的作用很大,在某种程序上可以说没有缓存系统很难支撑高并发转载 2021-09-30 11:57:11 · 454 阅读 · 0 评论 -
redis面试:如何保证缓存和数据库数据的一致性?
为什么要保证缓存和数据库的数据一致如果数据不一致,那么业务应用从缓存中读取的数据就不是最新的数据,这会导致严重的错误这里的“数据一致性”是什么意思?首先,我们必须知道这里的“数据一致性”是什么意思。这里“一致性”包括两种情况:缓存中有数据,那么,缓存的数据需要和数据库中的值相同缓存中本身没有数据,那么,数据库中的值就必须是最新值。不符合这两种情况的,就是缓存和数据库的数据不一致了。为什么会发生缓存和数据库的数据不一致当缓存的读写模式不同时,缓存数据不一致发生的情况不一样。当redis作转载 2022-02-16 22:03:10 · 10905 阅读 · 4 评论 -
redis面试:持久化机制有几种
redis的数据全部在内存中,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证redis的数据不会因为故障而丢失,这种机制就是redis的持久化机制如下图,redis的持久化机制有两种,一种是快照,另一种是AOF日志。快照是一次全量备份,AOF日志是连续的增量备份。快照是内存数据的二进制序列化形式,在存储上非常紧凑,而AOF日志记录的是内存数据修改的指令记录文本。AOF日志在长期的运行过程中会变得无比庞大,数据库重启时需要加载AOF日志进行指令重放,这个时间会很长,所以需要定期进行AOF重写,给转载 2021-10-08 20:52:21 · 287 阅读 · 0 评论 -
redis面试:请你谈谈对Redis的认识
为什么要引入:在项目中,我们一般使用mysql来存储数据,但是又一些致命的弊端。主要来自性能方面。由于数据库持久化数据主要是面向磁盘,而磁盘的读写比较慢,在一般的管理系统上,由于不存在高并发,因此没有需要瞬间读写大量数据的要求,这时候传统数据库是没有问题的。但是如果面对一个高并发的场景,比如抢票、发红包等,或者是主页访问量瞬间比较大的时候,一瞬间会有成千上问的请求的到来,需要系统在极短的时间内完成成千上万次的读写操作。这时候数据库根本承受不来,很容易造成数据库系统的瘫痪,最终导致服务器宕机。.转载 2021-10-04 20:54:37 · 2137 阅读 · 0 评论 -
redis:CLUSTER SLOTS
作用返回有关哪些集群插槽映射到哪些redis实例的详细信息。该命令适合由Redis Cluster 客户端库实现使用,以便检索(或者在接收到重定向时更新)将簇哈希槽与实际节点网络坐标关联的映射(由IP地址和TCP端口组成)因此当收到一个命令时,它可以发送到命令中指定的密钥的正确实例。自3.0.0起可用。时间复杂度: O(N)其中N是 Cluster 节点的总数返回值嵌套结果数组。每个嵌套结果是:开始插槽范围结束插槽范围主插槽范围表示为嵌套 IP /端口阵列插槽范围的主节转载 2021-10-21 13:12:25 · 1009 阅读 · 0 评论 -
redis:cluster nodes、cluster slaves node-id
作用cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息集群中的每个节点都有当前集群配置的一个视图(快照),视图的信息由该节点所有已知节点提供,包括与每个节点的连接状态,每个节点的标记为(flags)、属性和已经分配的哈希槽等等cluster nodes提供了当前连接节点所属集群的配置信息,信息格式和redis集群在磁盘上存储使用的序列化格式完全一样(在磁盘存储信息的结尾还存储了一些额外信息)通常,如果你想知道哈希槽与节点的管理关系,你应该使用C转载 2021-10-25 15:13:04 · 2079 阅读 · 0 评论 -
redis:sentinel相关API
sentinel节点是一个特殊的redis节点,有自己专属的API转载 2021-10-12 20:10:37 · 337 阅读 · 0 评论 -
redis:主从同步总结
CAP原理转载 2021-10-08 23:51:49 · 179 阅读 · 0 评论 -
redis:主从复制原理
复制过程在从节点执行slaveof命令后,复制过程就开始运作,转载 2021-10-12 10:43:59 · 1335 阅读 · 0 评论 -
redis:主从复制实践
引入单点复制的问题单机故障如果发生机器故障,例如磁盘损坏,主板损坏等,未能在短时间内修复好,客户端将无法连接redis。当然如果仅仅是redis节点挂掉了,可以进行问题排查然后重启,姑且不考虑这段时间对外服务的可用性,那还是可以接受的。而发生机器故障,基本是无济于事。除非把redis迁移到另一台机器上,并且还要考虑数据同步的问题。容量瓶颈假如一台机器是16G内存,redis使用了12G内存,而其他应用还需要使用内存,假设我们总共需要60G内存要如何去做呢,是否有必要购买64G内存的机器?转载 2021-10-11 23:28:53 · 337 阅读 · 0 评论 -
redis:通信协议
redis的作者认为数据库系统的瓶颈一般不在于网络流量,而在于数据库自身内部逻辑处理上,所以即使Redis使用了浪费流量的文本协议,依然可以取得极高的访问性能。redis将所有的数据都放在了内存中,用一个单线程对外提供服务,单个节点在跑满一个CPU核心的情况下可以达到10w/s的超过QPSRESPRESP是Redis序列化协议(REdis Serialization Portocol)的简写。它是一种直观的文本协议,优势在于实现过程异常简单,解析性能极好。Redis协议将传输的结构数据分为5种最小单转载 2021-10-08 20:42:50 · 2185 阅读 · 0 评论 -
redis:怎么保证缓存和数据库数据的一致性?
你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?一般来讲,有四种方案先更新数据库,然后更新缓存...转载 2021-10-05 18:05:55 · 2504 阅读 · 2 评论 -
redis:redis内存满了怎么办
实际上redis定义了【八种内存淘汰策略】来处理redis内存满的情况1.noeviction:直接返回错误,不淘汰任何已经存在的redis键2.allkeys-lru:所有的键使用lru算法进行淘汰3.volatile-lru:有过期时间的使用lru算法进行淘汰4.allkeys-random:随机删除redis键5.volatile-random:随机删除有过期时间的redis键6.volatile-ttl:删除快过期的redis键7.volatile-lfu:根据lfu算法从有过期时间的转载 2021-10-17 18:05:47 · 8127 阅读 · 0 评论 -
redis:作为旁路缓存的redis是怎么使用的
缓存的特性一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存,这样就可以把一些需要频繁访问的数据放到缓存中,以加快它们的访问速度。举个例子,计算机系统的存储结构一般是下面这样的:所以,计算机系统中,默认有两种缓存:CPU里面的LLC缓存,用来缓存内存中的数据,避免每次从内存中存取数据内存中的高速页缓存page cache,用来缓存磁盘中的数据,避免每次从磁盘中存取数据从上面,我们可以看出缓存的第一条特性:在一个层次化的系统中,缓存一定是一个快速子系统,数据存在缓存中时,能避免每次转载 2021-10-10 13:33:29 · 714 阅读 · 0 评论 -
redis:redis缓冲区溢出怎么办
引入什么是缓冲区:用一块内存空间来暂时存放命令数据,以免出现因为数据和命令的处理速度慢与发送速度而导致的数据丢失和性能问题但是问题是,因为缓冲区的内存空间是有限的,如果往里面写入数据的速度大于从里面读取数据的速度,就会导致缓存需要越来越多的内存来暂存数据,当缓冲区占用的内存超出了设置的上限阈值时,就会出现缓冲区溢出。缓冲区溢出就会导致数据丢失那是不是调大上限阈值就可以了呢?不是的,如果缓冲区占用的内存空间太大,一旦耗尽了redis实例上的可用内存,那么就会导致redis实例崩溃redis服务器中转载 2021-10-07 13:18:13 · 4059 阅读 · 0 评论 -
redis:如何应对变慢的redis响应延迟
如何判断redis是不是真的变慢了(1)一个最直接的方法,就是查看redis的响应延时大部分时候,redis延迟很低,但是在某些时刻,有些redis实例会出现很高的响应延时,甚至能达到几秒到十几秒,不过持续时间不长,这也叫延迟“毛刺”。当你发现Redis 命令的执行时间突然就增长到了几秒,基本就可以认定 Redis 变慢了。在不同的软硬件环境下,Redis 本身的绝对性能并不相同。比如,在我的环境中,当延迟为 1ms 时,我判定 Redis 变慢了,但是你的硬件配置高,那么,在你的运行环境下,可能延转载 2019-05-23 11:23:44 · 4524 阅读 · 1 评论 -
redis:慢查询日志
什么是 SLOWLOG慢查询日志所谓慢查询日志就是系统在命令执行前后计算每条命令执行的时间,,当超过阈值,就将这条命令的相关信息(比如:发生时间、耗时、命令的详细信息)记录下来,redis也提供了类似的功能对于redis如下图所示,redis客户端执行一条命令分为四个部分发送命令命令排队命令执行返回结果慢查询只统计步骤3的时候,所以没有慢查询并不代表客户端没有超时问题slowlogSlow log 是 Redis 用来记录查询执行时间的日志系统。查询执行时间指的是不包括像转载 2021-10-11 22:56:22 · 788 阅读 · 0 评论 -
redis:redis内存消耗在哪里?
内存消耗目的:理解内存消耗在哪里内存使用统计127.0.0.1:6379> info memory# Memoryused_memory:586328used_memory_human:572.59Kused_memory_rss:8495104used_memory_rss_human:8.10Mused_memory_peak:586328used_memory_peak_human:572.59Kused_memory_peak_perc:100.01%used_memo转载 2021-10-12 13:31:47 · 472 阅读 · 0 评论 -
redis:删除数据后,为什么内存占用率还是很高
引入在使用 Redis 时,我们经常会遇到这样一个问题:明明做了数据删除,数据量已经不大了,为什么使用 top 命令查看时,还会发现 Redis 占用了很多内存呢?实际上,这是因为,当数据删除后,redis释放的内存空间会由内存分配器管理,并不会立即返回给操作系统。所以,操作系统仍然会记录着redis分配了大量的内存但是,这往往会伴随着一个潜在的风险点:redis释放的内存空间可能不是连续的,那么,这些不连续的内存空间很有可能出于一种闲置的状态。这就会导致一个问题:虽然有空闲空间,redi转载 2020-11-17 16:19:49 · 663 阅读 · 0 评论 -
redis:redis五大阻塞点与异步机制
Redis 实例有哪些阻塞点?redis实例在运行时,要和很多对象进行交互,这些不同的交互就会设计到不同的操作。下面我们来看看和redis实例交互的对象,以及交互是会发生的操作:客户端:网络IO、键值对增删改查操作,数据库操作磁盘:生成RDB快照、记录AOF日志、AOF日志重写主从节点:主库生成、传输RDB文件,从库接收RDB文件、清空数据库、加载RDB文件切片集群实例:向其他实例传输哈希槽信息,数据迁移这些交互对象中,有哪些操作会引起阻塞呢?和客户端交互时的阻塞点(1)网络IO有时候转载 2019-03-05 18:31:57 · 386 阅读 · 0 评论 -
redis:持久化之RDB内存快照
RBD为什么需要持久化持久化功能能有效的避免因为进程退出造成的数据丢失问题当下次重启的时候利用之前持久化的文件即可实现数据恢复什么叫做RDBRDB持久化是把当前进程数据生成快照保存到硬盘的过程在redis执行【写】指令过程中,内存数据会一直变化。所谓的内存快照,指的就是redis内存中的数据在某一刻的状态数据好比时间定格在某一刻,当我们拍照时,通过照片就能把某一刻的瞬间画面完全记录下来redis跟这个类似,就是把某一刻的数据以文件的形式拍下来,写到磁盘上。这个快照文件叫做RDB转载 2021-10-05 23:22:01 · 2992 阅读 · 0 评论 -
redis:持久化之AOF增量持久化
redis的数据正常但是存储在内存内的,如果宕机突然发生,数据就会全部丢失,因此需要提供一种方式保证redis的数据不会因为故障而丢失,这种机制就是redis的持久化机制redis提供了两种持久化机制:RDB(Snapshot 内存快照)AOF(append only file)...转载 2021-10-05 19:51:15 · 901 阅读 · 0 评论 -
redis:与键相关的命令
redis有五种数据结构,它是键值对中的值,对于健来说有一些通用的命令查看键Keys 命令用于查找所有符合给定模式 pattern 的 key语法redis 127.0.0.1:6379> KEYS PATTERN可用版本> = 1.0.0返回值符合给定模式的 key 列表 (Array)。实例redis 127.0.0.1:6379> SET runoob1 redisOKredis 127.0.0.1:6379> SET runoob2 mysq转载 2021-10-10 13:00:02 · 445 阅读 · 0 评论 -
redis:pubsub发布订阅
Redis PubSub 模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为 channel。在 Redis 中,一个客户端可以订阅任意数量的 channel(可译为频道)消息多播:生产者生产一次消息,中间件负责将消息复制到多个消息队列中,每个消息队列由相应的消费组进行消费,这是分布式系统常用的一种解耦方式。发布/订阅流程订阅者/等待接收消息首先打开 Redis 客户端,然后订阅了一个名为“w转载 2021-10-07 20:42:38 · 344 阅读 · 0 评论 -
redis:延迟队列
异步消息队列redis的list数据结构常用作异步消息队列使用,用rpush、lpop、lpush、rpop操作可以支持多个生产者和多个消费者并发进出消息,每个消费者拿到的消息都是不同的列表元素7.0.0.1:6379> rpush notify-queue apple banana pear(integer) 3127.0.0.1:6379> llen notify-queue(integer) 3127.0.0.1:6379> lpop notify-queue"a转载 2021-10-08 17:26:06 · 2470 阅读 · 0 评论 -
redis:消息队列
消息队列的消息存取需求在分布式系统中,当两个组件要基于消息队列进行通信时,一个组件会把要处理的数据以消息的形式传递给消息队列,然后,这个组件就可以继续执行其他操作了;远端的另一个组件从消息队列中把消息读取出来,再在本地进行处理。我们一般把消息队列中发送消息的组件称为生产者(例子中的组件 1),把接收消息的组件称为消费者(例子中的组件 2),下图展示了一个通用的消息队列的架构模型:在使用消息队列时,消费者可以异步读取生产者消息,然后再进行处理。这样一来,即使生产者发送消息的速度远远超过了消费者处理消转载 2019-03-07 12:36:08 · 1346 阅读 · 0 评论 -
redis:redis的底层数据结构
一提到redis,我们就会想到“快"。那redis的快到底是快在哪里呢?实际上,这里有一个重要的表现:它接收到一个键值对操作后,能以微秒级别的速度找到数据,并快速完成操作。为什么redis能有这么突出的表现呢?一方面,这是因为它是内存数据库,所有操作都在内存上完成,内存的访问速度本身就很快另一方面,这要归功于它的数据结构。这是因为,键值对是按照一定的数据结构来组织的,操作键值对最终就是对数据结构进行增删改查操作,所以高效的数据结构是redis快速处理的基础。redis中的数据结构有两种意思:转载 2022-01-11 17:46:25 · 11615 阅读 · 5 评论 -
redis:位图bitmaps
数据结构模型现代计算机用二进制(位)作为信息的基础单位,1个字节等位8位,例如“big”字符串是由3个字节组成,但实际在计算机存储时将其用二进制表示“big”分别对应的ASCII码分别是98、105、103,对应的二进制分别是01100010、01101001和01100111如下图:很多开发语言都提供了操作位功能,合理的使用位能够有效的提高内存使用率和开发效率redis提供了bitmaps这个“数据结构”,可以实现对位的操作。把数据结构加上引号主要是因为:bitmaps本身不是一种数转载 2021-10-11 15:04:31 · 242 阅读 · 0 评论