欧博在线官网

亚星体育打不开解决方法_这个使用场景,Etcd 比 Redis 强
你的位置:欧博在线官网 > 欧博体育 >
亚星体育打不开解决方法_这个使用场景,Etcd 比 Redis 强
发布日期:2023-10-30 04:29    点击次数:186

亚星体育打不开解决方法_这个使用场景,Etcd 比 Redis 强

亚星体育打不开解决方法_

[[437980]]iba捕鱼

咱们说,要评判一个东西的是非,一定要阐述具体在什么业务场景。脱离业务道是非是没挑升旨的。

Redis 相配雄伟,我出书过一册书专门先容 Redis 的多样用法。但这并不是说 Redis 在多样方面齐莫得敌手。至少在折柳式系统的建树更新这个场景上头,我以为 etcd 作念得更好。

要诠释这个问题,咱们来看一个具体的业务场景:

皇冠官网

在 Redis 中有一个列表 sentence,内部会一语气不停地写入字符串。当今我有一个过滤法子:trash_filter.py,它一条一条从 Redis 读取数据,判断字符串中是否有特定的要害词,要是有,那么平直丢弃。要是莫得,那么把数据存入 MongoDB。

这个场景相配简便,于是你很快就写出了一个 Python 法子:

import iba捕鱼redis   class TrashFilter:     def __init__(self):         self.client = redis.Redis()         self.trash_words = ['垃圾']      def read_data(self):         while True:             data = self.client.lpop('sentence')             if not data:                 return              yield data.decode()      def do_filter(self):         for sentence in self.read_data():             for word in self.trash_words:                 if word in sentence:                     break             else:                 self.save_sentence(sentence)      def save_sentence(self, sentence):         print('进行后续保存 sentence 的操作:', sentence)   if __name__ == '__main__':     trash_filter = TrashFilter()     trash_filter.do_filter() 

在上头的代码中,需要过滤的词是以列表的方法平直写到代码内部的。那么问题来了,要是这些过滤词是动态更正的奈何办?每次为了修改这些词,你齐需要重启一下这个法子吗?

可能有同学提到,不错把这些词存放到数据库内部,每次从数据库内部读取就不错了。Redis 本人即是一个 Key-Value 数据库,不错平直使用 Redis 的字符串来存放:

def do_filter(self):     for sentence in self.read_data():         for word in self.client.get('trash_words').decode().split(','):             if word in sentence:                 break         else:             self.save_sentence(sentence) 

把统共的过滤词以英文逗号分割构成长字符串,储存到Redis 中名为trash_words的字符串里。每读取到一个句子,齐从 Redis 内部再次读取这个过滤词列表,然后进行检讨。

这么作念,及时性如实得到了保险,每次只消trash_word字符串一发生修改,法子坐窝就能取得到最新的过滤词。

皇冠客服飞机:@seo3687

但这么作念有一个问题——每次读取trash_words是需要恳求辘集的,而辘集 IO 短长常费时期的。

那么咱们是不是不错每5分钟取得一次最新的trash_words呢?虽然也不错,我在著作:一日一技:兑现存落后时期的LRU缓存中先容过若何兑现一个带有落后时期的 LRU 缓存。

这么作念,速率如实普及了,然则及时性又裁减了。

要是读者对 Redis 相比熟识,虽然也不错使用 Lua 剧本大概 Redis 的Pipeline 兑当今一次恳求内部同期取得一条句子并拿到过滤词列表,大概使用 Monitor 号令监控 Key 的变化。但代码写起来会相比复杂。

皇冠手机登录入口

有莫得又快又简便还富厚的贬责决议呢?谜底是有,那即是使用 etcd.

根据了解,7月份该品牌的纯电动(BEVs,含换电)车型总销量约为2.815万台,同比增长了27%;今年累计销量为16.39万台,同比增长约为52%。截止到目前,吉利汽车1-7月汽车累计销售新车数量为83.2180万台,同比增长约为13%。其中,银河销量为1.9731万辆;极氪销量为5.4672万辆,同比增长约为127%。

