Redis
 sql >> база данни >  >> NoSQL >> Redis

Известия на Redis:Вземете ключ и стойност при изтичане

Функцията, към която се свърза Eli, ви позволява да слушате, когато ключът изтече. Това обаче не ви дава стойността на ключа. Освен това, въз основа на подадения проблем с github, не изглежда, че можете да очаквате тази функция да бъде вградена скоро, ако изобщо някога (https://github.com/antirez/redis/issues/1876). Решението, което използвам, е да създам специален "сенчевен" ключ за изтичане, който е свързан с ключа, където имате действителна стойност.

Така че да приемем, че имате ключ, наречен testkey и има целочислена стойност от 100 . Освен това, ключът ще изтече след 10 секунди, в който момент искате да получите стойността на ключа. (Може би сте увеличавали ключа през 10-те секунди, в които е съществувал).

Първо трябва да настроите прослушване за събития с ключово пространство. По-специално искате да слушате за expired събития. Можете да направите това от вашата конфигурация или да използвате config set команда в redis. (вижте тук за повече информация:http://redis.io/topics/notifications)

CONFIG SET notify-keyspace-events Ex

Сега можете да се абонирате за специално keyevent канал, където ще бъдете уведомени, че ключът е изтекъл.

SUBSCRIBE [email protected]__:expired

Форматът на канала, за който да се абонирате, е [email protected]<db>__:<eventName> . В нашия пример приемаме, че работим с базата данни по подразбиране 0 и искаме да чуем за expired събитие.

Когато testkey изтича, сега ще получите съобщение в __keyevent__ канал, където съобщението е името на ключа, който е изтекъл. Разбира се в този момент ключът е изчезнал, така че вече нямаме достъп до стойността! Решението е да използвате специален ключ за изтичане.

Когато създадете своя testkey също така създайте специален ключ "shadow" с изтичащ срок (не изтичайте действителния testkey ). Например:

SET testkey 100
SET shadowkey:testkey "" EX 10

Сега в [email protected]__:expired канал ще получите съобщение, което ви казва, че ключът shadowkey:testkey просрочен. Вземете стойността на съобщението (което е името на ключа), разделете на двоеточие (или какъвто и да е разделител, който решите да използвате) и след това ръчно вземете стойността на ключа и го изтрийте.

// 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

Имайте предвид, че стойността на shadowkey-а не се използва, така че искате да използвате най-малката възможна стойност, която според този отговор (ключ за съхранение на Redis без стойност) е празен низ "" . Това е малко повече работа за настройка, но горната система прави точно това, от което се нуждаете. Режийните разходи са няколко допълнителни команди за действително извличане и изтриване на вашия ключ плюс разходите за съхранение на празен ключ.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. разгръщането на redis към heroku не може да се свърже

  2. Как да поставите на пауза или да възобновите задачата за целина?

  3. Можем ли да вземем присъединяване в Redis?

  4. Кеш на приложението v.s. hibernate второ ниво кеш, кое да използвам?

  5. Как да използвате командата UNSUBSCRIBE в Redis 2.6.11