2016-04-27 11 views
1

私はredisでキャッシュメカニズムを実装したいと考えています。さらに詳しく調べるRedisの期限切れと増分

最初にclient.get()を使用して特定のキーをチェックし、値が存在しない場合はチェックします。私は、値を返し、キーの子として格納されているWebサービスを呼び出す必要があります。次に、client.set()を使用してこのキーを赤字に設定します。 24時間以上設定されている場合は、このキーが期限切れになる必要があります。どうすればいいですか?ここ

は、キー値が次に初期client.get()は、実行された値が存在する場合、この特定のキーhasnされた同様場合Redisの

parentValue:{ 
    child1:{ 
     serviceVal: "serviceVal", 
     counter: 0 
    }, 

    child2:{...}, 
    child3:{...} 
    .... 
} 

のように見えるであろう一例です期限切れです。オブジェクト内のカウンタをインクリメントし、この特定のキーを赤字で更新したいとします。これどうやってするの?

答えて

1

SET with NX and EXオプションは、最も簡単な解決策です。私がhereで作業しているモジュールの例を見てください。

EXは秒を受け取るので、86400秒を24時間にします。

しかし、インクリメントおよび期限切れのためにあなたは、おそらく最高の、何かのRedisのLUAスクリプトを使用していると思います。そして、あなただけのキー、有効期限、どのくらいの増分にしてスクリプトを呼び出す必要があり

--[[ 
    key 1 -> key name 
    arg 1 -> expires in seconds 
    arg 2 -> incr by value 
]] 

-- Key exists so increment it 
if redis.call('exists',KEYS[1]) > 0 then 
    redis.call('incrby',KEYS[1],tonumber(ARGV[2])) 
    return 0 
else 
    -- key doesn't exist so create with an expiry and the incr amount 
    redis.call('setex',KEYS[1],tonumber(ARGV[1]),tonumber(ARGV[2])) 
    return 1 
end 

を。

関連する問題