草庐IT

Redis:过期集元素 - 成员必须是唯一的

我有存储整数值并按时间过期的要求。我还必须能够轻松获取所有值。根据thispost,一个好的解决方案是使用排序集,其中分数是将发生过期的unix时间。所以使用keyscoremember格式:ZADDfoo[timestamp]25文档指出排序集成员是唯一的并且分数可能会重复,因此在我的用例中可能有多个重复成员。如何使成员独一无二?我可以再次将时间戳存储为成员的一部分,但这似乎效率低下,并且对于我的用例,可能存在重复的可能性。我可以将时间戳存储为毫秒作为成员的一部分,以减少重复的可能性。任何人都可以就最佳做法提出建议吗? 最佳答案

redis - 仅当元素不存在时才原子更新 redis 集

我对Redis几乎一无所知,除了它在内存中而且速度很快。但我有一个案例,我考虑使用它。我有一个系统,可能有大量用户(50万以上可能高达几百万),我想对所有用户的电子邮件地址进行独特的检查。我考虑使用redis来维护一组所有电子邮件地址来进行唯一性检查。所以我问自己,是否可以做类似的事情if(!set.contains(email))addemail作为一个原子操作,然后得到一个我可以处理的简单结果,就像失败或成功一样。此代码/命令应该可以从并发代码中调用。如果有其他工具可以更好地满足我的需求,我愿意接受建议。 最佳答案 使用SET数

slaveof 的 redis 配置集失败

我正在使用Redis版本2.4.15-1的主从Redis复制设置。我正在测试手动更新其中一个从站的设置,以便在原始主站出现故障后将其升级为主站。但是从客户那里,我不断得到以下信息:redisserver:6381>CONFIGSETSLAVEOF"NOONE"(错误)ERR不支持的CONFIG参数:SLAVEOF我是否需要重新启动redis-server才能执行此操作?我假设基于http://redis.io/topics/admin. 最佳答案 SLAVEOF本身是命令,而不是配置变量。您可以通过在您的从站上运行以下命令使您的服务

Redis:排序集的最大分数大小?分数 + 唯一 ID = 唯一分数?

我使用时间戳作为分数。我想通过在乐谱中附加一个唯一的对象ID来防止重复。目前这个id是6位数字(目前最高id是221849),但预计会增加到百万以上。所以,分数会是这样的1407971846221849(时间戳:1407971846id:221849),最终会到达14079718461000001(时间戳:1407971846id:1000001)。我担心的是无法存储分数,因为它们已达到允许的最大值。我读过docs,但我有点困惑。我知道,基础数学。但请耐心等待,我想把这件事做好。Redissortedsetsuseadouble64-bitfloatingpointnumbertore

php - 在 Redis 中,如果我需要具有 RPOPLPUSH 功能的排序集怎么办?

我制作了一个用于更新许多客户端的脚本。该脚本应该能够在多个实例中运行。首先,Redis会检索所有客户端的ID。然后,脚本的每个实例将RPOPLPUSH-ing所有客户端(更新一个客户端并放在列表的后面)。脚本应该能够检测新客户端是否已注册(查询数据库)并且需要将其ID放入列表/集合中。因此,我需要让集合具有唯一性,没有重复ID。排序集似乎是这里的解决方案,但它没有RPOPLPUSH功能。我有哪些选择? 最佳答案 使用SortedSets,但使用简单的Redis服务器端Lua脚本(EVAL)实现您自己的请求命令变体。SortedSet

python - Redis 在给定分数附近获取用户集

我正在使用Redis来实现排行榜。我要解决的问题陈述是-给定一个用户,让5个用户在排行榜上高于他,5个用户低于他。以下是我采用的方法,如果它是最佳的,或者可以做一些更好的事情,请告诉我:1.lower_key=zrank('set_name','member_name')//getthepositionoftheuserintheset2.higer_key=zcard('set_name')//thetotalno.ofelementsintheleaderboard3.low=max(0,lkey-5)//edge-caseifuserrankislessthan5.4.high=

Redis 排序集 : How to get values in numerical order rather than alphabetical order when two values has the same score?

最近,我正在使用redisSortedSet为每个用户实现游戏排名,但是我遇到了一个问题:zaddgame_rank556435zaddgame_rank556088561zaddgame_rank55608825zrangegame_rank0-1结果是:"60882561""608852""6435"我想知道是否有可能在分数相同的情况下按数字顺序获取值:"6435""608852""60882561" 最佳答案 当一个排序集的成员具有相同的分数时,它们将按字典顺序排序。没有直接的方法让它们以不同的方式排序AFAIK,但您可以轻松

search - 倒排索引集——查询键前缀

我正在使用Redis来为单词和包含这些单词的文档构建倒排索引系统。设置非常简单:RedisSets其中Set的键是:i:word和的值>设置是有这个词的文档id假设我有2组:i:example和i:resultquery-"exampleresult"将与i:example和i:result相交,并返回所有同时具有示例和结果作为成员但我正在寻找的是一种执行(以高效方式)查询的方法,例如:“exres”。结果集应至少包含查询“示例结果”中的所有ID我想到的解决方案:创建大小为2的前缀集:p:ex-包含{"example","expertise","ex"...。查找运行时间不会成为问题-

hash - 使用redis排序集存储键值对

我想将(key,value)对存储在Redis排序集中(连同用于排序的double值)。我当前的选择是为键设置排序集,然后使用另一个Redis哈希来存储键对。有没有更好/更规范的方法来解决这个问题? 最佳答案 这在很大程度上取决于有序集的计划使用。您可能使用的一种模式是复制数据。与在NoSQL世界中一样,规范化并不那么重要。您可以做的是将键与排序集中的值连接起来。因此,您可以存储key-value:score,而不是key:score。-字符可以是您选择的任何分隔符,以便您轻松解析。这为您节省了一次访问key:value集来获取值的

javascript - 使用 Redis 更新排序集

目前我正在尝试更新一个排序集成员。查看文档,使用ZADD似乎应该更新一个成员,如果它的分数已经存在。但是,在使用此代码尝试更新成员时,db.zadd("users",parseInt(key,10)+1,JSON.stringify(newData));....即使分数已经存在,也会添加一个新条目!如何使用Redis更新排序集成员? 最佳答案 只要条目之间的key和成员匹配,ZADD就会替换旧成员的分数:redislocalhost:6379>ZADDtest-key40blah(integer)1redislocalhost:63