Để làm điều gì đó tương tự như "auto_increment", tôi sẽ xem xét hàm INCR:
http://redis.io/commands/incr
Nó sẽ tăng một giá trị, trả lại giá trị mới cho bạn - và nó là nguyên tử (giống như hầu hết / tất cả các lệnh Redis), vì vậy bạn không cần phải lo lắng về các vấn đề phân luồng. Vì vậy, các bước của bạn sẽ giống như sau:
- ĐẶT phím tăng.
- Khi bạn muốn thêm một giá trị, hãy INCR khóa và ĐẶT giá trị mới của bạn bằng cách sử dụng giá trị INCR được trả về.
- INCR tại thời điểm này đã tăng giá trị của khóa gia tăng, vì vậy mọi lần chèn giá trị lặp lại sẽ sử dụng số "tiếp theo".
Nếu bạn muốn lưu trữ một danh sách các mục có thể được tra cứu theo chỉ mục, bạn có thể muốn làm điều gì đó như sau (trong mã giả lập trình):
// When you initialize your database for the first time.
SET index "0"
// When you want to insert a new item:
INCR index
SET myList:(index value) "My Value"
// When you want to retrieve an item, and you have the index for it:
GET myList:(index value)
Trong ví dụ này, tôi giả sử rằng trong chương trình của bạn, bạn đang theo dõi các giá trị do INCR trả về. Giá trị INCR trả về sẽ là chỉ số mà bạn chèn mặt hàng mới, cũng như chỉ mục mà bạn sẽ tra cứu mặt hàng của mình sau này. Vì vậy, trong mã ví dụ của tôi, hãy thay thế (giá trị chỉ mục) bằng giá trị được lưu trữ mà bạn nhận lại từ INCR (cách bạn thực hiện điều này phụ thuộc vào ngôn ngữ lập trình bạn đang sử dụng).
Lưu ý rằng điều này KHÔNG cho phép xóa các mục ở giữa, thông qua DEL myList:(index value)
, bởi vì bạn đang theo dõi chỉ mục cuối cùng với index
, vì vậy, ngay cả khi một mục bị xóa, chỉ mục cuối cùng sẽ vẫn giữ nguyên - điều này hoạt động rất giống với các trường "tăng tự động" trong hầu hết các máy chủ SQL.
Bạn thực sự không muốn sử dụng bộ cho việc này; các bộ vốn dĩ không có thứ tự, và chúng không thực sự được tạo ra để tra cứu mọi thứ bằng "chìa khóa" - các mục trong một bộ thậm chí không thực sự có chìa khóa. Tập hợp hữu ích hơn cho các hoạt động tập hợp khác mà bạn có thể thực hiện trên chúng, như SINTER hoặc SDIFF.