当前位置:首页>幼教>正文

阿里二面:Redis 中的 AOF 文件太大了怎么办 幼师老师们的团建 太精彩了怎么办

2023-07-30 18:56:35 互联网 未知 幼教

阿里二面:Redis 中的 AOF 文件太大了怎么办

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。

一、前言

写这篇文章的目的是来自我的一位粉丝的投稿,说面试阿里被问到了这个问题。不得不说阿里的面试问的都挺有质量,一般的我们只会关注Redis的两种持久化方式RDB和AOF。但老周这里盲猜面试的过程肯定也是先从持久化方式问起,然后循循渐进的问到AOF文件太大了怎么办?本着知其然知其所以然的态度,老周这里会带你从RDB和AOF的实现原理、各自的触发方式以及各自的应用场景来彻头彻尾了解Redis的持久化方式。

进入正文之前,我们先来问下自己这么两个问题?什么是Redis持久化?为啥需要Redis持久化?

Q1:什么是Redis持久化?

持久化就是把内存中的数据保存到硬盘中,使数据可以持久化保存。Redis持久化有两种实现方式:RDB和AOF。

Q2:为啥需要Redis持久化?

Redis是内存数据库,宕机后数据会消失。Redis重启后快速恢复数据,要提供持久化机制。

好了,知道了这两个问题后,我们就来看看Redis是如何将数据存储到硬盘里面,使得数据在Redis重启之后仍然存在的。

二、RDB

将Redis某一时刻的内存数据保存到硬盘的文件当中,默认保存的文件名为dump.rdb,而在Redis服务器启动时,会重新加载dump.rdb文件的数据到内存中。

2.1开启RDB持久化方式

2.1.1save命令

127.0.0.1:6379>saveOK

save命令是一个同步操作。当客户端向服务器发送save命令请求进行持久化时,服务器会阻塞save命令之后的其他客户端的请求,直到数据同步完成。

如果数据量太大,同步数据会执行很久,这期间Redis服务器也无法接收其他请求,导致不可用。

线上的Redis环境不建议使用此命令

2.1.2bgsave命令

127.0.0.1:6379>bgsaveBackgroundsavingstarted

与save命令不同,bgsave命令是一个异步操作。当客户端发出bgsave命令时,Redis服务器主进程会fork一个子进程,快照持久化完全交给子进程来处理,父进程继续处理客户端请求,子进程会在数据保存到rdb文件后退出。

这里我们来思考一个问题,既然Redis要处理客户端的请求又要同时持久化,那持久化的同时,内存数据结构还在改变,比如一个hash字典正在持久化,结果一个请求过来把它给删掉了,可是还没有持久化完呢,这会不会导致持久化的数据不一致啊?

Redis使用的操作系统的多进程COW(CopyOnWrite)机制来实现快照持久化,也就是我们这里的RDB持久化方式。

如上图,Redis会使用操作系统的COW机制来进行数据段页面的分离,数据段是由很多操作系统的页面组合而成,当父进程对其中一个页面的数据进行修改时,会将被共享的页面复制一份分离出来,然后对这个复制的页面进行修改,这时子进程相应的页面是没有变化的,它能看到的内存里的数据在进程产生的一瞬间就凝固了,再也不会改变,这也是为啥RDB持久化为啥叫快照持久化的原因。

2.1.3服务器配置定期自动触发

在redis.conf中配置:save多少秒内数据变了多少

#save""#不使用RDB存储不能主从#save9001#表示15分钟(900秒钟)内至少1个键被更改则进行快照。#save30010#表示5分钟(300秒)内至少10个键被更改则进行快照。#save6010000#表示1分钟内至少10000个键被更改则进行快照。

通过配置文件触发持久化的方式与bgsave命令类似,达到触发条件时会fork一个子进程进行数据保存。

线上的Redis环境不建议使用此方式。因为设置触发的时间太短,则容易频繁写入rdb文件,影响服务器性能,时间设置太长则会造成数据丢失。

2.2RDB执行流程(原理)

