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

Pemberitahuan redis:Dapatkan kunci dan nilai saat kedaluwarsa

Fitur yang ditautkan Eli memungkinkan Anda mendengarkan saat kunci kedaluwarsa. Namun, itu tidak memberi Anda nilai kuncinya. Selanjutnya, berdasarkan masalah github yang diajukan, sepertinya Anda tidak dapat mengharapkan fitur ini dibangun dalam waktu dekat (https://github.com/antirez/redis/issues/1876). Solusi yang saya gunakan adalah membuat kunci kedaluwarsa "bayangan" khusus yang ditautkan ke kunci di mana Anda memiliki nilai sebenarnya.

Jadi katakanlah Anda memiliki kunci yang disebut testkey dan memiliki nilai integer 100 . Selanjutnya, kunci akan kedaluwarsa setelah 10 detik di mana Anda ingin mendapatkan nilai kunci. (Mungkin Anda menambah kunci selama 10 detik itu ada).

Pertama, Anda perlu mengatur mendengarkan untuk acara keyspace. Khususnya Anda ingin mendengarkan expired acara. Anda dapat melakukan ini dari konfigurasi Anda atau menggunakan config set perintah di redis. (lihat di sini untuk info lebih lanjut:http://redis.io/topics/notifications)

CONFIG SET notify-keyspace-events Ex

Sekarang Anda dapat berlangganan keyevent khusus saluran tempat Anda akan diberi tahu bahwa kunci tersebut kedaluwarsa.

SUBSCRIBE [email protected]__:expired

Format saluran untuk berlangganan adalah [email protected]<db>__:<eventName> . Dalam contoh kita, kita mengasumsikan kita bekerja dengan database default 0 dan kita ingin mendengarkan expired acara.

Ketika testkey kedaluwarsa Anda sekarang akan mendapatkan pesan di __keyevent__ saluran di mana pesannya adalah nama kunci yang kedaluwarsa. Tentu saja saat ini kuncinya hilang sehingga kita tidak bisa lagi mengakses nilainya! Solusinya adalah dengan menggunakan kunci kedaluwarsa khusus.

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

SET testkey 100
SET shadowkey:testkey "" EX 10

Sekarang di [email protected]__:expired saluran Anda akan mendapatkan pesan yang memberi tahu Anda bahwa kunci shadowkey:testkey kedaluwarsa. Ambil nilai pesan (yang merupakan nama kunci), bagi pada titik dua (atau pemisah apa pun yang Anda putuskan untuk digunakan), lalu dapatkan nilai kunci secara manual dan hapus.

// set your key value
SET testkey 100 
//set your "shadow" key, note the value here is irrelevant
SET shadowkey:testkey "" EX 10 
// Get an expiration message in the channel [email protected]__:expired
// Split the key on ":", take the second part to get your original key
// Then get the value and do whatever with it
GET testkey
// Then delete the key
DEL testkey

Perhatikan bahwa nilai shadowkey tidak digunakan sehingga Anda ingin menggunakan nilai sekecil mungkin yang menurut jawaban ini (Redis store key tanpa nilai) adalah 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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menghubungkan ke RedisToGo melalui Node.JS

  2. Penyedia ASP.NET SessionState yang didukung Redis

  3. Apakah Redis TimeSeries alat yang tepat untuk menangkap candle stick dalam harga saham

  4. Bagaimana socket.io mengirim pesan ke beberapa server?

  5. Nama bidang Id Entitas ServiceStack