【发布时间】:2016-03-11 19:31:01
【问题描述】:
我们使用mysql作为消息队列,现在我们想从mysql改为redis。
我们在redis中实现与mysql相同的逻辑面临一些困难。 在Mysql中流程如下:
- 使用 load data infile 批量插入 mysql 数据库。
- 在其他 php 脚本中,我们根据条件按优先级顺序选择记录,然后从数据库中删除这些记录并处理这些记录
我们如何在 redis 中实现相同的功能?
- 在 redis 中,我们可以使用带有 lpush 之类键和 json_encoded 数据的管道插入批量数据
我们如何在某些条件下按优先级从redis key order中获取数据并从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)
【问题讨论】:
标签: redis