首页   注册   登录
 soulomoon 最近的时间轴更新
看来得仿个知乎
250 天前

soulomoon

V2EX 第 214591 号会员,加入于 2017-02-11 13:47:20 +08:00
今日活跃度排名 2954
soulomoon 最近回复了
7 天前
回复了 yuldx 创建的主题 程序员 有没有一起刷题的小伙伴
可能是因为差别太小。。。 所以随机差别一下子就盖过了算法复杂度差别
15 天前
回复了 aczh 创建的主题 程序员 小米那款 199 的三刀头剃须刀怎么样?
@slrey 请问一下钢圈刀在哪里能买到 谢谢
29 天前
回复了 SingeeKing 创建的主题 全球工单系统 Mac 微信频繁卡死
high sierra 同是微信经常卡死
V2 不能缩进吗?
>>> if(true):
>>> pass
>>> else:
>>> pass
发现问题了, 是我写 unittest 的问题,interleaving 多个不同时限的 limiter 到相同的 key 中,当然会出现不同的结果 ozn
好开心解决了,原来不是我 implementaion 的问题是我的测试的问题,看来要好好学习测试, 最后谢谢 @holyghost 的回答。
发现即使是简单如
def add_key(self, key, expired):
return self.redis.incr(key)
也会有同样的问题

who's to blame....
*多个 instance 接受了同一个 script 的执行结果。。
incr 放进去是为了和 expire 一起,保证 key 不会因为没有 set expire 而 leak @holyghost,现在我怀疑 redis-py run script 的特点,因为是通过 register 到远端,然后再通过 sha1 作为 key 执行,可能是多个 instance 同时执行了同一 script,获取到了相同的返回值。。。
还有一个 sliding log 的 implementaion,pipeline 看 redis-py 的简介 0 0 理论上是一个 multi exce 的行为,0 0, 也是 fail。这样的:
def add_key(self, key, expired):
"""use ordered set for counting keys get_set manner
"""
now = time.time()
with self.redis.pipeline() as session:
session.zremrangebyscore(key, 0, now - expired)
session.zrange(key, 0, -1)
session.zadd(key, now, uuid.uuid4().hex)
session.expire(key, expired)
result = session.execute()
return len(result[1])
```python
lua_incr = """
local current
current = redis.call("incr",KEYS[1])
if tonumber(current) == 1 then
redis.call("expire",KEYS[1],KEYS[2])
end
return current-1
"""
```
这个是我改过的 lua script,原版的在[这里]( https://redis.io/commands/incr)
@holyghost
不好意思 我图放错了 0 0。
这里我有两种 implementaion, 一个用 ordered set, 一个用 incr 写在 luascript,redis 官方是这么推荐的 0。
都用 expire。
token bucket 要单开 put token 的进程吧?
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   565 人在线   最高记录 3541   ·  
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 15ms · UTC 22:20 · PVG 06:20 · LAX 15:20 · JFK 18:20
♥ Do have faith in what you're doing.
沪ICP备16043287号-1