自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 【数据库原理系列】故障恢复实现

故障恢复故障分类分类事务故障某一个程序(事务)自身运行错误所引起的故障影响该程序(事务)本身系统故障由于掉电、非正常关机等所引起的故障影响正在运行的事务以及数据库缓冲区, 数据库缓冲区将涉及正在运行和已经运行的事务介质故障由于介质损坏等所引起的故障影响是全面的,既影响内存中的数据, 又影响介质中存储的数据恢复事务故障的恢复事务故障可通过重做事务(Redo)和撤消事务(Undo)来恢复。重做事务可保证已提交事务的持久性,而撤销事务则消除未提交事务的影响

2020-11-28 00:01:57 836

原创 【数据库原理系列】基于回滚事务调度

时间戳并发控制时间戳(TIMESTAMP)一种基于时间的标志,将某一时刻转换成的一个数值。时间戳具有唯一性和递增性。事务的时间戳事务T启动时,系统将该时刻赋予T,为T的时间戳时间戳可以表征一系列事务执行的先后次序:时间戳小的事务先执行,时间戳大的事务后执行。利用时间戳,可以不用锁,来进行并发控制基于时间戳的并发控制借助于时间戳,强制使一组并发事务的交叉执行,等价于一个特定顺序的串行执行。特定顺序:时间戳由小到大。如何强制:执行时判断冲突,如无冲突,予以执行;如有

2020-11-28 00:01:46 409

原创 【数据库原理系列】事务调度与封锁

