Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Làm cách nào để lưu trữ trong tập hợp được sắp xếp của Redis với dấu thời gian phía máy chủ dưới dạng điểm số?

Giải pháp là sử dụng tập lệnh Lua:

local time = redis.call('TIME')
local ts = time[1]..string.format('%06d', time[2])
return redis.call('ZADD', KEYS[1], ts, ARGV[1])

Ở đây chúng tôi sử dụng Redis TIME yêu cầu. Lệnh trả về:

  • thời gian unix tính bằng giây
  • micro giây

Vì vậy, chúng ta có thể nối hai thứ này và sử dụng dấu thời gian micro giây. Chúng ta cần xóa bớt phần micro giây.

Vì các tập hợp được sắp xếp phù hợp với giá trị số nguyên lên đến 2 ^ 53, nên dấu thời gian của chúng tôi là an toàn cho đến năm 2255.

Đây là Redis-Cluster an toàn vì chúng tôi lưu trữ trong một khóa. Để sử dụng nhiều khóa, hãy đảm bảo đặt chúng trên cùng một nút bằng cách sử dụng thẻ băm nếu bạn muốn so sánh dấu thời gian.

Bạn có thể sửa đổi tập lệnh để sử dụng độ phân giải thấp hơn micro giây.

Đây EVAL lệnh, khóa truyền đơn giản và giá trị làm đối số, không cần tạo nhóm đã sắp xếp trước:

EVAL "local time = redis.call('TIME') local ts = time[1]..string.format('%06d', time[2]) return redis.call('ZADD', KEYS[1], ts, ARGV[1])" 1 ssetKey myVal

Như mọi khi, bạn có thể muốn tải tập lệnh và sử dụng EVALSHA .

> SCRIPT LOAD "local time = redis.call('TIME') local ts = time[1]..string.format('%06d', time[2]) return redis.call('ZADD', KEYS[1], ts, ARGV[1])"
"81e366e422d0b09c9b395b5dfe03c03c3b7b3bf7"
> EVALSHA 81e366e422d0b09c9b395b5dfe03c03c3b7b3bf7 1 ssetKey myNewVal
(integer) 1

Một lưu ý trên phiên bản Redis. Nếu bạn đang sử dụng:

  • Phiên bản Redis trước 3.2:xin lỗi, bạn không thể sử dụng TIME (lệnh không xác định) và sau đó viết bằng ZADD .
  • Phiên bản Redis lớn hơn 3.2 nhưng <5.0:Thêm redis.replicate_commands() trên đầu tập lệnh. Xem Scripts như một chức năng thuần túy
  • Redis 5.0 trở lên:bạn giỏi.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Xác thực lại lỗi với Node.js và socket.io

  2. Làm cách nào để xóa gỡ lỗi khỏi ứng dụng Express?

  3. Redis Cluster - đã sẵn sàng sản xuất?

  4. Đặt phiên mùa xuân trên máy chủ redis

  5. biên dịch redis-client tùy chỉnh không thành công