提示:redis
提示:redis
1.Hash实现
代码如下(示例):
# 获取当前请求ip
IP = self.request.remote_ip
# 1.使用hash实现
key = IP + 'iplist'
# 获取存的数据
ip = r.hash_getall(key)
# 如果存在
if ip:
# 获取缓存中的时间
t = r.hash_getone(key, 'time')
# 查看是否过期
# 当前时间 - 缓存中的时间 大于60
if int(time.time()) - int(t.decode()) > 60:
# 删除缓存
r.del_key(key)
return self.finish({"code": 400})
else:
# 获取缓存中的获取验证码的次数
count = r.hash_getone(key, 'count')
if int(count) >= 3:
return self.finish({"code": 400, "msg": "同一个IP,一分钟内不得连续三次获取验证码"})
else:
# 对缓存中的次数加1
r.jiajian_hash(key, 'count', 1)
2.字符串(str)实现
代码如下(示例):
# 获取当前请求ip
IP = self.request.remote_ip
v = r.str_get(IP)
if v:
strlist = v.decode().split(':')
if int(strlist[0]) > 3:
return self.finish({
'code': 400,
'msg': "同一个IP,一分钟内不得连续三次获取验证码"
})
sum = int(strlist[0]) + 1
times = 60 - (int(time.time()) - int(strlist[1]))
v = str(sum) + ':' + str(int(strlist[1]))
r.str_setex(IP, v, times)
else:
r.str_setex(IP, str(1) + ':' + str(int(time.time())), 60)
# 如果没有,就将当前手机号加入redis
r.list_push("smsmobile", mobile)
self.write({"code": 200, "msg": "ok"})
该文介绍了使用Redis的Hash和String数据结构来实现IP地址在一定时间内对获取验证码操作的频率限制。通过Hash存储IP的获取次数和时间戳,当超过设定阈值时阻止进一步操作;而String方案则结合时间戳进行过期管理。这两种方法都用于防止滥用行为。
481

被折叠的 条评论
为什么被折叠?



