使用redis作为flask/heroku的会话存储需要双重响应

wz3gfoph  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(222)

我在heroku上有一个使用flask/redis/postgres的应用程序,它记录用户输入和计数的结果。
为了克服heroku共享资源的不足,我使用一个惟一的用户名和计数器将重要的变量推送到redis,并根据需要获取它们。

连接


# Redis Connection

HEROKU_REDIS = os.getenv('REDIS_URL')
redis = redis.from_url(HEROKU_REDIS)

# Set User for session

USER = secrets.token_urlsafe(4) # User to store in the session.
redis.set(str(USER), USER) # Set unique user token

# Set Counter for session

COUNTER = 0
counter_id = secrets.token_urlsafe(4) # Short username is fine
redis.set(str(counter_id), COUNTER) # Set unique counter token

然后调用各种函数并根据需要获取值。

设置迭代的值。

if COUNTER == 0:
    generate_image() # generates the first image in the background to match reponse to image.
    COUNTER += 1
    redis.set(str(counter_id), COUNTER) # Set Redis Token
else:
    process_answer(recorded_result) # Answer Function
    write_data()
    generate_image()
    COUNTER += 1
    redis.set(str(counter_id), COUNTER) # Set Redis Token

存储值并推送到数据库。

它存储在全局字典中,在创建新数据时会重新生成该字典:

def process_answer(recorded_result):
    global user_data
    user_data = {
        'user': str(redis.get(str(USER))),
        'counter' : int(redis.get(str(counter_id))),
        'correct': 0,
        'near_miss' : 0,
        'recorded_result' : "recorded_result",
    }

... 推到了一个分贝。

发生了什么:

除了重复两次之外,这一切都非常有效。如果手表计数器i是1 2 2 3 2。我一辈子都不明白为什么会这样。
现场版本:colordata.org
git文件在这里(这是csv输出,而不是live)。
任何关于为什么会发生这种情况的线索都将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题