鍍金池/ 問答/人工智能  Python  數(shù)據(jù)庫  HTML/ python redis做緩存,數(shù)據(jù)入mysql時(shí)redis hset失敗

python redis做緩存,數(shù)據(jù)入mysql時(shí)redis hset失敗

問題描述

我在使用python3的redis做緩存是,結(jié)構(gòu)為hset,然當(dāng)數(shù)據(jù)達(dá)到10000條時(shí),我要對這10000條數(shù)據(jù)進(jìn)行入庫,此時(shí)我刪除了redis的hset,這個(gè)時(shí)候新請求上來的新增不到redis里面,只有在這10000條數(shù)據(jù)全都入庫完畢才會新增到redis里面.

問題出現(xiàn)的環(huán)境背景及自己嘗試過哪些方法

中間加臨時(shí)變量作為過渡(依然失效,或是我的方式不對)

相關(guān)代碼

rds.hset(chn_idx, uid, data) # 當(dāng)下面進(jìn)入if判斷之后,只有入mysql完成后才會有效的新增數(shù)據(jù).
ualen = int(rds.hlen(chn_idx))
if ualen > 10000:
    keyData = rds.hgetall(chn_idx)
    rds.delete(chn_idx)
    for uid, infos in keyData.items():
        ...   # 一系列入mysql操作.

你期待的結(jié)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

rds.delete(chn_idx) 后新的請求依然可以新增到redis中,這個(gè)hset僅起中間緩存的作用,并且保證數(shù)據(jù)不會丟失.造成現(xiàn)在這種情況的原因是什么?是hset中的數(shù)據(jù)太大導(dǎo)致delete需要時(shí)間?還是其他原因?

回答
編輯回答
念舊

找到問題了。是我代碼寫的有問題,沒有理解透徹tornado的異步。只要將延時(shí)操作做成異步的,就解決了這個(gè)問題。

2018年9月15日 17:56
編輯回答
陪我終

雖然并沒太看懂你想表達(dá)什么,但redis的pipeline可以了解下,可能能解決你的問題
https://github.com/andymccurd...

2017年10月18日 09:16