最小离地间隙也由此来到190mm,高于XT版本的165mm。为了应对越野路况,铃木对V-STROM 1050 DE的车架进行了调整,双翼梁车架的厚度有所增加,后摇臂的扭转刚性也提升了10%。

hga050 com

etcd 的官网写着这么一句话:

A distributed, reliable key-value store for the most critical data of a distributed system.

最近,一项有关运动员的研究显示,欧博体育高强度训练会对运动员的身体健康造成一定的影响,引起了全球运动爱好者和体育科学家的关注和讨论。如何正确地进行运动训练和保护身体健康已经成为了全球运动爱好者和科学家们共同关注的话题。想要了解更多关于如何正确地进行运动训练和保护身体健康的热门话题和新闻,不妨加入皇冠体育博彩平台,与全球运动爱好者和科学家们一起分享和探讨。

用于折柳式系统最要害数据的折柳式、可靠的键值储存。

etcd 底本即是为了折柳式系统而生的,它专注于键值储存。初看起来,终点于仅仅 Redis 的字符串功能,但却比 Redis 的字符串更为雄伟。

皇冠体育

咱们不错监控 etcd 中的一个键,当它发生变化的时期,就调用咱们提前界说好的函数。

在 Ubuntu 中,不错使用 apt-get 安设 etcd,在 macOS 中,不错使用 homebrew 安设 etcd。虽然 etcd 也有仍是编译好的可实行文献,不错从Releases · etcd-io/etcd · GitHub[1]下载下来平直运行就能启动一个单节点的 etcd 劳动。

启动劳动以后,咱们再来安设一个Python 库,用来操作 etcd:

pip install etcd3 

Python 读写 etcd 相配简便:

import etcd3  client = etcd3.client() client.put('key', value) # 添加数据 value, kv_meta = client.get('key') # 读取数据,复返的数据value 是 bytes 型数据 

而咱们要用的,是 etcd 的watch功能。咱们先写一段简便的代码来阐述 watch的功能:

import etcd3 import time   def callback(response):     for event in response.events:         print(f'Key: {event.key}发生更正!新的值是:{event.value}')   client = etcd3.client() client.add_watch_callback('test', callback)  for i in range(100):     print(i)     time.sleep(1) 

宽泛情况下,这个法子会打印从0到99,每秒打印一个数字。然则当咱们半途修改了 etcd 中,名为test这个 key 的值以后,咱们发现回调函数被运行了,如下图所示:

打不开解决方法

不错看到,etcd 监控一个 key 是否变化,它不像 Redis 的blpop这么崎岖式地监控,而是在后台监控,当key 的值发生了更正时,触发一个事件,调用回调函数。是以统共这个词监控的经过不会干豫咱们我方法子的宽泛运行。

在一般情况下,传入回调函数的response 对象,它的.events属性是唯唯一个元素的列表。但要是这个 key 在极短时期内变化了许屡次,那么这个列表内部可能有多个值。

百家乐

回到最运行需要贬责的问题,咱们引入 etcd 以后,贫困轻苟且松就被贬责了:

通过增多方框框住的update_trash_words方法,并把它动作监控trash_words这个Key 变化事件的回调函数,一朝这个 Key 发生了变化,就会调用回调函数,从而更新self.trash_words这个属性。

运行后果如下图所示:

亚星体育

不错看到,在红线上头,我是有脏数据的句子是不被过滤的,此时脏字也不是过滤词。然则当咱们在号令行内部更新了 etcd,把新的过滤词改成垃圾,脏以后,就到了红线底下,我是有脏数据的句子就会被过滤了。

这么就作念到了同期兼顾时效性和速率,幸免了无效的辘集恳求。

皇冠体育

参考文献

[1] Releases · etcd-io/etcd · GitHub: https://github.com/etcd-io/etcd/releases

本文转载自微信公众号「未闻Code」,不错通过以下二维码边幅。转载本文请联系未闻Code公众号。

香港皇冠网