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を使用してこのプロセスを実行します.
ここでは、keyがタイムアウトした場合、Redisはkeyのストレージスペースを回収しますか?
答えはできない.RedisのKeyタイムアウトは自動的に回収されず、どのキー値ペアがタイムアウトしたかのみが識別されます.このような利点は、リストやhash構造のような大きなキー値がタイムアウトし、百万個の要素が保存されている場合、回収に時間がかかることです.タイムアウト回収を使用すると、停止が発生する可能性があります.デメリットも明らかで、これらのタイムアウトしたキー値ペアは比較的多くの空間を浪費します.
Redisは、タイミング回収と不活性回収の2つの方法でこれらのタイムアウトキー値ペアを回収する.タイミング回収:決定された時間にコードがトリガーされ、タイムアウトしたキー値ペアが回収される. 不活性回収:タイムアウトしたキーがgetコマンドを再使用してアクセスされると、Redisがメモリから空になるようにトリガーされます.
タイミング回収は、タイムアウトしたキーを完全に回収することができますが、欠点も明らかで、このキーの値が比較的多いと、時間がかかり、カートンを招きます.
不活性回収の場合、回収されたキー値ペアを指定できるのが利点です.get操作を実行してトリガするか、タイムアウトしたキー値ペアを判断するのが難しいという欠点があります.
いずれのリサイクルポリシーを使用しても、状況に応じて決定する必要があります.キー値ペアに数億千万のデータが格納されている場合、expireコマンドを使用してタイムアウトに到達させ、getコマンドアクセスで回収をトリガーすると、カートンの代価がかかることは明らかです.これは現実的に考慮する必要があります.
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操作を実行してトリガするか、タイムアウトしたキー値ペアを判断するのが難しいという欠点があります.
いずれのリサイクルポリシーを使用しても、状況に応じて決定する必要があります.キー値ペアに数億千万のデータが格納されている場合、expireコマンドを使用してタイムアウトに到達させ、getコマンドアクセスで回収をトリガーすると、カートンの代価がかかることは明らかです.これは現実的に考慮する必要があります.