在2022年浦东新区全国科普日之际,在中国科学技术大学上海研究所举办的墨子沙龙上,中国科学院院士高富与观众分享了“人、细菌与疫苗”的话题,并回答了关于新冠肺炎疫苗的“三个问题”。
高福:无证据表明肺结节与打疫苗相关
9月24日,中国科学院院士高富在墨子沙龙与公众分享。问题:在病毒变异后,COVID-19疫苗还会有效吗?冠状病毒变异后疫苗是否有效?高福说,一种疫苗的免疫基础包括预防感染、预防疾病、预防传播、预防疾病、预防死亡四个方面,“迪戎先生尽管变化多端,我们的疫苗刺激保护性强,大折扣在预防感染上,小折扣在预防疾病上,也就是小折扣在预防传播上,对抗严重,但在死亡上效果非常明显。”所以不要怀疑疫苗。问:有必要继续接种第四和第五疫苗吗?一些国家还推出了针对变异病毒的下一代疫苗。有必要继续接种新疫苗吗?高富指出,人类第一次如此大规模地通过接种疫苗预防冠状病毒,因为这是第一次,有很多未知,我们今天做的很多决定都是动态的,根据进一步的研究来决定下一步该怎么做,“现有的数据支持在加强后再打两针,然后打四针(第一针),甚至(第五针)。”目前,我国的疫苗接种是自愿的,将随着时间的推移进行动态调整。他还指出,疫苗接种应该“少量”和“定期”进行。他举了一个“日出人群”的例子,他们通过不断识别坏人来识别坏人;我们的疫苗以类似的方式工作,比如每六个月唤醒免疫细胞,让它们识别冠状病毒。问:您如何看待疫苗的副作用?至于疫苗接种和肺结节的风险,高说没有证据表明两者有很强的关系。但他说,这种疫苗有其自身的缺陷,这给今天的年轻人提出了一个新的问题然后我们必须好好研究肺免疫。他说,在地球上,人类一直在努力保持平衡——例如,飞机可能坠毁,火车可能脱轨,人们在走路时可能摔倒——但他们不会忽视这一点(因为风险)。我们面临着如此规模的大流行,疫苗既可以帮助我们防止个人死亡或严重疾病,也可以帮助我们保护人们免受疾病的伤害,因此,当我们别无选择时,我们需要疫苗。虽然普通疫苗进入市场大约需要10年时间,但COVID-19疫苗的迅速推出也引发了问题和担忧。对此,高富表示,这是以需求为导向的,新冠肺炎疫苗的快速研发和销售与疫情的剧烈和(疫苗)需求的迫切有关。另一方面,这也证明,如果再次发生类似疫情,相关疫苗和药物可以通过“绿色通道”。我们不要忘记,在科学落后的时候,黑死病夺去了欧洲一半的人口;“今天,世界运转良好,科学发挥着非常重要的作用。”高傅说。
举报/反馈
如今,肺结节的患者朋友越来越多,很多医院甚至新开了肺结节专科门诊,以应对患者朋友的诊治需求。
那么问题来了,到底肺结节越来越多的原因是什么呢?有传言说接种新冠疫苗后出现肺结节,导致人们担心新冠疫苗的副作用,真的如此吗?请看本文分析
肺结节和新冠疫苗有关吗?
对于新冠疫苗诱发肺结节的传言,在9月24日,中国科学院院士高福在由中国科学技术大学上海研究院主办的墨子沙龙上已经对此做出说明,目前尚未有证据表明疫苗接种与肺结节等疾病的发生存在相关性。其实,如果是对新冠疫苗和肺结节的原理有所了解的,就知道二者相关性不大。
肺结节,其实就是肺部的影像阴影,肺结节的影像学定义是被肺实质完全包围、界限清楚的小病变,直径不超过30mm。如果直径大于30mm,这种病变是肿块而非结节,恶性概率显著更高,也就是肺癌可能性大。
虽然导致肺结节的原因有很多,主要分为两种,一种是因为病毒、细菌、支原体、真菌等感染性病原体引起的肺部结节,另一种是因为肺感染的原因例如尘肺、肿瘤等。而疫苗,尤其是传言中所指的科兴的疫苗,它是属于灭活疫苗,就是已经在制备的过程中将病毒“杀死”,已经失去了感染和复制的能力,所以也不会感染我们的肺部组织,引发肺结节。
疫苗从研发到上市,是经过临床前试验和层层临床试验,严格的研发和试验,在上市前已经积累了很多实验数据了,并没有提示有肺结节的风险。所以专家才能够说目前并没有证据证明疫苗能够导致肺结节。那为什么人们会感觉肺结节的患者越来越多了呢?
肺结节越来越多,和3个因素有关
1.人们做体检更加频繁
一方面人们重视体检,很多单位都是每年常规体检一次,其次,一是随着新冠肺炎疫情的爆发,人们进行肺部CT检查的频次也增多,尤其是最初核酸检测没有普及的时候,大多数都要靠医生的临床判断和CT的检查情况来判断,就会导致很多有发热和呼吸道症状的患者去进行肺部的CT检查。这也会大大增加肺结节的检出率。
2.CT设备更加先进
是随着科学技术的发展,CT已经不是大医院才有的检查设备,甚至分辨率越来越高的仪器被研制出来,我们可以看得更清楚,就会有很多以前发现不了的微小肺结节被检查出来。同时,人工智能软件的问世,可以帮助影像科医生解读CT报告,导致大部分报告都有肺部小结节的字眼。
3.环境污染因素
我们知道,吸烟、空气污染、汽车尾气等环境污染,最直接进入人体的就是肺部,随着人类工业化的不断升级,我们说,我们人体肺部的健康也受到了更大的威胁,这也是增加肺结节发生率的因素。
同时,环境污染会导致人体肺部感染、免疫力低下以及由此而带来的其他疾病,而这些肺部感染等疾病也会诱发肺结节的发生。
总结
总之,肺结节的检出增加与新冠疫苗关系不大,我们不能因为一些谣言而忽视新冠疫苗在抗击疫情中的重要作用。而且绝大多数的肺结节(最长直径<5mm)并不需要治疗,即使发现肺结节,要找专业的医生评估,进行合理的治疗,切不可因为担心肺结节就不打疫苗。
举报/反馈
上海市卫健委今早通报:9月24日0—24时无新增本土确诊和无症状感染者
在上海发布评论区
不少网友表达了欣喜
希望0新增继续保持!
9月25日零时起
上海青浦区部分区域解除管控↓
市新冠肺炎疫情防控工作领导小组办公室发布消息:根据《新型冠状病毒肺炎防控方案(第九版)》要求,经研究决定,自2022年9月25日零时起,将青浦区练塘镇西至西泾江、东至泖阳港、南至老松蒸公路、北至松蒸公路的区域解除管控。
上海市其他区域风险等级不变。
目前,上海还有几个中高风险?上海发布回应↓
上海杨浦发布情况通报↓
自全市开展文旅行业疫情防控大排查大整治专项行动以来,杨浦区依托“部门联合、条块联动”的工作机制,持续开展“全覆盖、全链条、全时段”的大排查大整治行动,保持力度不减、尺度不松。现对近期发现的违反防疫要求的4家文旅场所予以通报,具体如下:
一、立案查处1家:
1.上海凯劢台球有限公司(棋牌室)
地址:黄兴路1号
二、责令关闭2家,分别是:
1.上海懿璞文化发展有限公司(密室剧本杀)
地址:国宾路18号
2.晓子薇棋牌休闲娱乐(上海)有限公司(棋牌室)
地址:锦创路20号
三、责令整改1家:
1.上海锦伟宾馆有限公司分公司(诺言法式精品酒店)
地址:黄兴路1100号
针对以上场所,检查中如发现违法违规行为,将严格依据相关法律法规从严从快处理,绝不姑息。全区各文旅场所要引以为戒,严格遵守防疫有关规定,落实主体责任,坚决克服侥幸心理,筑牢本区文旅场所防疫屏障。欢迎广大市民群众对杨浦区违反防疫要求擅自营业以及未严格落实常态化防疫措施的文旅场所进行监督举报,共同做好文旅场所疫情防控工作。举报电话:65191668,12345。
家族群疯传“新冠疫苗打出肺结节”?
谣言!不用担心!↓
近日,“接种新冠疫苗后发现肺结节”的网络传言登上热搜,引起不少民众的不安。多位业内专家对此类虚假信息进行了辟谣和科普解读。
首先要说的是,目前没有证据表明疫苗接种与肺结节的出现有关联。从免疫学原理看,也无法找到疫苗接种和肺结节的关联。
目前国内的灭活疫苗在其他国家和地区也大量使用,包括中国香港、智利、阿根廷等,迄今为止已经有了大量的真实世界研究出来,在所有观测到的、有统计学意义的不良事件中,并没有提及肺结节的风险。
实际上,即便是对于肺癌患者来说,在许多国家的新冠疫苗接种指南当中,他们更应当优先接种新冠疫苗。因为他们属于新冠高危人群,一旦感染,重症和死亡的风险都高于普通人,这一点已在大量对照研究中得以证实,疫苗接种的获益远大于可能存在的风险。
从各地数据看,肺结节检出量增加与国产仪器进步有关。
不接种疫苗,每年仍会有相当比例的人群会检测出肺结节。正常人群肺结节的检出率,各地区数据不一,通常在20%至40%左右,高的可能达到70%。
什么是肺结节?
实际上肺结节并没有一个非常统一的定义。一般认为,肺结节是指在影像学检查中直径≤ 3cm 类圆形肺部阴影。
肺结节有很多不同的类型
从影像上来说,有纯磨玻璃结节、部分实性磨玻璃结节和实性结节;
从病理检测结果来看,有感染引起的炎症(真菌、结核等)、非感染的肉芽肿、良性肿瘤(如错构瘤)等,只有一小部分是癌前病变和真正的恶性肿瘤,这也包括从不典型腺瘤样增生(AAH)、原位癌(AIS)、微浸润腺癌(MIA)到浸润腺癌(IA)等不同类型。
肺结节通常由胸部CT检出。在我国,CT机(计算机断层扫描仪)曾经依赖进口、价格昂贵。
近十几年来,国产品牌CT逐渐崛起,为CT机的降价和普及奠定了基础。据有关机构统计,2021年底,全国人均CT保有量约为34台/百万人,人均CT保有量已达美国的2/3。CT保有量的增加,让更多人的体检项目中加入了以往没有的CT检查;而越来越多的医院有了更高分辨率的CT机,能查出以前看不到的微小肺结节。两方面原因叠加,让我们感到身边查出肺结节的人增多了。
需要强调的是,肺结节实质上只是肺部的影像阴影,并未对性质进行认定。绝大部分的肺结节不需要治疗,只需要听医嘱定期复查即可。
最后,对于预防肺结节来说,戒烟(包括远离二手烟),避免长时间厨房油烟接触,这两点是最重要的,尤其是对于中国女性而言。
高福:
疫苗接种应遵循“少量多次”
9月24日下午,中国科学院院士高福在浦东新区“全国科普日”活动——墨子沙龙发表演讲。针对新冠疫苗的有效性和安全性,高福院士给出自己的观点:数据证明,新冠疫苗在防感染、防发病、防重症、降低死亡率四个方面发挥了良好的基础免疫作用,尽管病毒存在变异,但是在防重症和降低死亡率两方面仍然有着显著效果。而副作用方面,目前尚未有证据表明疫苗接种与肺结节等疾病的发生存在相关性。
高福认为,新冠疫苗的研发针对的是新冠疫情这样来势汹汹的重大危机,在需求导向和目标导向下,疫苗研发的“绿色通道”被证明是解决危机的有效途径。
高福认为,总体来说,疫苗接种应遵循“少量多次”,他将免疫细胞对外来病毒的识别比作“认人”,可以想象,两个认识的人,十年不见,再见面可能就认不出了,而如果半年见一次面,再见到就不会陌生。打疫苗就像是隔一段时间让免疫系统认一认病毒的样子,所以少量多次是比较好的策略。
目前,得益于中国近几年在病原微生物和免疫学的长期科研投入,当下中国已经有了7款疫苗,其中有5种灭活疫苗,1种腺病毒载体疫苗和1种蛋白疫苗。而mRNA疫苗,我国的技术发展相对缓慢。在高福看来,mRNA疫苗将是生物医学的革命化变革,中国应当有所布局。
“世界如果不共享疫苗,病毒将会共享世界。”高福院士说,科学问题往往是所有人类面临的问题,新冠病毒是人类的共同敌人,需要全世界科学家通力合作。中国科学家应当睁眼看世界,既不能妄自菲薄,也不能妄自尊大,应当对世界科学的发展做出我们的贡献。
应对疫情危机,高福认为,最重要的一点是,向科学要答案。科技在新冠肺炎疫情防控中发挥了重要作用,已成为不争的事实。
奥密克戎变异株单价灭活疫苗
已完成临床研究!
9月25日,科兴创新产研基地落成仪式在京举行。该基地位于大兴区生物医药基地,从本月起将陆续投入使用,将承载重组新冠疫苗等产品的研发、产业化任务。
该基地总投资超过21亿元,总建筑面积15.6万平方米,本月起将陆续投入使用。基地将推动国家“重大新药创制”科技重大专项百白破脊灰Hib系列联合疫苗,以及重组新冠疫苗等其他创新产品研发和产业化落地。
据介绍,SINOVAC科兴多款基于不同技术平台的新冠疫苗研究也在稳步推进。针对奥密克戎变异毒株的单价灭活疫苗已完成临床研究,三价灭活疫苗已在智利获批开展临床研究;重组蛋白疫苗正在向国家药监局滚动提交临床申请资料;百白破脊灰Hib系列联合疫苗目前已经完成临床前研究,正在申报和审评过程中。
今年7月,该公司总投资5亿元的疫苗质量研究中心在昌平区开启建设,预计2023年四季度正式投入使用,将用于疫苗从原材料到成品的全程存储及质量控制研究,提升疫苗质量标准和质控能力。
本文来源:上观新闻、上海发布、上海网络辟谣、上海杨浦、北京日报等
相关作者:黄海华
微信编辑:安通 皮小姐
校对:晓川
举报/反馈
网传打完疫苗查出肺部结节,是疫苗出了问题吗?这其实是医学进步、检测水平提升的结果,而有些人把结果当原因,进行了错误的推论,还以讹传讹。
实际上,肺部结节是慢性的病症,简单来说,肺部结节根本不可能,在打完疫苗之后的短时间内就形成。所以,之所以会查出,和是否打疫瘟无关,而是在之前很长的一段时间内,就已经有问题了,只是正好在打完疫瘟之后的这段时间里,查了出来。反过来说,如果疫苗真的是引发肺部结节的原因,那反而是肺部结节患者的福音了,因为能找到病因,就代表有治好的方案和希望了。
发文不易,如果大家喜欢,请加关注并长按3秒点个赞吧,精彩继续。
在今天,越来越多的人之所以检测出肺部结节,其实主要原因是因为医学影像检测手段的提升。在几十年前,大部分人都是使用检测精度较低的X光,当时俗称“胸片”,只能检测出1厘米以上的结节。而今天,通过CT或者核磁共振等,可以发现2毫米大小的结节,所以,导致目前我国肺部结节的总检出率,提升到了百分之26至31之间,因而每4个人里查出1个肺部结节,就实属正常了。
据统计,小于5毫米的结节,恶化的概率不到百分之1;直径6毫米到2厘米的结节,恶化的概率是从百分之3.6到28;而只有大于3厘米的结节,恶化的概率才会提升到百分之70左右。所以,如果查出的结节在5毫米以下,定期去复查就可以了。
别看结节一般情况下都很小,但是也需要在变异很多代之后,才能躲过人体免疫系统的扫描,而这很多代的变异所需要的时间,通常至少需要几年,所以,打完疫苗不可能在短短几天内导致肺部结节。
对于“打完疫苗查出结节”这件事,评论区里说说你的看法吧!
举报/反馈
什么是Redis
Redis是一个开源、基于内存、使用C语言编写的key-value数据库,并提供了多种语言的API。它的数据结构十分丰富,基础数据类型包括:string(字符串)、list(列表,双向链表)、hash(散列,键值对集合)、set(集合,不重复)和sorted set(有序集合)。主要可以用于数据库、缓存、分布式锁、消息队列等...
以上的数据类型是Redis键值的数据类型,其实就是数据的保存形式,但是数据类型的底层实现是最重要的,底层的数据结构主要分为6种,分别是 简单动态字符串、双向链表、压缩链表、哈希表、跳表和整数数组 。各个数据类型和底层结构的对应关系如下:
各个底层实现的时间复杂度如下:
可以看出除了string类型的底层实现只有一种数据结构,其他四种均有两种底层实现,这四种类型为集合类型,其中一个键对应了一个集合的数据。
(一)Redis键值是如何保存的呢?
Redis为了快速访问键值对,采用了 哈希表 来保存所有的键值对,一个哈希表对应了多个 哈希桶 ,所谓的哈希桶是指哈希表数组中的每一个元素,当然哈希表中保存的不是值本身,是指向值的指针,如下图。
其中哈希桶中的entry元素中保存了*key和*value指针,分别指向了实际的键和值。通过Redis可以在O(1)的时间内找到键值对,只需要计算key的哈希值就可以定位位置,但从下图可以看出,在4号位置出现了冲突,两个key映射到了同一个位置,这就产生了哈希冲突,会导致哈希表的操作变慢。虽然Redis通过链式冲突解决该问题,但如果数据持续增多,产生的哈希冲突也会越来越多,会加重Redis的查询时间。
Redis保存数据示意图
为了解决上述的哈希冲突问题,Redis会对哈希表进行 rehash 操作,也就是增加目前的哈希桶数量,使得key更加分散,进而减少哈希冲突的问题,主要流程如下:
采用两个hash表进行操作,当哈希表A需要进行扩容时,给哈希表B分配两倍的空间。将哈希表A的数据重新映射并拷贝给哈希表B。释放A的空间。
上述的步骤可能会存在一个问题,当哈希表A向B复制的时候,是需要一定的时间的,可能会造成Redis的线程阻塞,就无法服务其他的请求了。
针对上述问题,Redis采用了 渐进式rehash ,主要的流程是:Redis还是继续处理客户端的请求,每次处理一个请求的时候,就会将该位置所有的entry都拷贝到哈希表B中,当然也会存在某个位置一直没有被请求。Redis也考虑了这个问题,通过设置一个定时任务进行rehash,在一些键值对一直没有操作的时候,会周期性的搬移一些数据到哈希表B中,进而缩短rehash的过程。
(二)Redis为什么采用单线程呢?
首先要明确的是Redis单线程指的是 网络IO 和 键值 对读写 是由一个线程来完成的,但Redis持久化、集群数据等是由额外的线程执行的。了解Redis使用单线程之前可以先了解一下多线程的开销。
通常情况下,使用多线程可以增加系统吞吐率或者可以增加系统扩展性,但多线程通常会存在同时访问某些共享资源,为了保证访问共享资源的正确性,就需要有额外的机制进行保证,这个机制首先会带来一定的开销。其实对于多线程并发访问的控制一直是一个难点问题,如果没有精细的设计,比如说,只是简单地采用一个粗粒度互斥锁,就会出现不理想的结果。即使增加了线程,大部分线程也在等待获取访问共享资源的互斥锁,并行变串行,系统吞吐率并没有随着线程的增加而增加。
这也是Redis使用单线程的主要原因。
值得注意的是在Redis6.0中引入了多线程 。在Redis6.0之前,从网络IO处理到实际的读写命令处理都是由单个线程完成的,但随着网络硬件的性能提升,Redis的性能瓶颈有可能会出现在网络IO的处理上,也就是说 单个主线程处理网络请求的速度跟不上底层网络硬件的速度 。针对此问题,Redis采用多个IO线程来处理网络请求,提高网络请求处理的并行度,但多IO线程只用于处理网络请求, 对于读写命令,Redis仍然使用单线程处理 !
(三)Redis单线程为什么还这么快?
IO多路复用机制:使其在网络IO操作中能并发处理大量的客户端请求从而实现高吞吐率 。
IO多路复用机制是指一个线程处理多个IO流,也就是常说的select/epoll机制。在Redis运行单线程的情况下,该机制允许内核中同时存在多个监听套接字和已连接套接字。内核会一直监听这些套接字上的连接请求或数据请求。一旦有请求到达,就会交给Redis线程处理,这就实现了一个Redis线程处理多个IO流的效果,进而提升并发性。
Redis是基于内存的,绝大部分请求都是内存操作,十分的迅速 。
Redis具有高效的底层数据结构,为优化内存,对每种类型基本都有两种底层实现方式 。
主要执行过程是单线程,避免了不必要的上下文切换和资源竞争,不存在多线程导致的CPU切换和锁的问题。
Redis数据丢失问题
由上一小节我们大概了解了 Redis的存储和快的主要原因,通常情况下我们会把Redis当作缓存使用,将后端数据库中的数据存储在内存中,然后从内存中直接读取数据,响应速度会非常快。但是如果服务器宕机了,内存中的数据也就会丢失,当然我们可以重新从后端数据库中恢复这些缓存数据,但是频繁访问数据库,会给数据库带来一定的压力;另一方面数据是从慢速的数据库中读取的,性能肯定比不上Redis,也会导致这些数据的应用程序响应变慢。
所以对Redis来说,实现数据的持久化,避免从后端恢复数据是至关重要的,目前Redis持久化主要有两大机制,分别是 AOF(Append Only File)日志和RDB快照 。
(一)AOF日志
AOF日志是写后日志,也就是Redis先执行命令,然后将数据写入内存,最后才记录日志,如下图:
Redis AOF操作过程
AOF日志中记录的是Redis收到的每一条命令,这些命令都是以文本的形式保存的,例如我们以Redis收到set key value命令后记录的日志为例,AOF文件中保存的数据如下图所示,其中*3代表当前命令分为三部分,每部分都是通过$+数字开头,其中数字表示该部分的命令、键、值一共有多少字节。
Redis AOF日志内容
AOF为了避免额外的检查开销,并不会检查命令的正确性,如果先记录日志再执行命令,就有可能记录错误的命令,再通过AOF日志恢复数据的时候,就有可能出错,而且在执行完命令后记录日志也不会阻塞当前的写操作。但是AOF是存在一定的风险的,首先是如果刚执行一个命令,但是AOF文件中还没来得及保存就宕机了,那么这个命令和数据就会有丢失的风险,另外AOF虽然可以避免对当前命令的阻塞(因为是先写入再记录日志),但有可能会对下一次操作带来阻塞风险(可能存在写入磁盘较慢的情况)。这两种情况都在于AOF什么时候写入磁盘,对于这个问题AOF机制提供了三种选择(appendfsync的三个可选值),分别是 Always、Everysec、No 具体如下:
我们可以根据不同的场景来选择不同的方式:
Always可靠性较高,数据基本不丢失,但是对性能的影响较大。Everysec性能适中,即使宕机也只会丢失1秒的数据。No性能好,但是如果宕机丢失的数据较多。
虽然有一定的写回策略,但毕竟AOF是通过文件的形式记录所有的写命令,但如果指令越来越多的时候,AOF文件就会越来越大,可能会超出文件大小的限制;另外,如果文件过大再次写入指令的话效率也会变低;如果发生宕机,需要把AOF所有的命令重新执行,以用于故障恢复,数据过大的话这个恢复过程越漫长,也会影响Redis的使用。
此时, AOF重写机制 就来了:
AOF重写就是根据所有的键值对创建一个新的AOF文件,可以减少大量的文件空间,减少的原因是:AOF对于命令的添加是追加的方式,逐一记录命令,但有可能存在某个键值被反复更改,产生了一些冗余数据,这样在重写的时候 就可以过滤掉这些指令,从而更新当前的最新状态。
AOF重写的过程是通过主线程fork后台的bgrewriteaof子进程来实现的,可以避免阻塞主进程导致性能下降,整个过程如下:
AOF每次重写,fork过程会把主线程的内存拷贝一份bgrewriteaof子进程,里面包含了数据库的数据,拷贝的是父进程的页表,可以在不影响主进程的情况下逐一把拷贝的数据记入重写日志;因为主线程没有阻塞,仍然可以处理新来的操作,如果这时候存在写操作,会先把操作先放入缓冲区,对于正在使用的日志,如果宕机了这个日志也是齐全的,可以用于恢复;对于正在更新的日志,也不会丢失新的操作,等到数据拷贝完成,就可以将缓冲区的数据写入到新的文件中,保证数据库的最新状态。
(二)RDB快照
上一小节里了解了避免Redis数据丢失的AOF方法,这个方法记录的是操作命令,而不是实际的数据,如果日志非常多的话,Redis恢复的就很缓慢,会影响到正常的使用。
这一小节主要是讲述的另一种Redis数据持久化的方式: 内存快照 。即记录内存中的数据在某一时刻的状态,并以文件的形式写到磁盘上,即使服务器宕机,快照文件也不会丢失,数据的可靠性也就得到了保证,这个文件称为RDB(Redis DataBase)文件。可以看出RDB记录的是某一时刻的数据,和AOF不同,所以在数据恢复的时候只需要将RDB文件读入到内存,就可以完成数据恢复。但为了RDB数据恢复的可靠性,在进行快照的时候是全量快照,会将内存中所有的数据都记录到磁盘中,这就有可能会阻塞主线程的执行。Redis提供了两个命令来生成RDB文件,分别是 save 和 bgsave :
save:在主线程中执行,会导致阻塞;bgsave:会创建一个子进程,该进程专门用于写入RDB文件,可以避免主线程的阻塞,也是默认的方式。
我们可以采用bgsave的命令来执行全量快照,提供了数据的可靠性保证,也避免了对Redis的性能影响。执行快照期间数据能不能修改呢?如果不能修改,快照过程中如果有新的写操作,数据就会不一致,这肯定是不符合预期的。Redis借用了操作系统的 写时复制 ,在执行快照的期间,正常处理写操作。
主要流程为:
bgsave子进程是由主线程fork出来的,可以共享主线程的所有内存数据。bgsave子进程运行后,开始读取主线程的内存数据,并把它们写入RDB文件中。如果主线程对这些数据都是读操作,例如A,那么主线程和bgsave子进程互不影响。如果主线程需要修改一块数据,如C,这块数据会被复制一份,生成数据的副本,然主线程在这个副本上进行修改;bgsave子进程可以把原来的数据C写入RDB文件。
写时复制机制保证快照期间数据可修改
通过上述方法就可以保证快照的完整性,也可以允许主线程处理写操作,可以避免对业务的影响。 那多久进行一次快照呢 ?
理论上来说快照时间间隔越短越好,可以减少数据的丢失,毕竟fork的子进程不会阻塞主线程,但是频繁的将数据写入磁盘,会给磁盘带来很多压力,也可能会存在多个快照竞争磁盘带宽(当前快照没结束,下一个就开始了)。另一方面,虽然fork出的子进程不会阻塞,但fork这个创建过程是会阻塞主线程的,当主线程需要的内存越大,阻塞时间越长。
针对上面的问题,Redis采用了 增量快照 ,在做一次全量快照后,后续的快照只对修改的数据进行记录,需要记住哪些数据被修改了,可以避免全量快照带来的开销。
(三)混合使用AOF日志和RDB快照
虽然跟AOF相比,RDB快照的恢复速度快,但快照的频率不好把握,如果频率太低,两次快照间一旦宕机,就可能有比较多的数据丢失。如果频率太高,又会产生额外开销,那么,还有什么方法既能利用 RDB 的快速恢复,又能以较小的开销做到尽量少丢数据呢?
在Redis4.0提出了 混合使用AOF和RDB快照 的方法,也就是两次RDB快照期间的所有命令操作由AOF日志文件进行记录。这样的好处是RDB快照不需要很频繁的执行,可以避免频繁fork对主线程的影响,而且AOF日志也只记录两次快照期间的操作,不用记录所有操作,也不会出现文件过大的情况,避免了重写开销。
通过上述方法既可以享受RDB快速恢复的好处,也可以享受AOF记录简单命令的优势。
对于AOF和RDB的选择问题 :
数据不能丢失时,内存快照和AOF的混合使用是一个很好的选择。如果允许分钟级别的数据丢失,可以只使用RDB。如果只用AOF,优先使用everysec的配置选项,因为它在可靠性和性能之间取了一个平衡。
Redis数据同步
当Redis发生宕机的时候,可以通过AOF和RDB文件的方式恢复数据,从而保证数据的丢失从而提高稳定性。但如果Redis实例宕机了,在恢复期间就无法服务新来的数据请求;AOF和RDB虽然可以保证数据尽量的少丢失,但无法保证服务尽量少中断,这就会影响业务的使用,不能保证Redis的高可靠性。
Redis其实采用了主从库的模式,以保证数据副本的一致性,主从库采用读写分离的方式:从库和主库都可以接受读操作;对于写操作,首先要到主库执行,然后主库再将写操作同步到从库。
只有主库接收写操作可以避免客户端将数据修改到不同的Redis实例上,其他
客户端进行读取时可能就会读取到旧的值;当然,如果非要所有的库都可以进行写操作,就要涉及到锁、实例间协商是否完成修改等一系列操作,会带来额外的开销。
(一)主从库如何进行第一次数据同步
当存在多个Redis实例的时候,可以通过replicaof命令形成主库和从库的关系,在从库中输入: replicaof主库ip 6379 就可以在主库中复制数据,具体有三个阶段:
首先是主从库建立连接、协商同步的过程,具体的从库向主库发送psync命令,代表要进行数据同步;psync中包含了主库的runID(Redis启动时生成的随机ID,初始值为:?)和复制进度offset(设为-1,代表第一次复制)两个参数,主库接收到psync命令,会用FULLRESYNC命令返回给从库,包含两个参数:主库runID和复制进度offset;其中FULLRESYNC代表的全量复制,会将主库所有的数据都复制给从库。待从库接收到数据后,在本地完成数据加载,具体的主库执行bgsave命令,生成RDB文件,然后将文件发给从库,从库接收到RDB文件后,首先清空当前数据,然后再加载RDB文件;这个过程主库不会被阻塞,仍然可以接受请求,如果存在写操作,刚刚生成的RDB文件中是不包含这些新数据的,此时主库会在内存中用专门的replication buffer记录RDB文件生成后所有的写操作。最后,主库会把replication buffer中的修改操作发给从库,从库重新执行这些操作,就可以实现主从库同步了。
如果从库的实例过多,对于主库来说有一定的压力,主库会频繁fork子进程以生成RDB文件,fork这个操作会阻塞主线程处理正常请求,导致响应变慢,Redis采用了主-从-从的模式,可以手动选择一个从库,用来同步其他从库的数据,以减少主库生成RDB文件和传输RDB文件的压力;如下图:
级联的“主-从-从”模式
这样从库就可以知道在进行数据同步的时候,不需要和主库直接交互,只需要和选择的从库进行写操作同步就可以了,从而减少主库的压力。
(二)主库如果挂了呢?
Redis采用主从库的模式保证数据副本的一致性,在这个模式下如果从库发生故障,客户端可以向其他主库或者从库发送请求,但如果主库挂了,客户端就没法进行写操作了,也无法对从库进行相应的数据复制操作。
不管是写服务中断还是从库无法进行数据同步,都是不能接受的,所以当主库挂了以后,需要一个新的主库来代替挂掉的主库,这样就就会产生三个问题:
怎么判断主库是真的挂了,而不是网络异常?主库如果挂了,该选择哪个从库作为新的主库?怎么把新主库的相关信息通知给从库和客户端?
Redis采用了 哨兵机制 应对这些问题,哨兵机制是实现主从库自动切换的关键机制,在主从库运行的同时,它也在进行 监控、选择主库和通知 的操作。
监控。 哨兵在运行时,周期性 地 给所有的主从库发送PING命令,检测是否仍在运行。 如果 从 库没有响应哨兵的PING命令,哨兵就会将它标记为下线状态; 如果主库没有在规定时间内响应哨兵的PING命令,哨兵也会判断主库下限,然后开始自动切换主库的流程。选主。主库挂了之后,哨兵需要按照一定的规则选择一个从库,并将他作为新的主库。通知。选取了新的主库后,哨兵会把新主库的连接信息发给其他从库,让它们执行replicaof命令和新主库建立连接,并进行数据复制;同时哨兵也会将新主库的消息发给客户端。
下图展示了哨兵的几个操作的任务:
哨兵机制的三项任务与目标
但这样也会存在一个问题,哨兵判断主从库是否下线如果出现失误呢?
对于 从 库,下线影响不大,集群的对外服务也不会间断。 但是如果哨兵误判主库下线,可能是因为网络拥塞或者主库压力大的情况,这时候也就需要进行选主并让从库和新的主库进行数据同步,这个过程是有一定的开销的,所以我们要尽可能地避免误判的情况。 哨兵机制也考虑了这一点,它通常采用多实 例 组成的集群模式进行部署,也被称为哨兵集群; 通过引入多个哨兵实例一起判断,就可以尽可能 地 避免单个哨兵产生的误判问题。 这时候判断主库是否下线不是由一个哨兵决定的,只有大多数哨兵认为该主库下线,主库才会标记为“客观下线”。
简单的来说”客观下线“的标准是当N个哨兵实例,有N/2+1个实例认为该主库为下线状态,该主库就会被认定为“客观下线”。这样就可以尽量的避免单个哨兵产生的误判问题(N/2+1这个值也可以通过参数改变);
如果判断了主库为主观下线,怎么选取新的主库呢?
上面有说 到 ,这一部分也是由哨兵机制来完成的,选取主库的过程分为“ 筛选 和 打分 ”。 主要是按照一定的规则过滤掉不符合的从库,再按照一定的规则给其余的从库打分,将最高分的从库作为新的主库。
筛选。首先从库一定是正在运行的,还要判断从库之前的网络连接状态,如果总是断连并且超过了一定的阈值,哨兵会认为该从库的网络不好,也会 将其筛掉。打分。哨兵机制根据三个规则依次进行打分: 从库优先级、从库复制进度以及从库ID号 ;在某一轮有从库得分最高,那么它就是新的主库了,选主 过程结束。如果该轮没有出现最高的,继续下一轮。优先级最高的从库。 用户可以通过slave-priority配置项,给不同的从库设置优先级。 选主库的时候哨兵会给优先级高的从库打高分,如果一个从库优先级高,那么就是新主库。从库复制进度最接近。 主库的slave_repl_offset和从库master_repl_offset越接近,得分越高。ID小的从库得分高。 如果上面两轮也没有选出新主库,就会根据从库实例的ID来判断,ID越小的从库得分越高。
由此哨兵可以选择出一个新的主库。
由哪个哨兵来执行主从库切换呢?
这个过程和判断主库“客观下线”类似,也是一个投票的过程。如果某个哨兵判断了主库为下线状态,就会给其他的哨兵实例发送is-master-down-by-addr的命令,其他实例会根据自己和主库的连接状态作出Y或N的响应,Y相当于赞成票,N为反对票。一个哨兵获得一定的票数后,就可以标记主库为“客观下线”,这个票数是由参数quorum设置的。如下图:
例如:现在有3个哨兵,quorum配置的是2,那么,一个哨兵需要2张赞成票,就可以标记主库为“客观下线”了。这2张赞成票包括哨兵自己的一张赞成票和另外两个哨兵的赞成票。
这个时候哨兵就可以给其他哨兵发送消息,表示希望自己来执行主从切换,并让所有的哨兵进行投票,这个过程称为“Leader选举”,进行主从切换的哨兵称为Leader。任何一个想成为Leader的哨兵都需要满足两个条件:
拿到半数以上的哨兵赞成票。拿到的票数需要大于等于quorum的值。
以上就可以选出Leader然后进行主从库切换了。
Redis集群
(一 )数据量过多如何处理?
当数据量过多的情况下,一种简单的方式是升级Redis实例的资源配置,包括增加内存容量、磁盘容量、更好配置的CPU等,但这种情况下Redis使用RDB进行持久化的时候响应会变慢,Redis通过fork子进程来完成数据持久化,但fork在执行时会阻塞主线程,数据量越大,fork的阻塞时间就越长,从而导致Redis响应变慢。
Redis的切片集群 可以解决这个问题,也就是启动多个Redis实例来组成一个集群,再按照一定的规则把数据划分为多份,每一份用一个实例来保存,这样客户端只需要访问对应的实例就可以获取数据。在这种情况下fork子进程一般不会给主线程带来较长时间的阻塞,如下图:
切片集群架构图
将20GB的数据分为4分,每份包含5GB数据,客户端只需要找到对应的实例就可以获取数据,从而减少主线程阻塞的时间。
当数据量过多的时候,可以通过升级Redis实例的资源配置或者通过切片集群的方式。前者实现起来简单粗暴,但这数据量增加的时候,需要的内存也在不断增加,主线程fork子进程就有可能会阻塞,而且该方案受到硬件和成本的限制。相比之下第二种方案是一种扩展性更好的方案,如果想保存更多的数据,仅需要增加Redis实例的个数,不用担心单个实例的硬件和成本限制。 在面向百万、千万级别的用户规模时,横向扩展的 Redis 切片集群会是一个非常好的选择 。
选择切片集群也是需要解决一些问题的:
数据切片后,在多个实例之间怎么分布?客户端怎么确定想要访问的实例是哪一个?
Redis采用了Redis Cluster的方案来实现切片集群,具体的Redis Cluster采用了哈希槽(Hash Slot)来处理数据和实例之间的映射关系。在Redis Cluster中,一个切片集群共有16384个哈希槽( 为什么Hash Slot的个数是16384 ),这些哈希槽类似于数据的分区,每个键值对都会根据自己的key被影射到一个哈希槽中,映射步骤如下:
根据键值对key,按照CRC16算法计算一个16bit的值。用计算的值对16384取模,得到0~16383范围内的模数,每个模数对应一个哈希槽。
这时候可以得到一个key对应的哈希槽了,哈希槽又是如何找到对应的实例的呢?
在部署Redis Cluster的时候,可以通过cluster create命令创建集群,此时Redis会自动把这些槽分布在集群实例上,例如一共有N个实例,那么每个实例包含的槽个数就为16384/N。当然可能存在Redis实例中内存大小配置不一的问题,内存大的实例具有更大的容量。这种情况下可以通过cluster addslots命令手动分配哈希槽。
redis-cli -h 33.33.33.3 –p 6379 cluster addslots 0,1redis-cli -h 33.33.33.4 –p 6379 cluster addslots 2,3redis-cli -h 33.33.33.5 –p 6379 cluster addslots 4
要注意的是,如果采用cluster addslots的方式手动分配哈希槽,需要将16384个槽全部分配完,否则Redis集群无法正常工作。现在通过哈希槽,切片集群就实现了数据到哈希槽、哈希槽到实例的对应关系,那么客户端如何确定需要访问的实例是哪一个呢?
(二)客户端定位集群中的数据
客户端请求的key可以通过CRC16算法计算得到,但客户端还需要知道哈希槽分布在哪个实例上。在最开始客户端和集群实例建立连接后,实例就会把哈希槽的分配信息发给客户端,实例之间会把自己的哈希槽信息发给和它相连的实例,完成哈希槽的扩散。这样客户端访问任何一个实例的时候,都能获取所有的哈希槽信息。当客户端收到哈希槽的信息后会把哈希槽对应的信息缓存在本地,当客户端发送请求的时候,会先找到key对应的哈希槽,然后就可以给对应的实例发送请求了。
但是,哈希槽和实例的对应关系不是一成不变的,可能会存在新增或者删除的情况,这时候就需要重新分配哈希槽;也可能为了负载均衡,Redis需要把所有的实例重新分布。
虽然实例之间可以互相传递消息以获取最新的哈希槽分配信息,但是客户端无法感知这个变化,就会导致客户端访问的实例可能不是自己所需要的了。
Redis Cluster提供了重定向的机制,当客户端给实例发送数据读写操作的时候,如果这个实例上没有找到对应的数据,此时这个实例就会给客户端返回MOVED命令的相应结果,这个结果中包含了新实例的访问地址,此时客户端需要再给新实例发送操作命令以进行读写操作,MOVED命令如下:
GET hello:key(error) MOVED 33.33.33.33:6379
返回的信息代表客户端请求的key所在的哈希槽为3333,实际是在33.33.33.33这个实例上,此时客户端只需要向33.33.33.33这个实例发送请求就可以了。
此时也存在一个小问题,哈希槽中对应的数据过多,导致还没有迁移到其他实例,此时客户端就发起了请求,在这种情况下,客户端就对实例发起了请求,如果数据还在对应的实例中,会给客户端返回数据;如果请求的数据已经被转移到其他实例上,客户端就会收到实例返回的ASK命令,该命令表示:哈希槽中数据还在前一种、ASK命令把客户端需要访问的新实例返回了。此时客户端需要给新实例发送ASKING命令以进行请求操作。
值得注意的是ASK信息和MOVED信息不一样, ASK信息并不会更新客户端本地的缓存的哈希槽分配信息 ,也就是说如果客户端再次访问该哈希槽还是会请求之前的实例,直到数据迁移完成。
举报/反馈
“流感在北京的季节性是比较明确的。”日前,在“新冠背景下的流感防控圆桌云访谈”上,北京预防医学会的邓瑛表示,新冠肺炎疫情还没有结束,随着流感高发季节的来临,应开始部署加强型的应对策略。
对秋冬流感季发出警告的还有美国疾病控制与预防中心主任罗伯特·雷德菲尔德,他早些时候表示,入秋后,随着流感季节到来,新冠肺炎疫情可能有所反弹。
新冠肺炎疫情的全球大流行使得人们对新冠病毒的关注前所未有。新冠肺炎疫情的“群狼”还没有击退,季节性流感的“猛虎”又要来了,在这样的时刻,有什么好的办法形成对病毒的免疫屏障?
流感、新冠症状难区分
“每年秋冬季是流感季节,它会特别高发,流感的主要发病症状和新冠是非常难以区分的。”复旦大学附属华山医院感染科主任张文宏教授表示,它们都有呼吸道的一些症状,都有发烧、全身有点疼痛,发高烧之前还有点怕冷发抖。事实上,1%—10%的流感患者有可能会发生流感相关的肺炎,也会出现呼吸困难。
症状的难区分,给具体的预防工作增加了难度,使得“严打”和“忽视”可能并存。“今年的秋冬季,各个医院对新冠疫情的监测非常严格,中国的民众对新冠也非常重视,因此,(可以预料到)很多人一旦发烧会非常恐惧,怀疑自己是不是得了新冠肺炎。”张文宏说,另一方面,一些典型的流感轻症时和普通感冒很难区分,往往会被忽视。
张文宏认为,今年的情况会使得发现流感有可能成为比较大的问题,也使得流感疫情的防控形势更加严峻。
流感疫苗仍是最有效手段
打疫苗和不打疫苗,哪个对人体更有利?
对此,中国疾病预防控制中心主任高福院士表示,过往大量的统计学数据表明,打了疫苗对于人类的益处高于不打疫苗。
以北京为例,北京市政府每年拿出三四千万元经费,为60岁以上老人和在校中小学生免费接种流感疫苗。邓瑛介绍,老年人属于高危人群,感染以后会引发基础性疾病,造成病死率提升,孩子在校读书的环境是容易引发流感流行的固定场所,基于这两点考虑,北京市对他们实行免费接种政策。
“我们还有一个症状监测系统,北京中小学生因发热造成的缺勤率我们也会有统计,免疫接种大大减少了他们的缺勤率。”邓瑛说,虽然相比2000万人口来说接种面不大,但它针对高危的环境和人群,整体减少这组人群60%的发病率,同时节省了相当的医疗费用,也减少了医疗的压力,还产生了一些间接效果,比如让中小学生不至于因为流感缺勤造成更大的学业压力。
上海市也制定了相关政策。由于肺炎球菌是流感感染后继发感染的一个非常重要的病源,上海市近年来开展了老年人肺炎球菌疫苗的免费接种,探索流感疫苗和肺炎球菌疫苗的联合接种。
流感防控策略应加强
“国家流感疫苗接种率不高,每年在2%左右。”国药中生集团董事长杨晓明说,我国很早就研制出流感疫苗,约有十几个厂家生产流感疫苗,也研制出了三价流感疫苗(一次预防3种流感株),但接种情况并不乐观,很多生产出来的疫苗到过期时也未被接种。
经过新冠肺炎疫情,人们对于防控策略有了更多的了解,防控理念应有所更新。
“应该意识到,接种疫苗、有效防控不再是一个人自己的事情,而是一个利己、利他、利国家的事情。”邓瑛说,利己很容易理解,自己不得病,利他是我不得病就传染不到你;利国家就是把免疫人群建立起来了,重大疾病就不会在一个区域里产生、暴发和流行,这样对国家的公共卫生安全、全民健康是非常有益的。
与会专家认为,“带病坚持工作”“医务人员因工作忙不打疫苗”等现象不应再鼓励,而是应谴责的行为。
“为了减少非战斗减员、减少院内传播,希望越来越多的地方能够把高危人群、特定人群、医务人员、参与社区防控的一线的工作人员,都纳入流感疫苗的免费接种人群里面。”中国医学科学院、北京协和医学院群医学及公共卫生学院执行副院长冯录召说。
(原标题:新冠、流感症状难分 今年怎么防)
举报/反馈