Redis: Terapkan Kedaluwarsa pada hash

Dibuat pada 28 Okt 2011  ·  44Komentar  ·  Sumber: redis/redis

Halo, saya ingin tahu apakah mungkin untuk mengatur waktu kedaluwarsa pada kunci hash?
Misalnya, saya ingin memiliki daftar anggota yang terhubung dalam hash dengan kedaluwarsa 5 menit pada setiap kunci.

Apa itu mungkin?

Terima kasih, dan maaf sebelumnya untuk bahasa Inggris saya.

Salam, Max

Komentar yang paling membantu

Yah, saya hampir tidak pernah ingin kedaluwarsa seluruh hash sekaligus. Jadi sungguh, Anda menyarankan memecah hash menjadi banyak kunci. Itu berhasil, tetapi argumen yang sama dapat digunakan untuk menanyakan mengapa Anda membutuhkan hash sama sekali? Ada nilai besar dalam mengelompokkan semua kunci Anda yang terkait secara logis. Jika tidak, Anda perlu melakukan akuntansi itu melalui beberapa set yang menyimpan kunci Anda dan Anda mengalami masalah integritas referensial. Semuanya bisa dilakukan, tetapi rasanya seperti kelalaian yang cukup besar di redis untuk tidak mendukung kunci individu yang kedaluwarsa dalam hash. Dan saya tidak yakin ada gunanya memiliki N orang yang berbeda menyelesaikannya M dengan cara yang berbeda.

Semua 44 komentar

Hai, itu tidak mungkin, gunakan kunci tingkat atas yang berbeda untuk bidang tertentu, atau simpan bersama dengan bidang lain yang diajukan dengan waktu kedaluwarsa, ambil keduanya, dan biarkan aplikasi mengerti apakah itu masih valid atau tidak berdasarkan waktu saat ini.

redis 127.0.0.1:6379> hset kedaluwarsa: nama saya tom
(bilangan bulat) 0
redis 127.0.0.1:6379> hget expired : me name
"tom"

redis 127.0.0.1:6379> kedaluwarsa kedaluwarsa: saya 10
(bilangan bulat) 1
redis 127.0.0.1:6379> ttl expired :me
(bilangan bulat) 8

...
...
...

redis 127.0.0.1:6379> ttl expired:me
(bilangan bulat) -1
redis 127.0.0.1:6379> hget expired : me name
(nol)

jadi itu berhasil

Saya yakin permintaannya adalah untuk kedaluwarsa masing-masing bidang. Kedaluwarsa seluruh hash sama dengan kedaluwarsa kunci lainnya.

Ya, saya juga telah memenuhi persyaratan ini. Apakah mungkin untuk kedaluwarsa bidang individu?

Apakah ada masalah khusus dengan membuat beberapa hash dengan waktu kedaluwarsa yang berbeda?

Yah, saya hampir tidak pernah ingin kedaluwarsa seluruh hash sekaligus. Jadi sungguh, Anda menyarankan memecah hash menjadi banyak kunci. Itu berhasil, tetapi argumen yang sama dapat digunakan untuk menanyakan mengapa Anda membutuhkan hash sama sekali? Ada nilai besar dalam mengelompokkan semua kunci Anda yang terkait secara logis. Jika tidak, Anda perlu melakukan akuntansi itu melalui beberapa set yang menyimpan kunci Anda dan Anda mengalami masalah integritas referensial. Semuanya bisa dilakukan, tetapi rasanya seperti kelalaian yang cukup besar di redis untuk tidak mendukung kunci individu yang kedaluwarsa dalam hash. Dan saya tidak yakin ada gunanya memiliki N orang yang berbeda menyelesaikannya M dengan cara yang berbeda.

Terima kasih Kevin Menard & Johan Bergström. Sebenarnya saya bertemu dengan skenario yang sama yang dijelaskan di sini: https://github.com/antirez/redis/issues/242 , dan saya telah membaca komentar yang diberikan oleh Salvatore.
Jika saya membagi semua bidang menjadi kunci seperti ini: hashkey:field1 , hashkey:field2 ,.. Sulit untuk mengelola kunci ini sebagai kumpulan. seperti menanyakan semua bidang, KUNCI 'patten' diperlukan...

Salam,
Dengchunping

Ini sangat bermasalah. Alasan saya ingin kedaluwarsa kunci tertentu di dalam hash adalah karena saya menyimpan pengaturan yang di-cache di hash. Saya ingin kedaluwarsa kunci secara otomatis setelah saya mengaturnya. pada saat yang sama, saya harus dapat mematikan seluruh hash jika semua pengaturan saya telah diperbarui. Jadi saya perlu kemampuan untuk mendapatkan pengaturan ini dalam daftar, dan mematikan daftar. tanpa menemukan semua contoh pengaturan: apa pun.

