Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Pemberitahuan kedaluwarsa Redis Key dengan Jedis

Anda dapat melakukannya dengan pub-sub model sajaMulai Server Redis

Ubah notify-keyspace-events di redis.conf menjadi KEA (ini tergantung pada kebutuhan Anda). Detail diberikan dalam dokumentasi redis http://redis.io/topics/notifications.

Redis Java Client (Jedis), Coba yang berikut ini:

Pendengar Notifikasi:

public class KeyExpiredListener extends JedisPubSub {

@Override
    public void onPSubscribe(String pattern, int subscribedChannels) {
        System.out.println("onPSubscribe "
                + pattern + " " + subscribedChannels);
    }

@Override
    public void onPMessage(String pattern, String channel, String message) {

        System.out
                .println("onPMessage pattern "
                        + pattern + " " + channel + " " + message);
    }

//add other Unimplemented methods


}

Pelanggan:

****Catatan** jedis.berlangganan (KeyExpiredListener baru(), "__key*__:*"); -- Metode ini mendukung saluran berbasis pola regex sedangkan jedis.berlangganan (new KeyExpiredListener(), ""[email protected]__:notify"); --Metode ini menggunakan nama saluran lengkap/tepat

public class Subscriber {

    public static void main(String[] args) {
        JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");

        Jedis jedis = pool.getResource();
        jedis.psubscribe(new KeyExpiredListener(), "__key*__:*");

    }

}

Kelas Tes:

public class TestJedis {

    public static void main(String[] args) {
        JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");

        Jedis jedis = pool.getResource();
        jedis.set("notify", "umq");
        jedis.expire("notify", 10);

    }
}

Sekarang pertama-tama jalankan Subscriber Anda dan kemudian Jalankan TestJedis. Anda akan melihat output berikut:

onPSubscribe __key*__:* 1
onPMessage pattern __key*__:* [email protected]__:notify set
onPMessage pattern __key*__:* [email protected]__:set notify
onPMessage pattern __key*__:* [email protected]__:notify expire
onPMessage pattern __key*__:* [email protected]__:expire notify
onPMessage pattern __key*__:* [email protected]__:notify expired
onPMessage pattern __key*__:* [email protected]__:expired notify

Sekarang satu kasus penggunaan di mana Anda tertarik dengan nilai dari kunci yang kedaluwarsa juga.

Catatan: Redis hanya memberikan kunci pada kedaluwarsa kunci melalui pemberitahuan peristiwa keyspace, nilainya hilang setelah kunci kedaluwarsa. Untuk mendapatkan nilai pada kunci Anda kedaluwarsa, Anda dapat melakukan pekerjaan berikut yang ditunjukkan di bawah ini dengan konsep kunci bayangan yang rumit:

Saat Anda membuat kunci notifikasi, buat juga kunci "bayangan" khusus yang kedaluwarsa (jangan kedaluwarsa notifikasi yang sebenarnya). Misalnya:

// set your key value
SET notify umq 
//set your "shadow" key, note the value here is irrelevant
SET shadowkey:notify "" EX 10 

// Dapatkan pesan kedaluwarsa di saluran [email protected] :kedaluwarsa// Pisahkan kunci pada ":"(atau pemisah apa pun yang Anda putuskan untuk digunakan), ambil bagian kedua untuk mendapatkan kunci asli Anda

// Then get the value and do whatever with it
GET notify
// Then delete the key
DEL notify

Perhatikan bahwa nilai shadowkey tidak digunakan sehingga Anda ingin menggunakan nilai sekecil mungkin, bisa berupa string kosong "". Ini sedikit lebih banyak pekerjaan untuk diatur tetapi sistem di atas melakukan apa yang Anda butuhkan. Overhead adalah beberapa perintah tambahan untuk benar-benar mengambil dan menghapus kunci Anda ditambah biaya penyimpanan kunci kosong.

Jika tidak, Anda harus menyiapkan kunci Anda sedemikian rupa sehingga menyertakan nilai yang ditambahkan dengannya.

Semoga membantu Anda!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Masalah dengan Redis install cc:Perintah tidak ditemukan

  2. Bagaimana cara menggunakan sadd dengan banyak elemen di Redis menggunakan Python API?

  3. redis cluster reshard [ERR] Memanggil MIGRATE:ERR Syntax error

  4. Cara yang Benar menggunakan Redis Connection Pool dengan Python

  5. Jumlah kunci kedaluwarsa yang tercantum oleh perintah info pada redis slave tidak konsisten dengan apa yang saya lihat