Redis父进程首先判断:当前是否在执行save、bgsave或bgrewriteaof(aof文件重写命令)的子进程,如果在执行则bgsave命令直接返回。(不能同时执行的原因是出于性能方面考虑,并发出两个子进程,并且这两个子进程都同时执行大量的磁盘写入操作,对性能会产生影响。)父进程执行fork(调用OS函数复制主进程)操作创建子进程,这个过程中父进程是非阻塞的,Redis能执行来自客户端的其它命令。子进程创建RDB文件,根据父进程内存快照生成临时快照文件,完成后对原有文件进行原子替换。(RDB始终完整)子进程发送信号给父进程表示完成,父进程更新统计信息。父进程fork子进程后,继续工作。

2.3RDB文件结构

2.3.1REDIS

RDB文件的开头部分是REDIS部分,这个部分长度为5个字节,保存着“REDIS”五个字符。通过这五个字符,程序在载入文件时,可以快速检查该文件是否是RDB文件。

2.3.2db_version

db_version长度为4个字节,值是一个字符串表示的整数,这个整数记录的是RDB文件的版本号(不是Redis版本号),比如“0006”就代表RDB文件的版本为第六版。

2.3.3databases

一个RDB文件的databases部分可以保存任意多个非空数据库。

例如,如果服务器的0号数据库和3号数据库非空,那么服务器将创建如下图的RDB文件,图中的database0代表0号数据库所有键值对数据,而database3代表3号数据库所有键值对数据。

每个非空数据库在RDB文件中都可以保存为SELECTDB、db_number、key_value_pairs三个部分。如下图所示:

SELECTDB常量的长度为1个字节,当读入程序遇到这个值的时候,它知道接下来要读入的是一个数据库号码。

db_number保存着一个数据库号码,根据读入的数据库号码进行数据库切换,使得之后读入的键值对可以载入到正确的数据库中。

key_value_pairs保存着数据库中所有键值对数据,如果键值对带有过期时间的话,那么键值对的过期时间也会保存在内。

2.3.4EOF

结束标志

2.3.5check_sum

校验和,就是看文件是否损坏,或者是否被修改。

最后再来看一下一个完整的RDB文件,如下图所示:

三、AOF

AOF(AppendOnlyFile)持久化方式会记录客户端对服务器的每一次写操作命令,并将这些写操作以Redis协议追加保存到以后缀为aof文件末尾,在Redis服务器重启时,会加载并运行aof文件的命令,以达到恢复数据的目的。

AOF会记录过程,RDB只管结果。

3.1开启AOF持久化方式

Redis默认不开启AOF持久化方式,我们可以在redis.conf配置文件中开启并进行更加详细的配置。

appendonlyno#默认不开启,需要开启的话要改成yes。appendfilename"appendonly.aof"#aof文件名dir./#AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的。#appendfsyncalways#写入策略appendfsynceverysec#写入策略#appendfsyncno#写入策略no-appendfsync-on-rewriteno#默认不重写aof文件

3.2AOF执行原理

AOF文件中存储的是redis的命令,同步命令到AOF文件的整个过程可以分为三个阶段:

命令传播:Redis将执行完的命令、命令的参数、命令的参数个数等信息发送到AOF程序中。缓存追加:AOF程序根据接收到的命令数据,将命令转换为网络通讯协议的格式,然后将协议内容追加到服务器的AOF缓存中。文件写入和保存:AOF缓存中的内容被写入到AOF文件末尾,如果设定的AOF保存条件被满足的话,fsync函数或者fdatasync函数会被调用,将写入的内容真正地保存到磁盘中。

3.2.1命令传播

当一个Redis客户端需要执行命令时,它通过网络连接,将协议文本发送给Redis服务器。服务器在接到客户端的请求之后,它会根据协议文本的内容,选择适当的命令函数,并将各个参数从字符串文本转换为Redis字符串对象(StringObject)。每当命令函数成功执行之后,命令参数都会被传播到AOF程序。

3.2.2缓存追加

当命令被传播到AOF程序之后,程序会根据命令以及命令的参数,将命令从字符串对象转换回原来的协议文本。协议文本生成之后,它会被追加到redis.h/redisServer结构的aof_buf末尾。

redisServer结构维持着Redis服务器的状态,aof_buf域则保存着所有等待写入到AOF文件的协议文本(RESP)。

3.2.3文件写入和保存

每当服务器常规任务函数被执行、或者事件处理器被执行时,aof.c/flushAppendOnlyFile函数都会被调用,这个函数执行以下两个工作:

WRITE:根据条件,将aof_buf中的缓存写入到AOF文件。SAVE:根据条件,调用fsync或fdatasync函数,将AOF文件保存到磁盘中。

