1

私はちょうどredisを学んでいて、redis dbへの接続、書き込み、読み取りをテストするための小さなスニペットを書きました。スクリプトは次のとおりです。

import random
import redis
from datetime import datetime

random.seed(1)
temps = "t"
humids = "h"

# create connection to redis server on default port 6379
POOL = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
redis = redis.StrictRedis(connection_pool=POOL)

x = 0
while x < 513:
    y = random.random()
    now = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')
    # next line to cut off timestamp at millisecond precision
    # now = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
    redis.hset(temps, str(now)+"_t", y)
    redis.hset(humids, str(now)+"_h", y)
    x += 1

# print(redis.hgetall(sensor_log))
print("****************************************")
print("all temps:\n")
print(redis.hvals(temps))
print("****************************************")
print("all humids:\n")
print(redis.hvals(humids))
print("****************************************")
print("done")

スニペットは (明らかに) 乱数を作成し、2 つの redis ハッシュに書き込みます。

奇妙な動作は次のとおりです。

ループを512回 (つまりwhile x < 512)実行すると、両方のハッシュの値が同じになります(そうあるべきです)。

しかし、ループを513回 (つまりwhile x < 513)実行すると、2 つのハッシュの値が突然異なります。2 つのハッシュの最初の値が同じであっても、その後のすべての値が互いに異なる場合があります。

誰でもこれを説明できますか?

これを実行している環境は次のとおりです。

  • ラズベリーパイ4
  • パイソン 3.7.3
  • Redis サーバー v=5.0.3 sha=00000000:0 malloc=jemalloc-5.1.0 ビット=32 ビルド=afa0decbb6de285f

512回実行した両方のハッシュの値のスクリーンショット

513回実行した両方のハッシュの値のスクリーンショット

513 回のループ実行での 2 つのハッシュの値の Pastebin

4

1 に答える 1

0

両方のハッシュの値同一です。512 を超えるエントリの後、redis.hvals がそれらを出力する順序が突然異なるため、出力の視覚的な不一致につながります。

デビッドはそれを正しく理解しました(質問の後の彼の最初のコメントを参照してください)。

于 2020-04-03T01:32:44.983 に答える