Punya masalah yang sama dengan bjoshuanoah, sekarang, saya menggunakan kunci dengan ttl alih-alih hash, misalnya:
Hash: Nama Hash A - Kunci B - Nilai C
Nilai Kunci: Kunci A_B - Nilai C

Apakah kekurangan fitur ini secara teknis tidak mungkin atau itu pilihan desain?

Pilihan desain mengarah pada implementasi yang tidak memungkinkan implementasi.

:+1:

redis sendiri tidak mendukung , fungsi ini terlalu berguna.

Sampai hari ini redis tidak berencana untuk mengimplementasikan fungsi ini :-(

redis 127.0.0.1:6379> hset kedaluwarsa: nama saya tom
(bilangan bulat) 0
redis 127.0.0.1:6379> hget expired : me name
"tom"

redis 127.0.0.1:6379> kedaluwarsa kedaluwarsa: saya 10
(bilangan bulat) 1
redis 127.0.0.1:6379> ttl expired :me
(bilangan bulat) 8

...
...
...

redis 127.0.0.1:6379> ttl expired:me
(bilangan bulat) -1
redis 127.0.0.1:6379> hget expired : me name
(nol)

jadi itu berhasil

hanya ada satu bidang di hashtable, bagaimana dengan banyak bidang? Itu tidak akan bekerja dengan benar!

@oylz - Saya percaya bahwa maksud asli dari permintaan fitur ini memungkinkan kedaluwarsa bidang tertentu di dalam hash, bukan seluruh kunci.

@itamarhaber
bagaimana bisa seperti ini?:
hset kedaluwarsa: nama saya1 tom1
hset kedaluwarsa: nama saya2 tom2
hset kedaluwarsa: nama saya3 tom3

ttl kedaluwarsa: saya 10

Seluruh hashtable(expire:me) akan kedaluwarsa.

@oylz Kami tahu hash lengkap akan kedaluwarsa. ini berfungsi tetapi di sini kita berbicara tentang satu bidang hash apa pun (seperti yang sudah dijelaskan oleh

@nomi-ramzan
apakah kamu benar-benar mengerti? seperti yang dikatakan @itamarhaber :" Saya percaya bahwa maksud asli dari permintaan fitur ini adalah mengizinkan kedaluwarsa bidang tertentu di dalam hash, bukan seluruh kunci ."

@nomi-ramzan
maaf, saya menjawab Anda salah di awal, saya harus membalas @wheelq .
misalnya:
_redis 127.0.0.1:6379> hset kedaluwarsa: nama saya tom
(bilangan bulat) 0
redis 127.0.0.1:6379> hget expired : me name
"tom"

redis 127.0.0.1:6379> kedaluwarsa kedaluwarsa: saya 10
(bilangan bulat) 1
redis 127.0.0.1:6379> ttl expired :me
(bilangan bulat) 8

...
...
...

redis 127.0.0.1:6379> ttl expired:me
(bilangan bulat) -1
redis 127.0.0.1:6379> hget expired : me name
(nol)

jadi berhasil_

Ini tahun 2020, Redis harus melihat ini

Perusahaan kami telah menerapkan fungsi bidang hash kedaluwarsa
itu berbasis redis 4.0

Menyediakan fitur ini secara native akan sangat membantu.
Terima kasih.

Aku masih menunggu ini

sulit dipercaya! Redis masih belum mengimplementasikannya!

sama di sini, akan luar biasa memiliki kemampuan untuk mengatur kedaluwarsa ke bidang hash

+1

sulit dipercaya! Redis masih belum mengimplementasikannya!

+1 untuk fitur ini

Setelah menemukan dunia Redis, saya membayangkan menyimpan cache dalam bentuk ini:
1) Setiap tabel hash - adalah metode api saya
2) Baris dalam tabel hash - fungsi hash dari parameter input metode dan nilainya adalah respons dari metode

+1 untuk fitur ini

+1 untuk fitur ini

+1

+1

+1

+1

Apakah ada alasan khusus kunci kedaluwarsa dalam hash tidak diterapkan?

Alasan mengapa ini belum pernah diimplementasikan adalah karena meningkatnya kompleksitas waktu (CPU) dan ruang (RAM) yang dibutuhkan fitur ini. Yang mengatakan, tidak pernah mengatakan tidak pernah.

Apakah kompleksitas waktu berjalan dalam urutan waktu polinomial? Apa yang membuatnya intensif RAM, kloning untuk tujuan apa pun?

Saya yakin jika fitur ini diterapkan redis akan mendapatkan peningkatan popularitas yang besar

+1 untuk fitur ini

+1

+1

Apakah halaman ini membantu?
0 / 5 - 0 peringkat