Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
队列系统的Redis设计_Redis - Fatal编程技术网

队列系统的Redis设计

队列系统的Redis设计,redis,Redis,我目前正在构建一种队列系统,但是我有几个问题需要用Redis来设计这个系统 基本上我会有很多商店,在每个商店里,都会有很多用户 我想记录用户的个人资料,如手机号码、队列号码、电子邮件、timeofqueue 队列号必须按顺序排列。当中间用户离开队列时,用户队列号也会更新。(这意味着当队列号2的用户离开时,队列号3 4 5 6 7的其他用户变为2 3 4 5 6 我的店铺数据如下: shop1 : { user1: { handphone: 4520502124,

我目前正在构建一种队列系统,但是我有几个问题需要用Redis来设计这个系统

基本上我会有很多商店,在每个商店里,都会有很多用户

我想记录用户的个人资料,如手机号码、队列号码、电子邮件、timeofqueue

队列号必须按顺序排列。当中间用户离开队列时,用户队列号也会更新。(这意味着当队列号2的用户离开时,队列号3 4 5 6 7的其他用户变为2 3 4 5 6

我的店铺数据如下:

shop1 : {
    user1: {
        handphone: 4520502124,
        name: "david",
        time: "11.50AM"
    },
    user2: {
        handphone: 4501250125,
        name: "peter",
        time: "12.00PM"
    },
    user3: {
        handphone: 401201250,
        name: "john",
        time: "12.15PM"
    }
}

shop2 : {
    user1: {
        handphone: 12561256126,
        name: "andy",
        time: "12.00PM"
    }
    user2: {
        handphone: 512561261,
        name: "belle",
        time: "01.00PM"
    }



shop1queue: ["user1","user2","user3"];
shop2queue: ["user1","user2"];
我使用散列存储用户的配置文件,我可能可以通过HDEL删除它们。 我使用排序的集合来保存队列号,每当中间的用户离开时,我就可以使用ZRACE获取其他用户的队列号。 问题:

对于我的场景,使用排序集保存队列号是正确的方法吗?


如果我想获取shop1中的所有散列键,包括其中的值,我该如何在Redis中实现这一点?

将用户的详细信息存储在散列中是一个好主意。然后在排序集中,您可以使用用户的
id
作为成员,使用
时间戳
作为分数。这样,排名将自动计算即使您删除了一些成员。

感谢时间戳的提示,但是我也想获得shop1中所有哈希的值,具体来说,它是如何做到的?为此,您应该运行一些基准测试,以查看该过程是否足够快,满足您拥有的数据量。一种解决方案是首先获取ID,然后获取pipeli有许多
HMGET
命令。另一个想法是创建一个lua脚本,收集所有
HMGET
并返回一个包含该信息的多块。如果项目太多,性能会下降,您必须找到其他解决方案(例如,您必须一次查询范围而不是所有数据).很好,我去看了Lua脚本及其强大功能。这是我学习获得多批量回复的地方。.很抱歉,我无法更新您的答案,我还没有足够的代表:/不过谢谢您的提示!