当用户(消费者)死亡后,您的列表将继续增长,直到客户端返回。一旦达到特定的限制,你的制作人可以调整列表(从任一侧),但这是你需要在应用程序级别处理的事情。如果您在每封邮件中包含时间戳,则假设您在邮件使用年限内拥有要执行的应用程序逻辑,那么您的客户可以根据邮件的年龄进行操作。
我不确定一个格式错误的消息如何进入系统,因为与Redis的连接通常是TCP完整性保证。但是,如果发生这种情况,可能是由于生产者层的消息编码存在错误,您可以通过保持每个接收消费者异常消息的生产者队列来提供处理错误的一般机制。
重试策略将取决于您的应用程序需求。如果您需要100%确保已收到并处理消息,则应考虑使用Redis事务(MULTI/EXEC)来包装消费者完成的工作,以确保客户端不会除去消息,除非它已经完成了它的工作。如果您需要明确的确认,那么您可以在专用于生产者进程的队列上使用明确的ACK消息。
不知道更多关于您的应用程序需求,很难知道如何明智地选择。通常,如果您的消息需要完整的ACID保护,那么您可能还需要使用redis事务。如果您的消息只在及时发送时才有意义,则可能不需要交易。这听起来好像你不能容忍丢弃的消息,所以你使用列表的方法是好的。如果您需要为消息实现优先级队列,则可以使用排序集(Z命令)来存储消息,并将其优先级用作分数值以及轮询消费者。
......我想送位置更新给客户....而一旦断开,我不知道如何客户端和服务器之间的数据同步...你解决问题?如果是的话,怎么样? – 2016-05-14 08:15:18
您可以在http://redis.io/commands/rpoplpush检查一个可靠的队列Redis的模式 – hgf 2014-10-23 01:21:02