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

Redis mục danh sách Pop Theo số lượng mục

Tôi giả sử rằng bạn đang làm việc trên một hàng đợi , nơi bạn chèn 1000 mục tại một nơi và truy xuất chúng ở nhiều nơi theo thứ tự mà nó được chèn .

Bạn không thể đạt được nó với một lệnh duy nhất nhưng bạn có thể làm điều đó với 2 lệnh. Bạn có thể viết một script lua để biến chúng thành nguyên tử.

Lrange:http://redis.io/commands/lrange

Lrange list -100 -1

Điều này sẽ liệt kê cho bạn 100 phần tử đầu tiên trong danh sách. ở đây phần bù là -100. Lưu ý rằng điều này sẽ trả về các mục theo thứ tự ngược lại mà nó được chèn vào. Vì vậy, bạn cần đảo ngược vòng lặp để đảm bảo cơ chế hàng đợi.

Ltrim:http://redis.io/commands/ltrim

ltrim list 0 -101

Thao tác này sẽ cắt 100 phần tử đầu tiên trong danh sách. ở đây 101 là n + 1 vì vậy nó phải là 101. Ở đây bù đắp là 101

Viết chúng bên trong một khối lua sẽ đảm bảo cho bạn tính nguyên tử.

Để tôi cho bạn một ví dụ đơn giản.

Bạn chèn 100 phần tử vào một nơi duy nhất.

lpush list 1 2 3 .. 100

Bạn có nhiều khách hàng đang cố gắng truy cập khối lua này. Giả sử giá trị n của bạn là 5 ở đây. 1stclient tham gia và được chèn 5 phần tử đầu tiên.

127.0.0.1:6379> lrange list -5 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

Bạn giữ chúng trong đối tượng lua của mình và xóa chúng.

127.0.0.1:6379> LTRIM list 0 -6
OK

trả chúng về mã của bạn, bây giờ kết quả bạn muốn là 1 2 3 4 5 nhưng những gì bạn nhận được là 5 4 3 2 1. Vì vậy, bạn cần đảo ngược vòng lặp và thực hiện thao tác.

Khi khách hàng tiếp theo đến, nó sẽ nhận được bộ giá trị tiếp theo.

127.0.0.1:6379> lrange list -5 -1
1) "10"
2) "9"
3) "8"
4) "7"
5) "6"

Bằng cách này, bạn có thể đạt được yêu cầu của mình. Hi vọng điêu nay co ich.

CHỈNH SỬA:

Tập lệnh Lua:

local result = redis.call('lrange', 'list','-5','-1')
redis.call('ltrim','list','0','-6')
return result


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. RuntimeWarning:Bạn đang chạy worker với các đặc quyền của superuser:điều này hoàn toàn không được khuyến khích

  2. Đang cố gắng bắt đầu redis và xếp lại lịch trình trong một nhiệm vụ cào

  3. Chuỗi Redis so với hàm băm Redis đại diện cho JSON:hiệu quả?

  4. Tôi có thể tuần tự hóa một đối tượng cá thể ruby ​​Digest ::SHA1 không?

  5. Tìm khóa không hết hạn trong Redis