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

redis incrコマンドは特定の数に制限できますか?

    小さなLuaスクリプトを使用して、Redis自体の中でインクリメントを実行し、本質的にシングルスレッドになるようにすることができます:

    127.0.0.1:6379> set CappedInt 7
    OK
    127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
    (integer) 8
    127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
    (integer) 9
    127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
    (integer) 10
    127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
    (integer) 10
    

    スクリプトを入力する代わりに、LuaコードをIncWithCap.luaというファイルに入れることもできます。 このように:

    local cap=10
    if(redis.call(ARGV[1],KEYS[1])+0 < cap) then
       return redis.call('INCR',KEYS[1])
    end
    return cap
    

    次に、次のコマンドでRedisにロードできます:

    redis-cli SCRIPT LOAD "$(cat IncWithCap.lua)"
    

    サンプル出力

    "6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1"
    

    次に、次のコマンドで呼び出し/実行できます:

    127.0.0.1:6379> evalsha 6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1 1 CappedInt get
    



    1. MongoErrorを解決する方法:CosmosDBへの接続中にプールが破壊されました

    2. キー名でmongoDBから値を取得するにはどうすればよいですか?

    3. キースペース通知をpub/subチャネルではなくredisストリームにプッシュできますか

    4. mongodbコレクションから最新のレコードを取得する