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

Pemberitahuan kedaluwarsa kunci di redis python

Kejutannya (tidak ada peristiwa kedaluwarsa yang terlihat saat waktu hidup untuk sebuah kunci mencapai nol) tidak terikat pada Python, melainkan pada cara, Redis adalah kunci yang kedaluwarsa.

Redis doc tentang Waktu acara yang kedaluwarsa

Waktu acara yang kedaluwarsa

Kunci dengan waktu untuk hidup yang terkait kedaluwarsa oleh Redis dalam dua cara:

  • Saat kunci diakses oleh sebuah perintah dan ternyata kedaluwarsa.
  • Melalui sistem latar belakang yang mencari kunci kedaluwarsa di latar belakang, secara bertahap, agar dapat juga mengumpulkan kunci yang tidak pernah diakses.

Peristiwa kadaluarsa dihasilkan ketika kunci diakses dan ditemukan kedaluwarsa oleh salah satu sistem di atas, akibatnya tidak ada jaminan bahwa server Redis akan dapat menghasilkan peristiwa kedaluwarsa pada waktu kunci waktu untuk hidup mencapai nilai nol.

Jika tidak ada perintah yang menargetkan kunci secara terus-menerus, dan ada banyak kunci dengan TTL yang terkait, akan ada penundaan yang signifikan antara waktu waktu kunci untuk hidup turun ke nol, dan waktu peristiwa kedaluwarsa dibuat.

Pada dasarnya acara yang kedaluwarsa dihasilkan ketika server Redis menghapus kunci dan bukan ketika waktu untuk hidup secara teoritis mencapai nilai nol.

Tes kecil di konsol

saat Redis berjalan ($ sudo service redis-server start )

Saya memulai satu konsol dan telah berlangganan:

$ redis-cli
PSUBSCRIBE "__key*__:*"

Kemudian, di konsol lain:

$ redis-cli
> config set notify-keyspace-events AKE

apa yang harus berlangganan semua jenis acara

Kemudian saya melanjutkan eksperimen di konsol kedua ini:

> set aaa aaa
> del aaa
> set aaa ex 5
> get aaa

Semua aktivitas terlihat di konsol berlangganan. Hanya masa berlaku kunci yang terkadang tertunda beberapa detik, terkadang datang tepat waktu.

Perhatikan juga, ada perbedaan halus dalam pesan, satu pesan [email protected]__:expire [email protected]__:expired lainnya .

Contoh pendengar spy.py

import redis
import time

r = redis.StrictRedis()
pubsub = r.pubsub()
pubsub.psubscribe("*")
for msg in pubsub.listen():
    print time.time(), msg

Kode ini mendaftar ke semua saluran yang ada dalam redis default dan mencetak apa pun yang dipublikasikan.

Jalankan:

$ python spy.py

dan di konsol lain coba setel kunci dengan kedaluwarsa. Anda akan melihat semua acara.

Untuk mengikuti masukan redis-cli.

$ redis-cli
127.0.0.1:6379> set a aha
OK
127.0.0.1:6379> set b bebe ex 3
OK
127.0.0.1:6379> set b bebe ex 3
OK

kami mendapatkan keluaran mata-mata:

1401548400.27 {'pattern': None, 'type': 'psubscribe', 'channel': '*', 'data': 1L}
1401548428.36 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:a', 'data': 'set'}
1401548428.36 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:set', 'data': 'a'}
1401548436.8 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'set'}
1401548436.8 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:set', 'data': 'b'}
1401548436.8 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'expire'}
1401548436.8 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:expire', 'data': 'b'}
1401548439.82 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'expired'}
1401548439.82 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:expired', 'data': 'b'}
1401548484.46 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'set'}
1401548484.46 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:set', 'data': 'b'}
1401548484.46 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'expire'}
1401548484.46 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:expire', 'data': 'b'}
1401548487.51 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'expired'}
1401548487.51 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:expired', 'data': 'b'}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara membuat koneksi Redis dengan Master dan Slave

  2. Memcache vs Memori Java

  3. Antrian demokrasi di Sidekiq

  4. 2 Bagan Helm dengan ketergantungan Redis bersama

  5. Membandingkan nomor 64 bit yang ditandatangani menggunakan operasi bitwise 32 bit di Lua