为了提高文件写入效率,在现代操作系统中,当用户调用write函数将数据写入文件时,操作系统通常会将数据暂存到一个内存缓冲区里,当缓冲区被填满或超过了指定时限后,才真正将缓冲区的数据写入到硬盘里。

这样的操作虽然提高了效率,但也带来了安全问题:如果计算机停机,内存缓冲区中的数据会丢失。因此系统同时提供了fsync、fdatasync等同步函数,可以强制操作系统立刻将缓冲区中的数据写入到硬盘里,从而确保数据的安全性。

3.2.4AOF保存模式

AOF缓存区的同步文件策略由参数appendfsync控制,各个值的含义如下:

AOF_FSYNC_NO:不保存。AOF_FSYNC_EVERYSEC:每一秒钟保存一次。(默认)AOF_FSYNC_ALWAYS:每执行一个命令保存一次。(不推荐)

3.2.4.1AOF_FSYNC_NO

在这种模式下,每次调用flushAppendOnlyFile函数,WRITE都会被执行,但SAVE会被略过。

在这种模式下,SAVE只会在以下任意一种情况中被执行:

Redis被关闭AOF功能被关闭系统的写缓存被刷新(可能是缓存已经被写满,或者定期保存操作被执行)

这三种情况下的SAVE操作都会引起Redis主进程阻塞。

3.2.4.2AOF_FSYNC_EVERYSEC

在这种模式中,SAVE原则上每隔一秒钟就会执行一次,因为SAVE操作是由后台子进程(fork)调用的,所以它不会引起服务器主进程阻塞。

3.2.4.3AOF_FSYNC_ALWAYS

在这种模式下,每次执行完一个命令之后,WRITE和SAVE都会被执行。

另外,因为SAVE是由Redis主进程执行的,所以在SAVE执行期间,主进程会被阻塞,不能接受命令请求。

对于三种AOF保存模式,它们对服务器主进程的阻塞情况如下:

四、AOF重写

4.1AOF文件重写的原理

前面了解完RDB和AOF两种持久化方式的原理后,我们再来来看我那粉丝读者的阿里面试题:Redis中的AOF文件太大了怎么办?

这就要用到AOF的重写机制了。因为AOF持久化是通过保存被执行的写命令来记录数据库状态的,随着AOF文件内容越来越多,文件的体积也越来越大。如果不对AOF文件加以管控的话,可能会对Redis服务器产生影响。

举个例子,如果客户端执行了以下命令:

rpushlist12//[1,2]rpushlist3//[1,2,3]rpushlist456//[1,2,3,4,5,6]lpoplist1//[2,3,4,5,6]lpoplist2//[3,4,5,6]rpushlist7//[3,4,5,6,7]

那么光记录list这个状态,AOF文件就需要保存六条命令。实际线上的应用,写命令肯定比这频繁而且体积更大,更何况线上要记录很多个key的状态。

为了解决AOF文件体积膨胀的问题,Redis提供了文件重写(rewrite)功能。通过该功能,Redis服务器可以创建一个新的AOF文件来代替旧的AOF文件,重写后的新AOF文件包含了恢复当前数据集所需的最小命令集合。所谓的“重写”其实是一个有歧义的词语,实际上,AOF重写并不需要对原有旧的AOF文件进行任何写入和读取,新旧两个AOF文件所保存的数据库状态相同,但新的AOF文件不会包含任何浪费空间的冗余命令,所以新的AOF文件体积通常比旧的AOF文件体积小得多。

从上面可以看到,为了记录list这个状态,AOF文件就需要保存六条命令。如果服务器想要用尽量少的命令来记录list键的状态,那么最简单高效的办法不是去读取和分析现有AOF文件的内容,而是直接从数据库中读取键list的值,然后用rpushlist34567命令来代替保存在AOF文件中的六条命令,这样就可以将保存在list键所需的命令从六条减到一条了。

除了上面的集合键以外,其它所有类型的键都可以用同样的方法去减少AOF文件中的命令数量。首先从数据库中读取键现在的值,然后用一条命令去记录键值对,代替之前记录这个键值对的多条命令,这就是AOF重写功能的实现原理。

4.2AOF后台重写

