Redis: mungkin untuk mengakhiri elemen dalam array atau set yang diurutkan?

124

Apakah saat ini hanya mungkin untuk mengakhiri seluruh pasangan kunci / nilai? Bagaimana jika saya ingin menambahkan nilai ke struktur tipe Daftar dan membuatnya dihapus otomatis 1 jam setelah penyisipan. Apakah saat ini mungkin, atau apakah perlu menjalankan tugas cron untuk melakukan pembersihan secara manual?

randombit
sumber

Jawaban:

76

Apakah saat ini hanya mungkin untuk mengakhiri seluruh pasangan kunci / nilai?

Sejauh yang saya tahu, dan juga menurut perintah kunci dan dokumen tentang kedaluwarsa , saat ini Anda dapat mengatur kedaluwarsa hanya untuk kunci tertentu dan bukan ke struktur data yang mendasarinya. Namun ada diskusi di grup google tentang fungsi ini dengan solusi alternatif yang diuraikan.

yojimbo87
sumber
1
Adakah ide sampai sekarang Juli 2016 mereka telah mendukung ini di versi yang lebih baru?
Kamran Shahid
1
@Kamranahid punya sesuatu tentang ini ??
Prakash Kumar
1
Nop Prakash belum.
Kamran Shahid
3
Apakah jawaban ini masih relevan setelah 8 tahun?
simo
2
Ya, masa berlaku elemen dalam struktur data bersarang tidak didukung oleh Redis.
Itamar Haber
94

Ada pola umum yang dapat menyelesaikan masalah ini dengan cukup baik.

Gunakan set yang diurutkan, dan gunakan stempel waktu sebagai skor. Maka sepele untuk menghapus item berdasarkan rentang skor, yang dapat dilakukan secara berkala, atau hanya pada setiap tulisan, dengan pembacaan selalu mengabaikan elemen di luar rentang, dengan hanya membaca rentang skor.

Selengkapnya di sini: https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs

Adriaan Pelzer
sumber
7
Solusi bagus, tetapi saya berharap redis mendukung ini dengan benar. Ini adalah persyaratan umum dan tidak memerlukan solusi yang rumit.
UpTheCek
14
Entahlah, saya sangat senang mereka tetap berpegang teguh pada senjata mereka - memperluas set fitur dengan cara yang tidak mereka inginkan atau tidak rencanakan berarti membuat pengorbanan desain. Membangun fungsionalitas tambahan di atas terdengar seperti solusi sempurna, dan membuat Redis melakukan apa yang dilakukannya, dengan sangat baik
Kieren Johnstone
redis sempurna apa adanya - desain sederhana, bersih, dan perilaku yang dapat diprediksi yang menghasilkan lebih dari
performa
1
Solusi luar biasa, kami juga dapat menggunakan daftar fifo sederhana tempat kami menyimpan daftar dan hanya mengambil 5 elemen pertama, dan ketika daftar bertambah besar dari 5 + N tergantung pada skalabilitas, kami menghapus kunci dan memulai kembali. Sederhana, mudah, dan persis seperti apa algoritme Redis seharusnya. Algoritme ini memberi sistem pelaporan kami banyak waktu untuk menanyakan daftar dan melihat perangkat apa yang digunakan pengguna untuk login. Setuju dengan @KierenJohnstone, Redis dirancang untuk menciptakan arsitektur di sekitarnya dan sempurna sebagaimana adanya.
Ligemer
1

Saya menemukan metode berbeda untuk menangani ini, tidak tahu apakah itu membantu salah satu dari Anda, tetapi ini dia:

Hash dan set yang diurutkan ditautkan oleh sebuah guid.

  1. Saya memiliki hash yang disetel kedaluwarsa dalam 'x' detik
  2. Saya memiliki set yang diurutkan yang digunakan untuk kueri jarak jauh
  3. Data untuk keduanya ditambahkan dalam transaksi, jadi jika salah satu gagal, keduanya gagal.
  4. Setelah kueri berkisar, gunakan 'EXISTS' untuk melihat apakah nilai hash ada saat hasilnya diulang
  5. Jika tidak ada, itu telah kedaluwarsa, jadi hapus item dari set yang diurutkan
JEPrice
sumber