這篇文章主要講解了“redis blaster怎么安裝使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“redis blaster怎么安裝使用”吧!
創(chuàng)新互聯(lián)公司專(zhuān)注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、云和網(wǎng)絡(luò)推廣、小程序開(kāi)發(fā)、云和網(wǎng)絡(luò)營(yíng)銷(xiāo)、云和企業(yè)策劃、云和品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供云和建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.rwnh.cn
Rb,redis blaster,是一個(gè)為 redis 實(shí)現(xiàn)非復(fù)制分片(non-replicated sharding)的庫(kù)。它在 python redis 之上實(shí)現(xiàn)了一個(gè)自定義路由系統(tǒng),允許您自動(dòng)定位不同的服務(wù)器,而無(wú)需手動(dòng)將請(qǐng)求路由到各個(gè)節(jié)點(diǎn)。
它沒(méi)有實(shí)現(xiàn) redis 的所有功能,也沒(méi)有嘗試這樣做。您可以隨時(shí)將客戶端連接到特定主機(jī),但大多數(shù)情況下假設(shè)您的操作僅限于可以自動(dòng)路由到不同節(jié)點(diǎn)的基本 key/value 操作。
你可以做什么:
自動(dòng)針對(duì)主機(jī)進(jìn)行單 key 操作。
對(duì)所有或部分節(jié)點(diǎn)執(zhí)行命令。
并行執(zhí)行所有這些。
rb 在 PyPI 上可用,可以從那里安裝:
$ pip install rb
開(kāi)始使用 rb 非常簡(jiǎn)單。如果您之前一直在使用 py-redis,您會(huì)感到賓至如歸。主要區(qū)別在于,不是連接到單個(gè)主機(jī),而是將 cluster 配置為連接到多個(gè):
rom rb import Cluster cluster = Cluster(hosts={ 0: {'port': 6379}, 1: {'port': 6380}, 2: {'port': 6381}, 3: {'port': 6382}, 4: {'port': 6379}, 5: {'port': 6380}, 6: {'port': 6381}, 7: {'port': 6382}, }, host_defaults={ 'host': '127.0.0.1', })
在這種情況下,我們?cè)谕恢鳈C(jī)上的四個(gè)不同服務(wù)器進(jìn)程上設(shè)置了 8 個(gè)節(jié)點(diǎn)。hosts 參數(shù)是要連接的主機(jī)的映射。字典的 key 是 host ID(整數(shù)),值是參數(shù)字典。host_defaults 是為所有主機(jī)填寫(xiě)的可選默認(rèn)值字典。如果您想共享一些重復(fù)的常見(jiàn)默認(rèn)值(在這種情況下,所有主機(jī)都連接到 localhost),這很有用。
在默認(rèn)配置中,PartitionRouter 用于路由。
現(xiàn)在集群已經(jīng)構(gòu)建好了,我們可以使用 Cluster.get_routing_client() 來(lái)獲取一個(gè) redis 客戶端,它會(huì)為每個(gè)命令自動(dòng)路由到正確的 redis 節(jié)點(diǎn):
client = cluster.get_routing_client() results = {} for key in keys_to_look_up: results[key] = client.get(key)
該客戶端的工作原理與標(biāo)準(zhǔn)的 pyredis StrictClient 非常相似,主要區(qū)別在于它只能執(zhí)行只涉及一個(gè) key 的命令。
然而,這個(gè)基本操作是串聯(lián)運(yùn)行的。使 rb 有用的是它可以自動(dòng)構(gòu)建 redis 管道并將查詢并行發(fā)送到許多主機(jī)。但是,這會(huì)稍微改變用法,因?yàn)楝F(xiàn)在該值無(wú)法立即使用:
results = {} with cluster.map() as client: for key in keys_to_look_up: results[key] = client.get(key)
雖然到目前為止看起來(lái)很相似,但不是將實(shí)際值存儲(chǔ)在 result 字典中,而是存儲(chǔ) Promise 對(duì)象。當(dāng) map context manager 結(jié)束時(shí),它們保證已經(jīng)被執(zhí)行,您可以訪問(wèn) Promise.value 屬性來(lái)獲取值:
for key, promise in results.iteritems(): print '%s: %s' % (key, promise.value)
如果要向所有參與的主機(jī)發(fā)送命令(例如刪除數(shù)據(jù)庫(kù)),可以使用 Cluster.all() 方法:
with cluster.all() as client: client.flushdb()
如果你這樣做,promise 值是一個(gè)字典,其中 host ID 作為 key,結(jié)果作為 value。舉個(gè)例子:
with cluster.all() as client: results = client.info() for host_id, info in results.iteritems(): print 'host %s is running %s' % (host_id, info['os'])
要明確針對(duì)某些主機(jī),您可以使用 Cluster.fanout() 接受要將命令發(fā)送到 host ID 列表。
這是公共 API 的完整參考。請(qǐng)注意,此庫(kù)擴(kuò)展了 Python redis 庫(kù),因此其中一些類(lèi)具有更多功能,您需要查閱 py-redis 庫(kù)。
cluster 是 rb 背后的核心對(duì)象。它保存到各個(gè)節(jié)點(diǎn)的連接池,并且可以在應(yīng)用程序運(yùn)行期間在中央位置共享。
具有默認(rèn) router 的四個(gè) redis 實(shí)例上的集群的基本示例:
cluster = Cluster(hosts={ 0: {'port': 6379}, 1: {'port': 6380}, 2: {'port': 6381}, 3: {'port': 6382}, }, host_defaults={ 'host': '127.0.0.1', })
hosts 是一個(gè)主機(jī)字典,它將 host ID 數(shù)量映射到配置參數(shù)。參數(shù)對(duì)應(yīng)于 add_host() 函數(shù)的簽名。這些參數(shù)的默認(rèn)值是從 host_defaults 中提取的。要覆蓋 pool 類(lèi),可以使用 pool_cls 和 pool_options 參數(shù)。這同樣適用于 router 的 router_cls 和 router_options。pool 選項(xiàng)對(duì)于設(shè)置 socket 超時(shí)和類(lèi)似參數(shù)很有用。
add_host(host_id=None, host='localhost', port=6379, unix_socket_path=None, db=0, password=None, ssl=False, ssl_options=None)
將新主機(jī)添加到集群。這僅對(duì)單元測(cè)試真正有用,因?yàn)橥ǔV鳈C(jī)是通過(guò)構(gòu)造函數(shù)添加的,并且在第一次使用集群后進(jìn)行更改不太可能有意義。
all(timeout=None, max_concurrency=64, auto_batch=True)
扇出到所有主機(jī)。其他方面與 fanout() 完全一樣。
例子:
with cluster.all() as client: client.flushdb()
disconnect_pools()
斷開(kāi)與內(nèi)部池的所有連接。
execute_commands(mapping, *args, **kwargs)
同時(shí)在 Redis 集群上執(zhí)行與路由 key 關(guān)聯(lián)的一系列命令,返回一個(gè)新映射,其中值是與同一位置的命令對(duì)應(yīng)的結(jié)果列表。例如:
>>> cluster.execute_commands({ ... 'foo': [ ... ('PING',), ... ('TIME',), ... ], ... 'bar': [ ... ('CLIENT', 'GETNAME'), ... ], ... }) {'bar': [], 'foo': [,]}
作為 redis.client.Script 實(shí)例的命令將首先檢查它們?cè)谀繕?biāo)節(jié)點(diǎn)上的存在,然后在執(zhí)行之前加載到目標(biāo)上,并且可以與其他命令交錯(cuò):
>>> from redis.client import Script >>> TestScript = Script(None, 'return {KEYS, ARGV}') >>> cluster.execute_commands({ ... 'foo': [ ... (TestScript, ('key:1', 'key:2'), range(0, 3)), ... ], ... 'bar': [ ... (TestScript, ('key:3', 'key:4'), range(3, 6)), ... ], ... }) {'bar': [], 'foo': []}
在內(nèi)部,F(xiàn)anoutClient用于發(fā)出命令。
fanout(hosts=None, timeout=None, max_concurrency=64, auto_batch=True)
用于獲取路由客戶端、開(kāi)始扇出操作并 join 結(jié)果的快捷上下文管理器。
在上下文管理器中,可用的客戶端是 FanoutClient。示例用法:
with cluster.fanout(hosts='all') as client: client.flushdb() get_local_client(host_id)
get_local_client(host_id)
返回特定主機(jī) ID 的本地化 client。這個(gè) client 就像一個(gè)普通的 Python redis 客戶端一樣工作,并立即返回結(jié)果。
get_local_client_for_key(key)
類(lèi)似于 get_local_client_for_key() 但根據(jù) router 所說(shuō)的 key 目的地返回 client。
get_pool_for_host(host_id)
返回給定主機(jī)的連接池。
redis 客戶端使用此連接池來(lái)確保它不必不斷地重新連接。如果要使用自定義 redis 客戶端,可以手動(dòng)將其作為連接池傳入。
get_router()
返回 cluster 的 router 。如果 cluster 重新配置,router 將被重新創(chuàng)建。通常,您不需要自己與 router 交互,因?yàn)榧旱穆酚煽蛻舳藭?huì)自動(dòng)執(zhí)行此操作。
這將返回 BaseRouter 的一個(gè)實(shí)例。
get_routing_client(auto_batch=True)
返回一個(gè)路由客戶端。該客戶端能夠自動(dòng)將請(qǐng)求路由到各個(gè)主機(jī)。它是線程安全的,可以類(lèi)似于主機(jī)本地客戶端使用,但它會(huì)拒絕執(zhí)行無(wú)法直接路由到單個(gè)節(jié)點(diǎn)的命令。
路由客戶端的默認(rèn)行為是嘗試將符合條件的命令批處理成批處理版本。例如,路由到同一節(jié)點(diǎn)的多個(gè) GET 命令最終可以合并為一個(gè) MGET 命令??梢酝ㄟ^(guò)將 auto_batch 設(shè)置為 False 來(lái)禁用此行為。這對(duì)于調(diào)試很有用,因?yàn)?MONITOR 將更準(zhǔn)確地反映代碼中發(fā)出的命令。
有關(guān)詳細(xì)信息,請(qǐng)參閱 RoutingClient。
map(timeout=None, max_concurrency=64, auto_batch=True)
用于獲取路由客戶端、開(kāi)始映射操作并 join 結(jié)果的快捷上下文管理器。max_concurrency 定義在隱式連接發(fā)生之前可以存在多少未完成的并行查詢。
在上下文管理器中,可用的客戶端是 MappingClient。示例用法:
results = {} with cluster.map() as client: for key in keys_to_fetch: results[key] = client.get(key) for key, promise in results.iteritems(): print '%s => %s' % (key, promise.value)
remove_host(host_id)
從 client 中刪除 host。這僅對(duì)單元測(cè)試真正有用。
可以路由到單個(gè)目標(biāo)的客戶端。
有關(guān)參數(shù),請(qǐng)參見(jiàn) Cluster.get_routing_client()。
execute_command(*args, **options)
執(zhí)行命令并返回解析后的響應(yīng)
fanout(hosts=None, timeout=None, max_concurrency=64, auto_batch=None)
返回映射操作的 context manager,該操作扇出到手動(dòng)指定的主機(jī),而不是使用路由系統(tǒng)。例如,這可用于清空所有主機(jī)上的數(shù)據(jù)庫(kù)。context manager 返回一個(gè) FanoutClient。示例用法:
with cluster.fanout(hosts=[0, 1, 2, 3]) as client: results = client.info() for host_id, info in results.value.iteritems(): print '%s -> %s' % (host_id, info['is'])
返回的 promise 將所有結(jié)果累積到由 host_id 鍵入的字典中。
hosts 參數(shù)是一個(gè) host_id 列表,或者是字符串 'all' ,用于將命令發(fā)送到所有主機(jī)。
fanout API 需要非常小心地使用,因?yàn)楫?dāng) key 被寫(xiě)入不期望它們的主機(jī)時(shí),它可能會(huì)造成很多損壞。
get_fanout_client(hosts, max_concurrency=64, auto_batch=None)
返回線程不安全的扇出客戶端。
返回 FanoutClient 的實(shí)例。
get_mapping_client(max_concurrency=64, auto_batch=None)
返回一個(gè)線程不安全的映射客戶端。此客戶端的工作方式類(lèi)似于 redis 管道并返回最終結(jié)果對(duì)象。它需要 join 才能正常工作。您應(yīng)該使用自動(dòng) join 的 map() 上下文管理器,而不是直接使用它。
返回 MappingClient 的一個(gè)實(shí)例。
map(timeout=None, max_concurrency=64, auto_batch=None)
返回映射操作的 context manager。這會(huì)并行運(yùn)行多個(gè)查詢,然后最后 join 以收集所有結(jié)果。
在上下文管理器中,可用的客戶端是 MappingClient。示例用法:
results = {} with cluster.map() as client: for key in keys_to_fetch: results[key] = client.get(key) for key, promise in results.iteritems(): print '%s => %s' % (key, promise.value)
路由客戶端使用 cluster 的 router 根據(jù)執(zhí)行的 redis 命令的 key 自動(dòng)定位單個(gè)節(jié)點(diǎn)。
有關(guān)參數(shù),請(qǐng)參見(jiàn) Cluster.map()。
cancel()
取消所有未完成的請(qǐng)求。
execute_command(*args, **options)
執(zhí)行命令并返回解析后的響應(yīng)
join(timeout=None)
等待所有未完成的響應(yīng)返回或超時(shí)
mget(keys, *args)
返回與 key 順序相同的值列表
mset(*args, **kwargs)
根據(jù)映射設(shè)置 key/value。映射是 key/value 對(duì)的字典。key 和 value 都應(yīng)該是可以通過(guò) str() 轉(zhuǎn)換為 string 的字符串或類(lèi)型。
這與 MappingClient 的工作方式相似,但它不是使用 router 來(lái)定位主機(jī),而是將命令發(fā)送到所有手動(dòng)指定的主機(jī)。
結(jié)果累積在由 host_id 鍵入的字典中。
有關(guān)參數(shù),請(qǐng)參見(jiàn) Cluster.fanout()。
execute_command(*args, **options)
執(zhí)行命令并返回解析后的響應(yīng)
target(hosts)
為一次調(diào)用臨時(shí)重新定位 client。當(dāng)必須為一次調(diào)用處理主機(jī) subset 時(shí),這很有用。
target_key(key)
臨時(shí)重新定位客戶端以進(jìn)行一次調(diào)用,以專(zhuān)門(mén)路由到給定 key 路由到的一臺(tái)主機(jī)。在這種情況下,promise 的結(jié)果只是一個(gè)主機(jī)的值而不是字典。
1.3 版中的新功能。
一個(gè)嘗試為 Promise 對(duì)象鏡像 ES6 API 的 Promise 對(duì)象。與 ES6 的 Promise 不同,這個(gè) Promise 也直接提供對(duì)底層值的訪問(wèn),并且它有一些稍微不同的靜態(tài)方法名稱(chēng),因?yàn)檫@個(gè) Promise 可以在外部解析。
static all(iterable_or_dict)
當(dāng)所有傳遞的 promise 都解決時(shí),promise 就解決了。你可以傳遞一個(gè) promise 列表或一個(gè) promise 字典。
done(on_success=None, on_failure=None)
將一些回調(diào)附加到 Promise 并返回 Promise。
is_pending
如果 promise 仍然等待,則為 True,否則為 False。
is_rejected
如果 promise 被拒絕,則為 True,否則為 False。
is_resolved
如果 promise 已解決,則為 True,否則為 False。
reason
如果它被拒絕,這個(gè) promise 的原因。
reject(reason)
以給定的理由拒絕 promise。
static rejected(reason)
創(chuàng)建一個(gè)以特定值被拒絕的 promise 對(duì)象。
resolve(value)
用給定的值解決 promise。
static resolved(value)
創(chuàng)建一個(gè)以特定值解析的 promise 對(duì)象。
then(success=None, failure=None)
向 Promise 添加成功和/或失敗回調(diào)的實(shí)用方法,該方法還將在此過(guò)程中返回另一個(gè) Promise。
value
如果它被解決,這個(gè) promise 所持有的值。
所有路由的基類(lèi)。如果你想實(shí)現(xiàn)一個(gè)自定義路由,這就是你的子類(lèi)。
cluster
引用回此 router 所屬的 Cluster。
get_host_for_command(command, args)
返回應(yīng)執(zhí)行此命令的主機(jī)。
get_host_for_key(key)
執(zhí)行路由并返回目標(biāo)的 host_id。
子類(lèi)需要實(shí)現(xiàn)這一點(diǎn)。
get_key(command, args)
返回命令操作的 key。
基于一致哈希算法返回 host_id 的 router。一致的哈希算法僅在提供 key 參數(shù)時(shí)才有效。
該 router 要求主機(jī)是無(wú)間隙的,這意味著 N 臺(tái)主機(jī)的 ID 范圍從 0 到 N-1。
get_host_for_key(key)
執(zhí)行路由并返回目標(biāo)的 host_id。
子類(lèi)需要實(shí)現(xiàn)這一點(diǎn)。
一個(gè)簡(jiǎn)單的 router,僅根據(jù)簡(jiǎn)單的 crc32 % node_count 設(shè)置將命令單獨(dú)路由到單個(gè)節(jié)點(diǎn)。
該 router 要求主機(jī)是無(wú)間隙的,這意味著 N 臺(tái)主機(jī)的 ID 范圍從 0 到 N-1。
get_host_for_key(key)
執(zhí)行路由并返回目標(biāo)的 host_id。
子類(lèi)需要實(shí)現(xiàn)這一點(diǎn)。
如果發(fā)出的命令無(wú)法通過(guò) router 路由到單個(gè)主機(jī),則引發(fā)。
測(cè)試設(shè)置是生成多個(gè) redis 服務(wù)器進(jìn)行測(cè)試并自動(dòng)關(guān)閉它們的便捷方式。這可以用作 context manager 來(lái)自動(dòng)終止客戶端。
rb.testing.make_test_cluster(*args, **kwargs)
用于創(chuàng)建測(cè)試設(shè)置然后從中創(chuàng)建 cluster 的便捷快捷方式。這必須用作 context manager:
from rb.testing import make_test_cluster with make_test_cluster() as cluster: ...
感謝各位的閱讀,以上就是“redis blaster怎么安裝使用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)redis blaster怎么安裝使用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
新聞名稱(chēng):redisblaster怎么安裝使用
文章網(wǎng)址:http://www.rwnh.cn/article10/jdjgdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、虛擬主機(jī)、做網(wǎng)站、定制網(wǎng)站、動(dòng)態(tài)網(wǎng)站、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)