事务实现调度及可串行性事务调度(schedule):一组事务的基本步(读、写、其他控制操作如加锁、解锁等)的一种执行顺序称为对这组事务的一个调度。并发(或并行)调度:多个事务从宏观上看是并行执行的,但其微观上的基本操作(读、写)则是交叉执行的。并发调度的正确性:当且仅当在这个并发调度下所得到的新数据库结果与分别串行地运行这些事务所得的新数据库完全一致,则说调度是正确的。可串行性:如果不管数据库初始状态如何,一个调度对数据库状态的影响都和某个串行调度相同,则我们说这个调度是可串行化的(S

2020-11-28 00:01:35 4347

原创 【数据库原理系列】内部查询优化

查询优化基本思路DBMS 会从三个层面进行优化:语义优化:利用模型的语义及完整性规则,优化查询。语法优化—逻辑层优化:利用语法结构,优化操作执行顺序;执行优化—物理层优化:存取路径和执行算法的选择与执行次序优化所谓的建立索引,就是用户给 DBMS 在物理层面多提供了存取路径和算法的选择语义优化—内容等价去掉无关的表去掉无关的属性改写成等价的效果更好的语句…语法优化(逻辑层优化)—语法等价性尽可能早做选择运算尽可能早做投影运算改写成等价的效果更好的语句…执行

2020-11-28 00:01:19 395

原创 【数据库原理系列】多趟扫描算法

两趟扫描算法基本思路整个关系操作存在的问题( δ\deltaδ®, γ\gammaγ® , τ\tauτ®)理论上,任何一个元组需要与所有元组进行比较,才能确定是否重复,才能知道是否是一个新的组,才能确定位于何序位置,但这些需要内存如果需保存的待处理数据块数远远大于内存可用块数时,怎么办?思路第一趟:划分子集,并使子集具有某种特性,如有序或相同散列值等第二趟:处理全局性内容的操作,形成结果关系。如多子集间的归并排序,相同散列值子集的操作等多路归并排序内排序和外排序内排序问题:

2020-11-28 00:01:07 793

原创 【数据库原理系列】查询操作实现

查询实现概述复杂动作 = 基本动作的各种方式的组合所有操作,最后都可以转化成关系模型基本运算的各种组合,然后解释这种组合, 并按次序调用基本动作予以执行数据库的三大类操作一次单一元组的一元操作:σF\sigma_FσF​®, ∏F\prod_F∏F​ ® —SELECTION, PROJECTION整个关系的一元操作: δ\deltaδ®, γ\gammaγ® , τ\tauτ® —DISTINCT, GROUP BY,SORTING整个关系的二元操作集合上的操作:⋃S\bigcu

2020-11-27 14:13:35 563

原创 【数据库原理系列】索引结构---散列

实现:散列索引散列有M个桶,每个桶是有相同容量的存储块(可以是内存页,也可以是磁盘块)内存数据可采用散列确定存储页,主文件可采用散列确定存储块,索引亦可采用散列确定索引项的存储块M个桶。一个桶可以是一个存储块,亦可是若干个连续的存储块。散列函数 h(k),可以将键值k映射到 {0,1,…,M-1}中的某一个值将具有键值k的记录Record(k)存储在对应h(k)编号的桶中在键值几倍于桶的数目时,每个散列值都可能多于一个桶,形成一个主桶和多个溢出桶的列表,此时需要二

2020-11-27 14:13:09 1530

原创 【数据库原理系列】索引结构---B+树

实现:B+树索引多级索引当索引项比较多时,可以对索引再建立索引,依此类推,形成多级索引。B+树索引:一种以树型数据结构来组织索引项的多级索引Ki—索引字段值Pj—指针,指向索引块或数据块或数据块中记录的指针一个节点就是一个索引块,包含有n-1个索引项(<索引字段值Ki, 指针Pi>)+1个指针(Pn);示例:存储块= 4096 Byte,整数型索引 字段值= 4 Byte、 指针= 8 Byte则:n应满足4(n-1)+8n<=4096 ,即 n取最大值

2020-11-27 14:13:00 1680 1

原创 【数据库原理系列】索引存储及分类

索引概述索引索引是定义在存储表(Table)基础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一系列存储在磁盘上的索引项(indexentries)组成,每一索引项又由两部分构成:索引字段:由Table中某些列(通常是一列)中的值串接而成。索引中通常存储了索引字段的每一个值(也有不是这样的)。行指针:指向Table中包含索引字段值的记录在磁盘上的存储位置。存储索引项的文件为索引文件,相对应,存储表又称为主文件索引文件比主文件小很多。通过检索一个小的索引

2020-11-27 14:12:50 3190

原创 【数据库原理系列】存储体系与组织

存储体系磁盘块磁盘块是每次 IO 的最小单位,和内存中一个页的大小相同磁盘块间连系方法(不同的文件组织方式,会使用不同的组织方式,通常会多种结合)连续分配: 数据块被分配到连续的磁盘块上(会存在扩展困难问题)链接分配: 数据块中包含指向下一数据块的指针(访问速度问题)按簇分配: 按簇分配,簇是若干连续的磁盘块,簇之间靠指针连接;簇有时也称片段Segment或盘区extent索引分配: 索引块中存放指向实际数据块的指针块中的记录定长记录,还是变长记录定长变长(靠分

2020-11-27 14:12:39 479

原创 【数据库原理系列】关系模式分解

模式分解存在问题模式分解关系模式R(U)的分解是指用R的一组子集ρ\rhoρ={R1(U1),…,Rk(Uk)}来代替它。其中U= U1⋃\bigcup⋃U2⋃\bigcup⋃…⋃\bigcup⋃Uk;Ui⊈\nsubseteqqUj(i≠\neq​=j)。注:为便于后面叙述,我们用Ri代替Ri(Ui), R代替R(U)。对于关系模式R的任一关系r, 它向ρ\rhoρ的投影连接记为mρm_\rhomρ​®mρm_\rhomρ​® = ∏R1\prod_{R1}∏R1​® ⋈\Joi

2020-11-27 14:12:26 3694

原创 【数据库原理系列】五大关系范式

关系范式1NF和2NF1NF若关系模式R(U)中关系的每个分量都是不可分的数据项(值、原子),则称R(U)属于第一范式,记为:R(U)$\in$1NF。不符合1NF的处理将复合属性处理为简单属性;将多值属性与关键字单独组成一新的关系2NF若R(U)$\in1NF且U中的每一非主属性完全函数依赖于候选键,则称R(U)属于第二范式,记为:R(U)1NF 且 U中的每一非主属性完全函数依赖于候选键,则称R(U)属于第二范式,记为:R(U)1NF且U中的每一非主属性完全函数依赖于候选

2020-11-27 14:12:07 2678

原创 【数据库原理系列】关系函数依赖

函数依赖概述函数依赖设R(U)是属性集合U={A1,A2,…,An}上的一个关系模式,X, Y是U上的两个子集,若对R(U)的任意一个可能的关系r, r中不可能有两个元组满足在X中的属性值相等而在Y中的属性值不等,则称“X函数决定Y”或“Y函数依赖于X”, 记作X$\rightarrow $Y。示例:U={学号,姓名,年龄,班号,班长,课号,成绩}学号→\rightarrow→{姓名,年龄}班号→\rightarrow→班长{学号,课号}→\rightarrow→

2020-11-27 14:11:54 4453

原创 【数据库原理系列】IDEF1x工程化方法

IDEF1x工程化方法IDEF1x是将E-R模型扩充语义含义而形成的, 或者说,IDEF1x是E-R图的细化IDEF1x是一种进行数据建模或数据库设计的工程化的方法实体(Entity)独立标识符实体/独立实体(Identifier-IndependentEntity)–强实体从属标识符实体/从属实体(Identifier-dependentEntity)–弱实体联系(Relationship)可标定连接联系(IdentifyingConnectionRelation

2020-11-27 14:11:39 3422

原创 【数据库原理系列】数据库E-R模型

E-R模型设计中的抽象不同层次抽象现实层(客观存在) =>抽象层(观念世界/信息世界,描述现实世界的一种观点) =>…(信息世界的若干层抽象)… =>逻辑层(计算机世界:独立于物理设备) =>物理层(计算机世界:不同物理设备的具体实现)越抽象,语义信息越少,概括性越高,越反映共性信息,表征的范围越大检验抽象正确性的方法:能够依据现实抽象出来(抽象化),同时也能够依据抽象的信息和抽象规则还原为被抽象对象(具体化)。基本思想数据模型与概念模型表达计算机世界的

2020-11-27 14:11:26 2512

原创 【数据库原理系列】嵌入式SQL

嵌入式SQL概述嵌入式SQL语言将SQL语言嵌入到某一种高级语言中使用这种高级语言,如C/C++, Java, PowerBuilder等,又称宿主语言(Host Language)嵌入在宿主语言中的SQL与前面介绍的交互式SQL有一些不同的操作方式下面以嵌入 C 语言为例,exec 关键字是为了让 C 语言编译器识别。变量声明在嵌入式SQL语句中可以出现宿主语言语句所使用的变量:exec sql begin declare section; char vSname[10], spe

2020-11-26 23:59:22 696 1

原创 【数据库原理系列】完整性和安全性

完整性和安全性完整性关系模型中有完整性要求实体完整性:主要指是否允许 null 值参照完整性:指所关联关系的完整性用户自定义完整性:指是否满足用户的条件按约束来源分类结构约束来自于模型的约束,例如函数依赖约束、主键约束(实体完整性)、外键约束(参照完整性),只关心数值相等与否、是否允许空值等;内容约束来自于用户的约束,如用户自定义完整性,关心元组或属性的取值范围。例如Student表的Sage属性值在15岁至40岁之间等。按约束对象分类域完整性约束条件施

2020-11-26 23:59:09 3218

原创 【数据库原理系列】复杂查询与视图

复杂查询与视图子查询为什么需要子查询?集合成员资格(关系代数思想,(NOT) IN-子查询)某一元素是否是某一个集合的成员集合之间的比较(关系演算的思想,以元组为单位,且集合没有元组存在和全部的概念,θ\thetaθ-Some/ θ\thetaθ-All子查询)某一个集合是否包含另一个集合等集合基数的测试(关系演算的思想,以元组为单位,且关系代数没有真与假的概念,(NOT) EXISTS子查询)测试集合是否为空测试集合是否存在重复元组相关性非相关子查询

2020-11-26 23:58:56 536

原创 【数据库原理系列】基本SQL语言

基本SQL语言DDLDDL: Data Definition Language(通常由DBA来使用,也有经DBA授权后由应用程序员来使用)创建数据库(DB)—Create Database创建DB中的Table(定义关系模式)—Create Table定义Table及其各个属性的约束条件(定义完整性约束)—Create Trigger定义View (定义外模式及E-C映像)—Create View定义Index、Tablespace… …等(定义物理存储参数)—Create Index

2020-11-26 23:58:43 356

原创 【数据库原理系列】关系演算

关系演算关系演算是以数理逻辑中的谓词演算(谓词表示个体的一种属性)为基础的关系演算是描述关系运算的另一种思维方式,以个体为单位,不以集合为单位SQL语言是继承了关系代数和关系演算各自的优点所形成的按照谓词变量的不同,可分为关系元组演算和关系域演算关系元组演算是以元组变量作为谓词变量的基本对象关系域演算是以域变量作为谓词变量的基本对象元组演算关系元组演算公式的基本形式:{t | P(t) }表示:所有使谓词P 为真的元组t 的集合t 是元组变量t ∈\in∈r 表示元组

2020-11-26 23:57:55 2341

原创 【数据库原理系列】关系代数

关系代数提出原因复杂动作 = 基本动作的各种方式的组合,所有复杂的 sql 操作最后都会转化成基本操作的组合。分类纯关系操作集合操作集合操作前提:并相容性参与运算的两个关系及其相关属性之间有一定的对应性、可比性或意义关联性定义: 关系R 与关系S 存在相容性,当且仅当:(1) 关系R 和关系S 的属性数目必须相同;(2) 对于任意i ,关系R 的第i 个属性的域必须和关系S 的第i 个属性的域相同假设:R(A1, A2, … , An) , S(B1, B

2020-11-26 23:57:34 1609

原创 【数据库原理系列】关系数据模型

关系模型概述形象地说,一个关系(relation) 就是一个Table,关系模型就是处理Table 的,它由三个部分组成:描述DB 各种数据的基本结构形式(Table/Relation)描述Table 与Table 之间所可能发生的各种操作( 关系运算)描述这些操作所应遵循的约束条件(完整性约束)关系模型的三个要素基本结构 :Relation/Table基本操作 :Relation Operator基本的: ⋃\bigcup⋃ ( 并, UNION)、 −-− ( 差, DIFF

2020-11-26 23:57:23 451

原创 【数据库原理系列】标准结构与模型

标准结构三级模式两层映像三级模式(三级视图)External Schema ---- (External) View某一用户能够看到与处理的数据的结构描述(Conceptual) Schema ---- Conceptual View从全局角度理解/管理的数据的结构描述, 含相应的关联约束体现在数据之间的内在本质联系Internal Schema ---- Internal View存储在介质上的数据的结构描述,含存储路径、存储方式 、索引方式等两层映像

2020-11-26 23:57:08 243

原创 【数据库原理系列】总体概述

工作环境组成数据库(DB): Database数据库管理系统(DBMS): Database Management System数据库应用(DBAP): DataBase Application数据库管理员(DBA): DataBase Administrator计算机基本系统DBMS 演变与发展文件系统文件存储空间的管理、目录管理、文件读写管理、文件保护、向用户提供操作接口。提供了不同的存取方法(索引文件、链接文件、直接存取文件、倒排文件等), 支持对文件的

2020-11-26 23:56:50 235

原创 【Redis实现系列】事务功能实现

事务实现原理一个事务从开始到结束通常会经历以下三个阶段:事务开始。命令入队。事务执行。事务开始MULTI命令的执行标志着事务的开始:redis> MULTIOKMULTI命令可以将执行该命令的客户端从非事务状态切换至事务状态,这一切换是通过在客户端状态的flags属性中打开REDIS_MULTI标识来完成的,MULTI命令的实现可以用以下伪代码来表示:def MULTI(): # 打开事务标识 client.flags |= REDIS_MULT

2020-11-13 00:19:23 1419

原创 【Redis实现系列】监视器实现

监视器通过执行MONITOR命令,客户端可以将自己变为一个监视器,实时地接收并打印出服务器当前处理的命令请求的相关信息每当一个客户端向服务器发送一条命令请求时,服务器除了会处理这条命令请求之外,还会将关于这条命令请求的信息发送给所有监视器redis> MONITOROK1378822099.421623 [0 127.0.0.1:56604] "PING"1378822105.089572 [0 127.0.0.1:56604] "SET" "msg" "hello world"13

2020-11-13 00:19:08 203

原创 【Redis实现系列】慢查询日志实现

慢查询日志Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来监视和优化查询速度。服务器配置有两个和慢查询日志相关的选项:slowlog-log-slower-than 选项指定执行时间超过多少微秒(1秒等于1 000 000微秒)的命令请求会被记录到日志上。slowlog-max-len选项指定服务器最多保存多少条慢查询日志。 服务器使用先进先出的方式保存多条慢查询日志,当服务器存储的慢查询日志数量等于slowlog-max-len选项的值时,

2020-11-13 00:18:56 227

原创 【Redis实现系列】发布订阅实现

发布订阅频道的订阅与退订当一个客户端执行SUBSCRIBE命令订阅某个或某些频道的时候,这个客户端与被订阅频道之间就建立起了一种订阅关系。Redis将所有频道的订阅关系都保存在服务器状态的pubsub_channels字典里面,这个字典的键是某个被订阅的频道,而键的值则是一个链表,链表里面记录了所有订阅这个频道的客户端:struct redisServer { // ... // 保存所有频道的订阅关系 dict *pubsub_channels; // ...};SUBSC

2020-11-13 00:18:44 296

原创 【Redis实现系列】通知功能实现

通知订阅命令这个功能可以让客户端通过订阅给定的"键空间"或者”事件“,来获知数据库中键的变化,以及数据库中命令的执行情况。订阅键空间通知:SUBSCRIBE _ _keyspace@<dbid>_ _:<keyname>订阅键事件通知:SUBSCRIBE _ _keyevent@<dbid>_ _:<eventname>注意:服务器配置的 notify-keyspace-events 选项决定了服务器允许发送哪类通知想让服务器发送所有类型的 键

2020-11-12 00:14:16 709

原创 【Redis实现系列】集群内部消息

集群内部消息集群中的各个节点通过发送和接收消息(message)来进行通信,我们称发送消息的节点为发送者(sender),接收消息的节点为接收者(receiver)节点发送的消息主要有以下五种:MEET消息:当发送者接到客户端发送的CLUSTER MEET命令时,发送者会向接收者发送MEET消息,请求接收者加入到发送者当前所处的集群里面。PING消息:集群里的每个节点默认每隔一秒钟就会从已知节点列表中随机选出五个节点,然后对这五个节点中最长时间没有发送过PING消息的节点发送PING消息,以

2020-11-12 00:14:01 229

原创 【Redis实现系列】集群MOVED错误与ASK错误

键操作与Moved错误在对数据库中的16384个槽都进行了指派之后,集群就会进入上线状态,这时客户端就可以向集群中的节点发送数据命令了。实现原理当客户端向节点发送与数据库键有关的命令时,接收命令的节点会计算出命令要处理的数据库键属于哪个槽,并检查这个槽是否指派给了自己:如果键所在的槽正好就指派给了当前节点,那么节点直接执行这个命令。如果键所在的槽并没有指派给当前节点,那么节点会向客户端返回一个MOVED错误,指引客户端转向(redirect)至正确的节点,并再次发送之前想要执行的命令。

2020-11-12 00:13:44 3128

原创 【Redis实现系列】集群实现与故障迁移

集群节点与槽指派启动集群节点一个节点就是一个运行在集群模式下的Redis服务器,Redis服务器在启动时会根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式节点(运行在集群模式下的Redis服务器)会继续使用所有在单机模式中使用的服务器组件,比如说:节点会继续使用文件事件处理器来处理命令请求和返回命令回复。节点会继续使用时间事件处理器来执行serverCron函数,而serverCron函数又会调用集群模式特有的clusterCron函数。cluste

2020-11-12 00:13:31 277

原创 【Redis实现系列】Sentinel自动故障转移

故障转移主观下线状态在默认情况下,Sentinel会以每秒一次的频率向所有与它创建了命令连接的实例(包括主服务器、从服务器、其他Sentinel在内)发送PING命令,并通过实例返回的PING命令回复来判断实例是否在线。实例对PING命令的回复可以分为以下两种情况:有效回复:实例返回+PONG、-LOADING、-MASTERDOWN三种回复的其中一种。无效回复:实例返回除+PONG、-LOADING、-MASTERDOWN三种回复之外的其他回复,或者在指定时限内没有返回任何回复。

2020-11-12 00:13:19 648

原创 【Redis实现系列】哨兵Sentinel实现

SentinelSentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。示例:Sentinel系统监视服务器:双环图案表示的是当前的主服务器ser

2020-11-12 00:13:04 236

原创 【Redis实现系列】主从复制步骤

主从复制步骤设置主服务器地址和端口当客户端向从服务器发送以下命令时:127.0.0.1:12345> SLAVEOF 127.0.0.1 6379OK从服务器首先要做的就是将客户端给定的主服务器IP地址127.0.0.1以及端口6379保存到服务器状态的masterhost属性和masterport属性里面:struct redisServer { // ... // 主服务器的地址 char *masterhost; // 主服务器的端口 int

2020-11-12 00:12:33 152

原创 【Redis实现系列】主从复制实现

主从复制在Redis中,用户可以通过执行 SLAVEOF 命令或者设置 slaveof 选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave)。Redis的复制功能分为同步(sync)和命令传播(command propagate)两个操作:同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态。命令传播操作则用于在主服务器的数据库状态被修改,导致主从服务器的数据库

2020-11-12 00:12:19 220 2

原创 【Redis实现系列】持久化AOF实现

AOF除了RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能。被写入AOF文件的所有命令都是以Redis的命令请求协议格式保存的,因为Redis的命令请求协议是纯文本格式。示例redis> SET msg "hello"OKredis> SADD fruits "apple" "banana" "cherry"(integer) 3redis> RPUSH numbers 128 256 512(integer) 3

2020-11-12 00:12:08 175

原创 【Redis实现系列】持久化RDB实现

RDBRDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中。RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态。创建与载入创建有两个Redis命令可以用于生成RDB文件,一个是SAVE,另一个是BGSAVE。SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求:redis> SAVE

2020-11-12 00:11:55 250

原创 【Redis实现系列】过期键处理

过期键处理过期键的判定通过过期字典,程序可以用以下步骤检查一个给定键是否过期:检查给定键是否存在于过期字典:如果存在,那么取得键的过期时间。检查当前UNIX时间戳是否大于键的过期时间:如果是的话,那么键已经过期;否则的话,键未过期。伪代码描述def is_expired(key): # 取得键的过期时间 expire_time_in_ms = redisDb.expires.get(key) # 键没有设置过期时间 if expire

2020-11-11 22:38:34 849

原创 【Redis实现系列】RedisDB实现

RedisDB核心实现概述Redis 服务器将所有数据库都保存在服务器状态 redis.h/redisServer 结构的 db 数组中,db 数组的每个项都是一个 redis.h/redisDb 结构,每个redisDb结构代表一个数据库。定义:struct redisServer { // ... // 一个数组,保存着服务器中的所有数据库 redisDb *db; // 初始化服务器时,程序会根据服务器状态的dbnum属性来决定应该创建多少

2020-11-11 22:38:23 1337 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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