小编Mar*_*lio的帖子

Redis Pubsub和消息队列

我的整体问题是:使用Redis for PubSub,当发布者将消息推送到某个频道的速度超过订阅者能够阅读它们时,消息会发生什么变化?

例如,假设我有:

  • 一个简单的发布者以2 msg/sec的速率发布消息.
  • 一个简单的用户以1 msg/sec的速率读取消息.

我天真的假设是订阅者只会看到50%的消息发布到Redis上.为了测试这个理论,我写了两个脚本:

pub.py

queue = redis.StrictRedis(host='localhost', port=6379, db=0)
channel = queue.pubsub()

for i in range(10): 
    queue.publish("test", i)
    time.sleep(0.5)
Run Code Online (Sandbox Code Playgroud)

sub.py

r = redis.StrictRedis(host='localhost', port=6379, db=0)
p = r.pubsub()
p.subscribe('test')

while True:
    message = p.get_message()
    if message:
        print "Subscriber: %s" % message['data']
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

结果

  • 当我先跑sub.py,然后紧接着pub.py,我发现sub.py实际上显示了所有的消息(1-10),一个接一个地延迟了1秒.我最初的假设是错误的,Redis正在排队消息.需要更多测试.
  • 当我先跑pub.py,然后在跑步前等了5秒sub.py,我发现sub.py只显示了消息的后半部分(5-10).我本来会假设这个,但鉴于我之前的结果,我会认为消息排队,这导致我得出以下结论......

结论

  • Redis服务器似乎为每个客户端为每个通道排队消息.
  • 只要客户端正在监听,它读取消息的速度并不重要.只要它已连接,消息将为该通道的该客户端保持排队.

剩下的问题

  • 这些结论有效吗?
  • 如果是这样,客户端/频道消息将保持排队多长时间?
  • 如果是,是否有redis-cli info命令查看排队的消息数(对于每个客户端/通道)?

python redis redis-cli

50
推荐指数
1
解决办法
3万
查看次数

使用Redis-Cli了解延迟

我正在使用该redis-cli工具来观察redis-server延迟.这是一个例子:

ubuntu:~$ redis-cli --latency -h 127.0.0.1 -p 6379
min: 0, max: 15, avg: 0.12 (2839 samples)
Run Code Online (Sandbox Code Playgroud)

问题是,这些值究竟意味着什么?除了通过工具自己的帮助文档提供的内容之外,我很难找到相关文档.

redis redis-cli

11
推荐指数
1
解决办法
1万
查看次数

Python Pandas - 类似于ISIN,但是"包含"与"精确"匹配

我正在使用Python Pandas来处理两个数据帧.第一个数据框包含来自客户数据库(名字,姓氏,电子邮件等)的记录.第二个数据框包含域名列表,例如gmail.com,hotmail.com等.

当电子邮件地址包含第二个列表中的域名时,我试图从客户数据框中排除记录.换句话说,当他们的电子邮件地址域出现在域黑名单中时,我需要删除客户.

以下是示例数据帧:

>>> customer = pd.DataFrame({'Email': [
    "bob@example.com", 
    "jim@example.com", 
    "joe@gmail.com"], 'First Name': [
    "Bob", 
    "Jim", 
    "Joe"]})

>>> blacklist = pd.DataFrame({'Domain': ["gmail.com", "outlook.com"]})

>>> customer
         Email First Name
0  bob@example.com        Bob
1  jim@example.com        Jim
2    joe@gmail.com        Joe
>>> blacklist
  Domain
0  gmail.com
1  outlook.com
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

>>> filtered_list = magic_happens_here(customer, blacklist)
>>> filtered_list
    Email First Name
0 bob@example.com    Bob
1 jim@example.com    Jim
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的:

  1. 为了消除特定的电子邮件地址,过去我曾经使用过df1[df1['email'].isin(~df2['email'])......但是对于我在这里描述的用例显然没有帮助.
  2. 我尝试过使用 …

python dataframe pandas

5
推荐指数
1
解决办法
2338
查看次数

标签 统计

python ×2

redis ×2

redis-cli ×2

dataframe ×1

pandas ×1