上面的AOF重写功能是通过aof_rewrite函数来实现的,但这个函数会进行大量的写操作,所以调用这个线程将被长时间阻塞,因为Redis服务器使用单线程来处理命令请求,所以如果服务器直接调用aof_rewrite函数的话,那么重写AOF文件期间,服务器将无法处理客户端发来的命令请求。

Redis不希望AOF重写造成服务器无法处理请求,所以Redis决定将AOF重写程序放到后台子进程里执行,这样处理的最大好处是:

子进程进行AOF重写期间,主进程可以继续处理命令请求。子进程带有主进程的数据副本,使用子进程而不是线程,可以在避免锁的情况下,保证数据的安全性。

不过,使用子进程也有一个问题需要解决:因为子进程在进行AOF重写期间,主进程还需要继续处理命令,而新的命令可能对现有的数据进行修改,这会让当前数据库的数据和重写后的AOF文件中的数据不一致。

为了解决这个问题,Redis增加了一个AOF重写缓存,这个缓存在fork出子进程之后开始启用,Redis主进程在接到新的写命令之后,除了会将这个写命令的协议内容追加到现有的AOF文件之外,还会追加到这个缓存中。

4.3重写过程分析

Redis在创建新AOF文件的过程中,会继续将命令追加到现有的AOF文件里面,即使重写过程中发生停机,现有的AOF文件也不会丢失。而一旦新AOF文件创建完毕,Redis就会从旧AOF文件切换到新AOF文件,并开始对新AOF文件进行追加操作。

当子进程在执行AOF重写时,主进程需要执行以下三个工作:

处理命令请求将写命令追加到现有的AOF文件中将写命令追加到AOF重写缓存中

这样一来可以保证:

现有的AOF功能会继续执行,即使在AOF重写期间发生停机,也不会有任何数据丢失。所有对数据库进行修改的命令都会被记录到AOF重写缓存中。当子进程完成AOF重写之后,它会向父进程发送一个完成信号,父进程在接到完成信号之后,会调用一个信号处理函数,并完成以下工作:将AOF重写缓存中的内容全部写入到新AOF文件中。对新的AOF文件进行改名,覆盖原有的AOF文件。

这个信号处理函数执行完毕之后,主进程就可以继续像往常一样接受命令请求了。在整个AOF后台重写过程中,只有最后的写入缓存和改名操作会造成主进程阻塞,在其他时候,AOF后台重写都不会对主进程造成阻塞,这将AOF重写对性能造成的影响降到了最低。

以上就是AOF后台重写,也即是BGREWRITEAOF命令的工作原理。

4.4触发方式

4.4.1配置触发

在redis.conf中配置

#表示当前aof文件大小超过上一次aof文件大小的百分之多少的时候会进行重写。如果之前没有重写过,以启动时aof文件大小为准auto-aof-rewrite-percentage100#限制允许重写最小aof文件大小,也就是文件大小小于64mb的时候,不需要进行优化auto-aof-rewrite-min-size64mb

4.4.2执行bgrewriteaof命令

127.0.0.1:6379>bgrewriteaofBackgroundappendonlyfilerewritingstarted五、Redis4.0混合持久化

重启Redis时,我们很少会使用RDB来恢复内存状态,因为会丢失大量数据(会丢失最后一次快照以后更改的所有数据)。我们通常使用AOF日志重放,但是重放AOF日志相对于使用RDB来说要慢很多,这样在Redis实例很大的时候,启动需要花费很长的时间。

Redis4.0为了解决这个问题,一个新的持久化方式——混合持久化出来了。如下图,将RDB文件的内容和增量的AOF日志文件存在一起。这里的AOF日志不再是全量的日志,而是自持久化开始到持久化结束的这段时间发生的增量AOF日志,通常这部分AOF日志很小。

如果把混合持久化打开,aofrewrite的时候就直接把rdb的内容写到aof文件开头。

开启混合持久化aof-use-rdb-preambleyes

我们可以看到该AOF文件是rdb文件的头和aof格式的内容,在加载时,首先会识别AOF文件是否以REDIS字符串开头,如果是就按RDB格式加载,加载完RDB后继续按AOF格式加载剩余部分。这样的话就可以完全替代之前的AOF全量文件重放,重启效率因此得到大幅提升。

六、RDB与AOF的对比

6.1RDB

优点:

与AOF方式相比,通过rdb文件恢复数据比较快。RDB是二进制压缩文件,占用空间小,便于传输(传给slaver)、数据备份等。通过RDB进行数据备份,由于主进程fork子进程来进行持久化,所以对Redis服务器性能影响较小。

