草庐IT

redis - 当值的得分大于目标排序集中存在的最高得分时 zadd 的时间复杂度

如果添加到有序集合(redis)中的每个值都是得分最高的值,那么每个zadd的时间复杂度是否为O(log(N))>?或者,对于这种边缘情况,redis执行优化(例如,在score高于集合中最高score的情况下,只需添加值在最高点)?实际上,我问是因为我在我的应用程序中保留了一个全局排序集,其中的值是zadded,自纪元以来的时间作为分数。我想知道这是否仍然是O(log(N)),还是会更快? 最佳答案 一旦SortedSet的增长超过zset-max-ziplist-*配置指令设置的阈值,它就会被编码为skiplist.由于需要维护

database - 在集中设置中需要 redis 服务器

我查看了Logstash服务器上的文档,发现我们需要一个充当代理的redis服务器。这是链接:http://logstash.net/docs/1.1.12/tutorials/getting-started-centralized但我不清楚的是,为什么我们使用Redis作为代理?我们可以直接将日志从logstash本身发送到Elasticsearch,这样我们就不需要redis代理了。那我们为什么要找托运人和索引人?需要明确的解释。谢谢。 最佳答案 相信你可以在这里找到答案:https://groups.google.com/fo

javascript - 从redis集中获取随机元素而不重复

我正在使用REDIS和Socket.io在Node.js上制作游戏。我在这个游戏中有“房间”。房间里有1到9名玩家。他们可以随时加入和离开。房间里还有一个循环(setInterval),它从Redis中取出一个玩家并使这个玩家成为“领导者”。玩家按集存储在Redis中(rooms:ROOMID:online)。当用户加入房间时,我将他添加到这个集合中。当用户离开时,我将他从集合中移除。也许这是个愚蠢的问题,但是......在我手动停止循环之前,如何在每次迭代中获取下一个用户而不重复,考虑到集合可能会在循环的每次迭代中发生变化(可以变小或变大,用户可以加入和离开)。我想要的示例:集合(0

sorting - 将部分散列集副本存储在有序集中的删除安全方法

我已经阅读了Redis文档和所有内容,但无法理解这个用例。我有以下数据结构=>title=>content=>date=>score=>id并且只需要将title和date存储在一个排序集中,我在每次创建主要帖子时都会这样做。问题在于我也必须删除排序集上的内容,因为如果我这样做了zadd10[title,date]其中10是score,如果还有另一篇文章,我想删除它score10两者都会被删除,这不是我想要的功能,显然是这样。我考虑过将帖子id添加到分数之前,例如6+10=>610但它会搞砸设置订购并弄得一团糟。附加它更加麻烦,不可维护,更不用说非常低效了。最后一点,我使用排序集是因为

redis - 如何使用属性作为确定从 Redis 集中删除项目?

当我们使用servicestack类型的客户端从RedisSet中删除项目时redisset=typedclient.Sets["setkey"];redisset.remove(object1);它通常会检查object1的每个属性,我们如何定义object1的类来检查哪些属性是否相等?例如object1有那些属性session_key:"somekey"session_name:"aname"author:"Harry"...当我们尝试从集合中删除它时,我们只希望它检查session_key是否匹配并忽略其他属性。我以为我曾经在某个地方见过它,但我再也找不到了。

redis - 获取 Redis 排序集中最后插入的项的键和分数

现在我对解决方案做了一些更改。我现在想要得到的是给定键范围的键->分数对。例如:设置=[1:3,2:5,7:8,10:1]对于范围[2,8]我想得到:[2:5,7:8]如何从Redis排序集中获取最后插入的(或最后5个)项目。我尝试了zrange函数,但它在排序时考虑了分数。我能以某种方式让它们按插入时间排序吗?或者,通过key?我考虑过使用列表,但我还需要按键访问元素,这就是为什么我想使用排序集(更好的访问时间复杂度)。谢谢! 最佳答案 你可以让你的分数成为一个复合值:时间戳和原始分数的串联。插入项目时的前10位是时间戳。最后一位

Redis - 从排序集中一次获取 5 个元素

我有一个实时增长的排序集,它包含一些ID,我想按排名的相反顺序一次检索5个。这基本上是为了实现分页。这些ID是Hashmap的键。有什么方法可以高效地使用redisZSet操作一次获取5个元素?例如,在下面的SortedSet中,假设我想在“572c7d87e53156245a3fd167”之前获取5个元素,如果新ID可以在运行时的最后一个元素之后不断添加,我该怎么做?预期的结果应该给我ID的572c7c58e53156245a3fd166、572c7ad2e53156245a3fd165、572c746e1eeba6b059b08f1b、572c74531eeba6b059b08f1

redis - 了解 Redis 中排序集中缺失数字的最佳方法是什么?

如果我在Redis中有一个只包含整数值的SortedSet,比方说从1到200万,是否有一种高效的方法可以快速找出SortedSet中缺失的整数值?或者,除SortedSet之外的其他数据结构是否更适合此类查找? 最佳答案 你可以试试位运算:setbit.您可以将整数作为位位置/偏移量,而不是将整数存储到Redis中。一句话,用一个位图来存储一个整数的存在。当您尝试存储一个整数时,请使用setbit命令设置相应的位。当您想检查丢失的整数时,获取值并检查位值为0的位置。Storeintegers//store2setbitkey21/

database - 如何在已排序的 Redis 集中找到分数第一次出现的索引?

我正在编写一个搜索引擎,使用杜威十进制索书号对信息进行分类。方案如下:123.452是1的子类别。3是2的子类别。4个子类3.等这与图书馆用来对图书进行排序的编号系统相同。例如,200是宗教。210是哲学与宗教理论。211是上帝的概念。网站是一个连续的目录,从一个主题转到下一个主题。每个链接在Redis中都有一个分数(链接的DeweyDecimal调用编号)。该站点设置为每页50个链接。我有一个函数可以根据用户访问的页面计算从服务器提取的zrange。有没有一种方法可以指定一个分数并找到与该分数匹配的第一次出现的索引——这样我就不必在用户输入电话号码时遍历整个数据库来查找分数?

caching - Redis:可以使数组或排序集中的元素过期吗?

目前是否只能使整个键/值对过期?如果我想将值添加到列表类型结构并让它们在插入后1小时自动删除怎么办。这目前是否可行,或者是否需要运行cron作业来手动进行清除? 最佳答案 有一个通用模式可以很好地解决这个问题。使用排序集,并使用时间戳作为分数。然后按分数范围删除项目就变得微不足道了,这可以定期完成,或者只在每次写入时完成,读取总是忽略超出范围的元素,只读取一个分数范围。更多信息:https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs