我们使用mysql作为消息队列,现在我们想要从mysql更改为redis。
我们在redis中实现相同的mysql逻辑几乎没有什么困难。 在Mysql中的过程如下:
我们如何在redis中实现相同目标?
如何从某些条件中按优先级从redis键顺序获取数据并从redis中删除这些记录?
我们在mysql中有如下表结构:
CREATE TABLE `message_queue` (
`sql_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`msgdata` text,
`pid` tinyint(4) DEFAULT NULL,
`receiver` varchar(20) DEFAULT NULL,
`time` bigint(20) DEFAULT '0',
`udhdata` varchar(100) DEFAULT NULL,
PRIMARY KEY (`sql_id`),
KEY `pid` (`pid`),
KEY `time` (`time`)
) ENGINE=MyISAM
选择和删除查询
SELECT * FROM message_queue WHERE (time = 0 OR time <= UNIX_TIMESTAMP()) ORDER BY pid DESC, sql_id ASC limit 500;
DELETE FROM message_queue WHERE sql_id in(ids_list)
答案 0 :(得分:0)
为了满足您将数据分解为多个数据结构所需的大部分要求。
插入:
message_queue
表中的每条记录都应存储在哈希中 - sql_id
看起来像是一个好的密钥名称候选者。message_by_time
,其中每个成员都是sql_id
,得分为time
。查询:
ZRANGEBYSCORE message_by_time 0 0
和ZRANGEBYSCORE message_by_time -inf <replace-with-timestamp>
获取初始范围。删除:
DEL
和ZREM
。您的要求还指定了排序和限制的需要 - 这些也可以在Redis中完成,但我建议在代码中处理它们。