Redis常用技術----タイムアウトコマンド

4092 ワード

JavaにはGCがあり、使用しなくなったJavaオブジェクトを自動的に回収できます.同様にRedisもメモリベースで実行されるデータセットであり,メモリゴミの回収や管理の問題もある.
Redisの場合、delコマンドはいくつかのキー値ペアを削除することができるので、RedisはJVMよりも柔軟です.同時に、メモリの実行スペースがいっぱいになった後、回収メカニズムに従ってキー値ペアを自動的に回収します.これはJVMと似ています.しかし、ごみ回収を行うと、システムの停止を引き起こす可能性があるため、適切な回収メカニズムと回収時間を選択することは、システム性能の向上に有利である.
まず、キー値ペアのタイムアウトコマンドを見てみましょう.ほとんどの場合、タイムアウトしたキー値ペアを回収したいからです.
コマンド#コマンド#
説明
コメント
persist key
持続key、タイムアウト時間のキャンセル
keyを削除するタイムアウト時間
ttl key
keyのタイムアウトの表示
秒で計算すると、-1はタイムアウト時間がないことを表し、keyが存在しない場合、またはkeyがタイムアウトしている場合は-2である.
expire key seconds
タイムアウトタイムスタンプの設定
秒単位
expireat key timestamp
タイムアウトポイントの設定
uninxタイムスタンプで決定
pptl key milliseconds
keyのタイムアウトタイムスタンプの表示
ミリ秒で計算
pexpire key
キー値のタイムアウト時間の設定
ミリ秒単位
pexpireat key stamptimes
タイムアウトポイントの設定
ミリ秒単位uninxタイムスタンプ
次にspringを使用してこのプロセスを実行します.
/**
 *   Redis     
 * @author liu
 */
public class TestExpire {
    @SuppressWarnings({ "unchecked", "resource", "rawtypes", "unused" })
    @Test
    public void testExpire() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        RedisTemplate rt = applicationContext.getBean(RedisTemplate.class);
        rt.execute((RedisOperations ops)->{
                ops.boundValueOps("key1").set("value1");
                String keyValue = (String)ops.boundValueOps("key1").get();
                long expSecond = ops.getExpire("key1");
                System.out.println(expSecond);
                boolean b = false;
                b = ops.expire("key1", 120L, TimeUnit.SECONDS);
                b = ops.persist("key1");
                long l = 0L;
                l = ops.getExpire("key1");
                long now = System.currentTimeMillis();
                Date date = new Date();
                date.setTime(now + 120000);
                ops.expireAt("key1", date);
                return null;
            }
        );
    }
}

ここでは、keyがタイムアウトした場合、Redisはkeyのストレージスペースを回収しますか?
答えはできない.RedisのKeyタイムアウトは自動的に回収されず、どのキー値ペアがタイムアウトしたかのみが識別されます.このような利点は、リストやhash構造のような大きなキー値がタイムアウトし、百万個の要素が保存されている場合、回収に時間がかかることです.タイムアウト回収を使用すると、停止が発生する可能性があります.デメリットも明らかで、これらのタイムアウトしたキー値ペアは比較的多くの空間を浪費します.
Redisは、タイミング回収と不活性回収の2つの方法でこれらのタイムアウトキー値ペアを回収する.
  • タイミング回収:決定された時間にコードがトリガーされ、タイムアウトしたキー値ペアが回収される.
  • 不活性回収:タイムアウトしたキーがgetコマンドを再使用してアクセスされると、Redisがメモリから空になるようにトリガーされます.

  • タイミング回収は、タイムアウトしたキーを完全に回収することができますが、欠点も明らかで、このキーの値が比較的多いと、時間がかかり、カートンを招きます.
    不活性回収の場合、回収されたキー値ペアを指定できるのが利点です.get操作を実行してトリガするか、タイムアウトしたキー値ペアを判断するのが難しいという欠点があります.
    いずれのリサイクルポリシーを使用しても、状況に応じて決定する必要があります.キー値ペアに数億千万のデータが格納されている場合、expireコマンドを使用してタイムアウトに到達させ、getコマンドアクセスで回収をトリガーすると、カートンの代価がかかることは明らかです.これは現実的に考慮する必要があります.