我有一个队列接口(interface)想在redis中实现。诀窍是每个worker都可以在N秒内领取一件元素,之后假定worker已经崩溃并且需要再次领取该元素。工作人员有责任在完成后移除元素。你会如何在redis中做到这一点?我正在使用phpredis,但这有点无关紧要。 最佳答案 要在redis中实现一个可用于重新提交崩溃作业的简单队列,我会尝试这样的事情:1个列表“up_for_grabs”1个列表“being_worked_on”自动过期锁试图抢工作的worker会做这样的事情:timeout=3600#wrapthisin
我在我的大数据应用程序中使用Redis作为缓存服务。Redis的主要目的是验证我们从每个请求中收到的key。我们使用RMap来存储键值对,示例如下,key=1212sads23sads341212saas23asds45value=Regularjavaobjectwithsomecomplexdata.我想为我插入的每个键分配TTL,我知道我可以使用RMap.expire()来做到这一点。我没有得到的是,当特定key过期时我该如何收听。由于每个key都将具有不同的TTL,并且如Redis文档中所述,它负责key的自动过期并生成事件。我的问题是,如何捕获生成的EXPIRE事件并获取它在
我在redis中给一个key设置了一个过期值,想获得在这个key被redis删除之前运行一段代码的机会。有可能吗,如果有的话怎么...?谢谢 最佳答案 我的解决方案是创建一个新key,与我想要Hook的key同名,只是我为它添加了一个前缀,表明它是用于超时使用的key(“TO”)——类似于:setkey1data1setTO_key1""expireTO_key120在上面的示例中,一旦“TO_key1”过期,它就会通知我的程序,我将有机会在手动删除“key1”之前运行我的代码。我发现此链接对于为Redis创建监听器非常有用:Red
我正在使用Redis上的新地理空间功能。我知道它在幕后使用ZSET。我正在以这种方式添加新条目:GEOADD""report-geo-set""4.78335244""32.07223969""jossef"我如何为特定记录添加过期时间(在我的例子中:“jossef”)在我的设备上?如果API不提供,是否有任何解决方法?谢谢,射线。 最佳答案 遗憾的是没有——Redis会过期整个键,而不是它们各自数据结构中的值。GeoHashes在顶级排序集上实现,不支持单个成员的过期。您可以做的是维护一个额外的SortedSet,并将其中的每个成
我正在尝试使用springdataredis设置一个key过期事件处理程序,但无法使其工作。我做了一些研究,但没有达到预期的结果。不知道我错过了什么。当redis缓存上的键过期时,我想记录一条消息。@Configuration@EnableRedisRepositoriespublicclassRedisConfig{@BeanStringRedisTemplatestringRedisTemplate(){StringRedisTemplatestringRedisTemplate=newStringRedisTemplate(jedisConnectionFactory());re
我的问题是:我有一组值,每个值都必须有过期值。代码:seta:11111:22222someValueexpirea:11111:22222604800\\usuallyequalaweek在一个完美的世界里,我会把所有这些值放在一个散列中,并给每个值适当的过期值,但Redis不允许在散列字段上过期。问题是我还有一个过程需要大约每小时获取一次所有这些keykeysa:*此命令非常昂贵,根据redis文档,可能会导致性能问题。我在每个给定时刻大约有25000-30000个key。有人知道我该如何解决这样的问题吗?竖起大拇指保证(-;罗伊 最佳答案
我使用ServiceStack.Redis(从最新来源构建:https://github.com/ServiceStack/ServiceStack.Redis/tree/master/src)。我做这样的事情:CacheRecordfoundKey=cacheRecords.GetById(p_sParentKey);...CacheRecordcacheRecord=cacheRecords.Store(foundKey);...redisClient.Expire(p_sParentKey,validityPeriodInMinutes*60);我尝试使用调试Console.Wr
我在我的一个应用程序中使用redis进行缓存,我每天需要存储大约500000个key并且需要为所有key设置EXPIRE。5天后,我将拥有大约250万个key,并且我已经为所有key设置了EXPIRE。是否可以为键设置EXPIRE并让Redis每分钟扫描一次以找出过期键(Accordingtothedocumentation)。这会对性能产生多大影响?有更好的选择吗?我试图在谷歌上搜索,但没有找到关于性能的信息。我主要关心的是性能和内存。附言。目前,由于我的redis服务器上的键太多,我的redis空间不足。 最佳答案 使用过期作为
在StackExchange.Redis,STRING操作允许设置到期时间,例如:TaskStringSetAsync(RedisKeykey,RedisValuevalue,TimeSpan?expiry=null,Whenwhen=When.Always,CommandFlagsflags=CommandFlags.None);为什么SET操作不?TaskSetAddAsync(RedisKeykey,RedisValue[]values,CommandFlagsflags=CommandFlags.None);基本上,这是我想要实现的目标:给定一个List,将项目添加到Redis
我正在使用SpringDataRepository保存新条目。每个条目的TTL为10秒。当我保存带有索引的条目时,这是我在Redis中得到的结果127.0.0.1:6379>keys*1)"job:campaignId:aa"2)"job:a6d6e491-5d75-4fd0-bd8e-71692f6d18be"3)"job:recipient:dd"4)"job:a6d6e491-5d75-4fd0-bd8e-71692f6d18be:phantom"5)"job:listId:cc"6)"job:accountId:bb"7)"job"8)"job:a6d6e491-5d75-4f