Điều này không thể được thực hiện trực tiếp. Bạn có thể thêm thời hạn trên toàn bộ hset, nhưng không thể thêm trên các trường riêng lẻ. Nếu bạn muốn làm điều này, bạn có thể gọi r.expire('name', time)
, time
ở đâu là số giây cho đến khi hết hạn.
Thay vào đó, bạn có thể sử dụng set
thay vì hset
:
for i in range(10):
r.set('name:' + str(i), i, ex=time_to_expire_s)
Điều này sẽ làm mất một số chức năng, vì (ví dụ) bạn sẽ không có cách tốt để liệt kê tất cả các khóa bắt đầu bằng 'name:', nhưng nó sẽ cho phép bạn đặt thời hạn cho các khóa một cách độc lập.
Là tùy chọn thứ hai, bạn có thể đặt thời hạn trong các giá trị của hset
. Điều này yêu cầu logic phía máy khách và Redis sẽ không thực hiện bất kỳ thao tác nào giúp bạn; nhưng bạn có thể làm điều gì đó như:
for i in range(10):
r.hset(
'name',
i,
json.dumps({ 'value': i, 'expiration': time.time() + time_to_expire_s })
)
Và sau đó nếu bạn đã từng đọc một giá trị đã hết hạn trong quá khứ, bạn sẽ coi đó là lỗi bộ nhớ cache. Điều này sẽ không giúp ích cho bạn nếu bạn đang cố gắng làm hết hạn các khóa để giải phóng bộ nhớ, nhưng nếu mục tiêu của bạn là khóa hết hạn vì một số lý do đúng đắn, thì điều này có thể hiệu quả với bạn.