2013-05-14 25 views

Trả lời

61

This is not possible, vì lợi ích của keeping Redis simple.

Quoth Thiên Chúa:

Hi, nó không phải là có thể, hoặc sử dụng một chìa khóa top-level khác nhau cho rằng lĩnh vực cụ thể, hoặc lưu trữ cùng với các đệ lĩnh vực khác với một hết hạn thời gian, lấy cả và để ứng dụng hiểu được nếu nó là vẫn hợp lệ hoặc không dựa trên thời gian hiện tại.

0

Bạn có thể. Đây là một ví dụ.

redis 127.0.0.1:6379> hset key f1 1 
(integer) 1 
redis 127.0.0.1:6379> hset key f2 2 
(integer) 1 
redis 127.0.0.1:6379> hvals key 
1) "1" 
2) "1" 
3) "2" 
redis 127.0.0.1:6379> expire key 10 
(integer) 1 
redis 127.0.0.1:6379> hvals key 
1) "1" 
2) "1" 
3) "2" 
redis 127.0.0.1:6379> hvals key 
1) "1" 
2) "1" 
3) "2" 
redis 127.0.0.1:6379> hvals key 

Sử dụng EXPIRE hoặc EXPIREAT lệnh.

Nếu bạn muốn hết hạn khóa cụ thể trong băm cũ hơn 1 tháng. Điều này là không thể. Lệnh hết hạn Redis là dành cho tất cả các khóa trong mã băm. Nếu bạn đặt khóa băm hàng ngày, bạn có thể đặt thời gian khóa để phát trực tiếp.

hset key-20140325 f1 1 
expire key-20140325 100 
hset key-20140325 f1 2 
+13

Tôi không nghĩ rằng ông muốn hết hạn * tất cả * phím trong băm, chứ không phải * tất cả các phím trong băm mà là lớn hơn 1 tháng *, vì vậy chỉ một số người trong số họ. Mà AFAIK là không thể. – UpTheCreek

+1

IMHO câu hỏi cho chúng tôi giả định điều này. Vì vậy, Jonathan được +1 từ tôi, cos anh ấy đã giúp tôi! Thanx! – longliveenduro

+0

làm cách nào bạn hết hạn "f1" và "f2"? – vgoklani

2

Có khung Redisson java triển khai thực hiện đối tượng băm Map với mục nhập Hỗ trợ TTL. Nó sử dụng hmapzset Đối tượng Redis nằm dưới mui xe. Ví dụ sử dụng:

RMapCache<Integer, String> map = redisson.getMapCache('map'); 
map.put(1, 30, TimeUnit.DAYS); // this entry expires in 30 days 

Phương pháp này khá hữu ích.

+0

nhưng làm cách nào bạn có thể tạo bản đồ?vì tôi không tìm thấy bất kỳ hướng dẫn hoặc phương pháp tạo/đặt – FaNaT

+0

@ ZoltánNémeth Trong bản đồ Redis được tạo tự động khi chèn giá trị đầu tiên. –

0

Về triển khai NodeJS, tôi đã thêm trường tùy chỉnh expiryTime vào đối tượng tôi lưu trong HASH. Sau đó, sau một khoảng thời gian cụ thể, tôi rõ ràng các mục HASH hết hạn bằng cách sử dụng đoạn mã sau:

client.hgetall(HASH_NAME, function(err, reply) { 
    if (reply) { 
     Object.keys(reply).forEach(key => { 
      if (reply[key] && JSON.parse(reply[key]).expiryTime < (new Date).getTime()) { 
       client.hdel(HASH_NAME, key); 
      } 
     }) 
    } 
}); 
0

Bạn có thể hết hạn Redis băm trong một cách dễ dàng, Ví dụ sử dụng python

import redis 
conn = redis.Redis('localhost') 
conn.hmset("hashed_user", {'name': 'robert', 'age': 32}) 
conn.expire("hashed_user", 10) 

này sẽ hết hạn tất cả các phím con trong bămhashed_user sau 10 giây

cùng từ redis-cli,

127.0.0.1:6379> HMSET testt username wlc password P1pp0 age 34 
OK 
127.0.0.1:6379> hgetall testt 
1) "username" 
2) "wlc" 
3) "password" 
4) "P1pp0" 
5) "age" 
6) "34" 
127.0.0.1:6379> expire testt 10 
(integer) 1 
127.0.0.1:6379> hgetall testt 
1) "username" 
2) "wlc" 
3) "password" 
4) "P1pp0" 
5) "age" 
6) "34" 

sau 10 giây

127.0.0.1:6379> hgetall testt 
(empty list or set) 
Các vấn đề liên quan