缺点:

如果服务器宕机的话,采用RDB的方式会造成某个时段内数据的丢失,比如我们设置5分钟达到1000次写入就同步一次,那么如果还没达到触发条件服务器就死机了,那么这个时间段的数据会丢失。使用save命令会造成服务器阻塞,直到数据同步完成才能接收后续请求。使用bgsave命令在fork子进程时,如果数据量太大,fork的过程也会发生阻塞,另外,fork子进程会耗费内存。

6.2AOF

优点:

AOF设置为每秒保存一次,则最多丢2秒的数据。数据丢失相对RDB来说更少。AOF写入文件时,对过期的key会追加一条del命令,当执行AOF重写时,会忽略过期key和del命令。

缺点:

生成的日志文件太大,即使通过AOF重写,文件体积仍然很大。恢复数据的速度比RDB慢。

根管治疗暂封石膏掉了怎么办

01:17根管治疗白色封药掉了怎么办

根管治疗后封药掉落,需要明确是属于部分脱落还是全部脱落。如果是部分脱落并且时间较短,可以不用处理。若为全部脱落,则需要及时再次封闭。

因为口腔内部存在700多...

龚仁国│成都医学院第一附属医院

2020/12/18播放(81930)

根管治疗白色封药掉了怎么办

"根管治疗白色封药掉了以后,要及时的与就诊医生联系,然后到医院复诊,让医生重新冲洗根管重新封药。因为白色的药物,主要用来暂时性的封闭牙神经根管。如果它脱落了,就会有大量的唾液内...

语音时长01:19'

张娇│中国人民解放军第463医院

2019/04/12收听(15994)

02:15根管治疗白色封药掉了怎么办

在根管治疗的每一步结束之后,都要在根管治疗开孔的部位用白色的药将孔封上,以免有口腔里的细菌、外部的细菌进到治疗的根管中。

如果白色封药掉了,建议尽早找医生将封...

王峰│首都医科大学附属北京口腔医院

2023/05/18播放(80136)

01:45根管治疗用什么封管

根管治疗的充填材料有两大类:

1、充填糊剂:糊剂也分很多类型,包括树脂类糊剂、氧化锌类糊剂等;但是目前在临床上较常用的是树脂类糊剂,常用的是AHPlus糊剂,...

石晶│山西省人民医院

2019/07/15播放(69832)

02:15根管治疗掉了怎么办

根管治疗掉落的治疗方法,要看是暂封的药物掉落,还是整个根管治疗的牙齿掉落。根据不同的情况,主要治疗有以下几点:

1、暂封药物掉落:如果是根管治疗的过程当中,暂...

王峰│首都医科大学附属北京口腔医院

2022/04/06播放(62542)

02:04根管治疗封药封几天

根管治疗封药通常情况下,长的时间要封1个月,短的时间也要封1周。1周到1个月是根据根管里炎症的轻重,或者根尖区炎症的范围决定。根尖区炎症较重、范围较大,可能要经过多次封药...

王峰│首都医科大学附属北京口腔医院

2023/04/20播放(85471)

根管治疗封氢氧化钙一般封多久

"根管治疗封氢氧化钙具体封多久要看病人的反应,大部分患者需要封2周,根管治疗要进行3-4次。氢氧化钙是接触性消炎药,一般根尖有炎症的时候,病人咬东西或敲的时候有疼痛的感觉。这样...

语音时长01:40'

李凌│北京积水潭医院

2020/05/13收听(49847)

根管治疗的封药有什么

"根管治疗常见的封药有牙髓失活药物与抑菌消炎类药物,临床上常用的抑菌消炎类药物包括樟脑酚、甲醛甲酚、氢氧化钙类,目前应用比较广泛的是氢氧化钙类的根管消炎药。根管治疗可分为一次性...

语音时长01:29'

王立威│北部战区总医院

2020/03/05收听(48685)

01:48根管治疗的封药有什么

根管治疗中使用的封堵药物较多,即封失活剂使用的药物,如氧化锌丁香油水门汀、磷酸锌水门汀、聚羧酸锌水门汀及氢氧化钙等药物。牙齿失活时即开髓引流后可能需进行牙髓失活,将牙髓失...

谢春│华中科技大学同济医学院附属协和医院

