2012-08-07 32 views
12

máy chủ redis tôi không xóa các phím khi đạt thời gian đưa ra live 0.phím redis tôi không hết hạn

Dưới đây là một số mẫu mã:

redis-cli 
>SET mykey "ismykey" 
>EXPIRE mykey 20 
#check TTL 
>TTL mykey 
>(integer) 17 
> ... 
>TTL mykey 
>(integer) -1 
#mykey chould have expired: 
>EXISTS mykey 
>(integer) 1 
>#oh still there, check its value 
>GET mykey 
>"ismykey" 

Nếu tôi kiểm tra sự trở lại thông tin bằng cách redis, nó nói 0 phím đã hết hạn.

Bất kỳ ý tưởng nào?

cảm ơn.

Trả lời

19

Vì bạn đang làm một '...' thật khó để nói chắc chắn, nhưng tôi muốn nói rằng bạn đang thiết lập khóa của tôi trong phần đó, điều này sẽ có hiệu lực loại bỏ hết hạn.

From the EXPIRE manual

Thời gian chờ sẽ bị xóa chỉ khi phím được lấy ra bằng cách sử dụng lệnh DEL hoặc ghi đè bằng cách sử dụng SET hoặc GetSet lệnh

Also, regarding the -1 reply from TTL

giá trị Return

Trả lời số nguyên: TTL trong vài giây hoặc -1 khi khóa không tồn tại hoặc không có thời gian chờ.

EDIT: Lưu ý rằng hành vi này thay đổi trong Redis 2,8

Bắt đầu với Redis 2,8 giá trị trả về trong trường hợp lỗi thay đổi:
Lợi nhuận lệnh -2 nếu chìa khóa không tồn tại .
Lệnh trả về -1 nếu khóa tồn tại nhưng không hết hạn.

Nói cách khác, nếu khóa của bạn tồn tại, có vẻ như liên tục, tức là không có bất kỳ tập hợp hết hạn nào. EDIT: Có vẻ như tôi có thể tạo lại điều này nếu tôi tạo khóa trên máy chủ nô lệ REDIS, slave sẽ không xóa khóa mà không có đầu vào chính, vì thông thường bạn sẽ không tạo khóa cục bộ trên một slave. Đây có phải là trường hợp ở đây không?

Tuy nhiên trong khi những người nô lệ kết nối với một bậc thầy sẽ không hết hạn phím một cách độc lập (nhưng sẽ chờ cho DEL đến từ các bậc thầy), họ sẽ vẫn có đầy đủ tình trạng hết hạn tồn tại trong bộ dữ liệu , do đó, khi một nô lệ được bầu vào một bậc thầy, nó sẽ có thể hết hạn các khóa một cách độc lập, hoàn toàn hoạt động như một tổng thể.

+0

Cảm ơn bạn đã trả lời quá nhanh. Chữ '...' trong đoạn mã của tôi chỉ có nghĩa là tôi đợi 20 giây cho đến khi TTL trả về -1. Tôi không gõ bất kỳ lệnh nào ở đây. Vì vậy, thời gian hết hạn sẽ hết hạn, phải không? – user1151446

+0

@ user1151446 Xem chỉnh sửa của tôi. –

+0

cảm ơn Joachim! Đó chính xác là vấn đề, tôi vô ý thiết lập chìa khóa của mình trên nô lệ thay vì chủ nhân, điều đó không nhất quán. Nếu tôi chuyển sang chủ của tôi tất cả mọi thứ hoạt động tốt. – user1151446

Các vấn đề liên quan