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

Redis:Untuk mengatur batas waktu untuk pasangan nilai kunci di Set

Sayangnya tidak ada. "Penampung" Redis (yaitu daftar, hash, set, dan set yang diurutkan) tidak mendukung kedaluwarsa per anggota, meskipun fungsi ini telah diminta berkali-kali sebelumnya.

Anda dapat, bagaimanapun, menerapkan logika Anda sendiri untuk mencapai hasil itu. Ada beberapa kemungkinan pendekatan untuk mengatasi hal ini - inilah salah satu contohnya. Alih-alih menggunakan satu set, gunakan set yang diurutkan (ZSET) dan atur skor setiap anggota ke waktu kedaluwarsanya menggunakan nilai epoch. Jenis alur kerja ini dapat diimplementasikan menggunakan skrip Lua misalnya. Untuk menambahkan anggota gunakan sesuatu seperti:

redis.call('zadd', KEYS[1], os.time()+ARGV[1], ARGV[2])

dan EVAL menggunakan '1 a 60 1' dan '1 a 120 2' sebagai argumen, sesuai contoh Anda. Untuk benar-benar "kedaluwarsa" item dari set, Anda harus menghapusnya setelah waktunya berlalu. Anda dapat melakukannya dengan menerapkan proses berkala yang memindai daftar Anda atau saat mengaksesnya. Sebagai contoh, Lua berikut dapat digunakan untuk member yang kedaluwarsa:

redis.call('zremrangebyscore', KEYS[1], '-inf', os.time())

dan EVAL menggunakan '1 a' sebagai argumen sesuai contoh Anda.

EDIT:Cara mencapai hal di atas menggunakan Python

import time
import redis

def add(r, key, ttl, member):
    r.zadd(key, member, int(time.time()+ttl))

def expire(r, key):
    r.zremrangebyscore(key, '-inf', int(time.time()))

...

r = redis.Redis()
add(r, 'a', 1, 60)
add(r, 'a', 2, 120)

# periodically or before every operation do
expire(r, 'a')



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apa perbedaan utama antara Redis dan Membase?

  2. Redis:Cara mengakses file log Redis

  3. bagaimana cara mendapatkan kunci yang tidak cocok dengan pola tertentu di redis?

  4. Node.js Kue cara memulai kembali pekerjaan yang gagal

  5. Menjalankan redis pada gambar nodejs Docker