2021/06/03播放(82009)

牙齿暂封膏可以舔吗

"在牙齿治疗的过程中,应用牙齿暂封膏充填牙齿的时候是可以舔的,但是需要特别注意,不要经常用力的去舔,否则将暂封膏舔掉就不好了。如果暂封膏掉了,一定要立刻去医院重新进行充填。在口...

语音时长01:07'

王佟辉│锦州市中心医院

2019/02/28收听(13705)

根管治疗填充物掉了怎么办

"根管治疗填充物掉了,需要进行口腔检查,拍摄X光片后分别治疗,具体治疗如下:1、去净补牙材料后修补:如果颌面的充填物部分缺损,深度没有到达髓腔,可以去净补牙材料,重新制备洞型后...

语音时长02:05'

王惠│济南市中医医院

2021/07/28收听(16524)

第一次根管治疗封什么药

"第一次根管治疗完成后,封的药物并不完全一致,因为治疗程序也根据疾病的不同,并不完全一样。如果是牙神经发炎,也就是牙髓炎,第一次根管治疗可以进行拔髓,也可以进行失活,失活就是使...

语音时长01:34'

于玲│首都医科大学附属北京同仁医院

2020/12/02收听(89785)

根管治疗封药几次

"根管治疗进行根管封药分几次,需要根据病人的病情进行具体分析。如果病人得的是急性的牙髓炎,在局麻下直接进行了牙髓的拔除,而且拔除的比较彻底。有的可能需要进行封药,下次再进行根管...

语音时长01:30'

张冰│哈尔滨医科大学附属第一医院

2020/02/26收听(24395)

根管治疗封药是什么意思

"根管治疗是目前治疗牙神经发炎的首选方法,也就是治疗牙髓炎和根尖周炎的主要方法。根管治疗过程封药就是说明根管治疗过程中需要应用不同的药物,来进行每种步骤的操作。一般情况下,根管...

语音时长01:24'

于玲│首都医科大学附属北京同仁医院

2021/02/16收听(87649)

01:54根管治疗封药后不能吃什么

根管治疗的封药有2种,一种是治疗中间分次,分2次、3次来复诊,在中间的治疗间隙要封药;另外一种就是治疗完了以后,做修复之前或者做补牙之前,要用暂时的临时的材料把牙齿上的缺...

岳林│北京大学口腔医院

2019/07/01播放(65390)

01:39根管治疗封药后咬合痛怎么办

在根管治疗过程当中会多次封药,每个步骤都不一样,如第一次开髓需要封填杀神经的药,第二次扩充根管需要消毒杀菌的药,第三次根管充填需要在根管内填压、填充根管充填的材料。每次的...

周赟│航空工业三六三医院

2019/08/27播放(86130)

根管治疗牙齿侧面掉了怎么办

"根管治疗牙齿侧面掉了,可以根据缺损情况采取治疗措施,具体治疗如下:1、充填:如果近中或远中邻面缺损,可以制备洞型后先充填远中邻面,再充填近中邻面。注意去除多余材料,恢复邻接关...

语音时长01:10'

王惠│济南市中医医院

2021/07/13收听(63798)

01:50根管治疗的牙齿掉了一块怎么办

根管治疗的牙齿掉一块,建议患者尽早到正规医院口腔科、口腔医院牙体牙髓病科找专业医生进行检查。根据掉的部位、大小、范围,决定是进行简单补牙,还是进行补牙后全冠修复,或进行相...

谢春│华中科技大学同济医学院附属协和医院

2021/06/09播放(94715)

根管封药后注意事项

"根管封药以后的注意事项,包括根管治疗封药以后由于中间喷药所需要的暂封物基本上都是氧化锌类暂封材料,材料在24小时以上才硬固。所以,在封药的当天需要避免用封药侧来进行吃饭,可以...

语音时长01:33'

于玲│首都医科大学附属北京同仁医院

2021/01/14收听(35393)

根管治疗封药疼怎么回事

根管治疗封药疼痛,一般都出现在杀神经的时候,也就是第一次进行治疗,先开髓然后在髓腔里封闭失活剂。有的人封闭失活计以后会出现疼痛。最可能的原因:1、牙髓组织水肿并没有引流通畅,直...

语音时长01:13'

张冰│哈尔滨医科大学附属第一医院

2019/06/10收听(32748)

相关文章