返回信息流使用flask做了个查询系统。由于查询个结果需要大约3秒,如何避免客户端在这3秒内持续的刷新请求?本想着使用session来做判断的,可是发现session是线程安全的,只要没有返回结果,session中的内容都是一致的,因此无果。
这是一条镜像帖。来源:北邮人论坛 / python / #6277同步于 2015/4/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
在flask中如何避免持续的刷新请求
runner56
2015/4/14镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
session 的理解扩宽, 将其保存到 redis 服务中(就一个单进程)
客户端 cookie 保存 sessionid,
每次请求 server 端读取到 sessionid, 然后通过 sessionid 为 key,
从 redis get 出数据, 如果不是想要的状态, 此次请求就做其他处理.
而另一边查询3秒那块线程返回后将 session 状态更新到 redis 中.
有一个疑惑, 为啥查询要3秒.....
谢谢回答!因为进行的是全库搜索,所以时间有点长。我也试着把获取请求的时间存入session,用redis来保存session值,通过客户端返回的sessionid来获取。本想着获取到请求时,通过时间间隔来判断是否请求过于频繁,但是发现只要在查询期间,同一个客户端请求获取的session值是不变的,也就是第二次请求得到的session值并不会因为第一次修改了而变化。。
【 在 STKLOSE 的大作中提到: 】
: session 的理解扩宽, 将其保存到 redis 服务中(就一个单进程)
: 客户端 cookie 保存 sessionid,
: 每次请求 server 端读取到 sessionid, 然后通过 sessionid 为 key,
: ...................
sf说的思路很对,来到请求就看sessionid是否在redis中,如果在则不处理,如果不在则作为key加入redis,同时处理请求。设置退化时间3秒
我明白你的场景了,
也许符合你的场景:
1. 同样是 sessionid 为 key
session 关于用户的信息存储在原来你的结构中,
再增加一个 key 是针对该业务请求的, 仍然是 sessionid 为 key,
sessionid 只是 key 的后缀,
eg:
# 对应的 value 只是用来做用户有效验证的等等.
SESSION:$sessionid
# 针对库搜索的业务, 额外增加一个状态存储, 但和原session概念分开.
FULL_DB_SEARCH:$sessionid 时效性为预估搜索时间的 1.5倍到2倍.
第一次请求时, 设置该key, value 是 第一次请求的 timestamp
该请求查询过程中, 有其他请求时(同个sessionid), 查询该key的timestamp 做比较.
第一次请求查询结果返回后, delete 该 key.
【 在 runner56 的大作中提到: 】
: 谢谢回答!因为进行的是全库搜索,所以时间有点长。我也试着把获取请求的时间存入session,用redis来保存session值,通过客户端返回的sessionid来获取。本想着获取到请求时,通过时间间隔来判断是否请求过于频繁,但是发现只要在查询期间,同一个客户端请求获取的session值是不变的,也就是第二次请求得到的session值并不会因为第一次修改了而变化。。