Bạn có thể làm điều đó với pub-sub chỉ mô hình Khởi động Redis Server
Thay đổi thông báo-keyspace-sự kiện trong redis.conf thành KEA (điều này tùy thuộc vào yêu cầu của bạn). Chi tiết được cung cấp trong tài liệu redis http://redis.io/topics/notifications.
Redis Java Client (Jedis), Hãy thử cách sau:
Trình nghe thông báo:
public class KeyExpiredListener extends JedisPubSub {
@Override
public void onPSubscribe(String pattern, int subscribedChannels) {
System.out.println("onPSubscribe "
+ pattern + " " + subscribedChannels);
}
@Override
public void onPMessage(String pattern, String channel, String message) {
System.out
.println("onPMessage pattern "
+ pattern + " " + channel + " " + message);
}
//add other Unimplemented methods
}
Người đăng ký:
**** Lưu ý ** jedis. psubscribe (new KeyExpiredListener (), "__key * __:*"); - Phương pháp này hỗ trợ kênh dựa trên mẫu regex ở đâu đó như jedis. đăng ký (new KeyExpiredListener (), "" [email protected] __:allow "); --Phương thức này lấy tên kênh đầy đủ / chính xác
public class Subscriber {
public static void main(String[] args) {
JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
Jedis jedis = pool.getResource();
jedis.psubscribe(new KeyExpiredListener(), "__key*__:*");
}
}
Lớp kiểm tra:
public class TestJedis {
public static void main(String[] args) {
JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
Jedis jedis = pool.getResource();
jedis.set("notify", "umq");
jedis.expire("notify", 10);
}
}
Bây giờ, trước tiên hãy khởi động Người đăng ký của bạn và sau đó Chạy TestJedis. Bạn sẽ thấy kết quả sau:
onPSubscribe __key*__:* 1
onPMessage pattern __key*__:* [email protected]__:notify set
onPMessage pattern __key*__:* [email protected]__:set notify
onPMessage pattern __key*__:* [email protected]__:notify expire
onPMessage pattern __key*__:* [email protected]__:expire notify
onPMessage pattern __key*__:* [email protected]__:notify expired
onPMessage pattern __key*__:* [email protected]__:expired notify
Bây giờ là một trường hợp sử dụng mà bạn quan tâm đến giá trị của khóa đã hết hạn.
Lưu ý: Redis chỉ cung cấp khóa khi khóa hết hạn thông qua thông báo về các sự kiện không gian khóa, giá trị sẽ bị mất khi khóa hết hạn. Để nhận được giá trị trên khóa của bạn hết hạn, bạn có thể thực hiện công việc sau xung quanh được hiển thị bên dưới với khái niệm phức tạp về khóa bóng:
Khi bạn tạo khóa thông báo của mình, cũng tạo khóa "bóng" hết hạn đặc biệt (không hết hạn thông báo thực tế). Ví dụ:
// set your key value
SET notify umq
//set your "shadow" key, note the value here is irrelevant
SET shadowkey:notify "" EX 10
// Nhận thông báo hết hạn trong kênh [email protected] :hết hạn // Tách khóa trên ":" (hoặc bất kỳ dấu phân tách nào bạn quyết định sử dụng), thực hiện phần thứ hai để lấy khóa ban đầu của bạn
// Then get the value and do whatever with it
GET notify
// Then delete the key
DEL notify
Lưu ý rằng giá trị của phím bóng không được sử dụng, vì vậy bạn muốn sử dụng giá trị nhỏ nhất có thể, có thể là một chuỗi trống "". Sẽ tốn thêm một chút công việc để thiết lập nhưng hệ thống trên thực hiện chính xác những gì bạn cần. Chi phí chung là một số lệnh bổ sung để thực sự truy xuất và xóa khóa của bạn cộng với chi phí lưu trữ của khóa trống.
Nếu không, bạn phải chuẩn bị khóa của mình theo cách sao cho nó bao gồm giá trị được gắn với nó.
Hy vọng nó sẽ giúp bạn!