sql >> データベース >  >> NoSQL >> Redis

キーの存在に応じてredisでハッシュキーの有効期限を設定する方法

    パイプライン全体が実行されるまでキーが存在するかどうかわからないため、パイプラインではこれを実現できません。代わりに、Luaスクリプトを使用して作業を行うことができます:

    local key = KEYS[1]
    local field = ARGV[1]
    local value = ARGV[2]
    local ttl = ARGV[3]
    
    local exist = redis.call('exists', key)
    
    redis.call('hset', key, field, value)
    
    if exist == 0 then
        redis.call('expire', key, ttl)
    end
    

    これをチェックして、redis-pyでLuaスクリプトを実行する方法を確認してください。次に、パイプラインを使用してスクリプトを実行し、RTTを減らします。 。

    更新

    WATCHの使用を主張する場合 仕事をするために、あなたは次のコードを試すことができます:

    with r.pipeline() as pipe:
        while 1:
            try:
                pipe.watch(hkey)
    
                exist = pipe.exists(hkey)
    
                pipe.multi()
    
                if not exist:
                    pipe.hset(hkey, v, v)
                    pipe.expire(hkey, 3600)
                else:
                    pipe.hset(hkey, v, v)
    
                pipe.execute()
                break;
            except WatchError:
                continue
    



    1. nodejsスクリプト内のmongoデータベース内のすべてのコレクションを一覧表示する

    2. sslを介してセロリからredisに接続した後、応答がありません

    3. MongoDBドキュメントフィールドが存在しない場合にのみ更新するにはどうすればよいですか?

    4. Mongodb 3.6.0-rc3アレイフィルターが機能していませんか?