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

Nhận nhiều giá trị chính từ Redis

Thực hiện một vòng lặp trên các mục và truy cập đồng bộ từng phần tử không hiệu quả lắm. Với Redis 2.4, có nhiều cách khác nhau để thực hiện những gì bạn muốn:

  • bằng cách sử dụng lệnh sắp xếp
  • bằng cách sử dụng pipelining
  • bằng cách sử dụng các lệnh tham số khác nhau

Với Redis 2.6, bạn cũng có thể sử dụng Lua scripting, nhưng điều này không thực sự bắt buộc ở đây.

Nhân tiện, cấu trúc dữ liệu bạn đã mô tả có thể được cải thiện bằng cách sử dụng hàm băm. Thay vì lưu trữ dữ liệu người dùng trong các khóa riêng biệt, bạn có thể nhóm chúng trong một đối tượng băm.

Sử dụng lệnh sắp xếp

Bạn có thể sử dụng lệnh sắp xếp Redis để truy xuất dữ liệu trong một vòng.

redis> set users:1:name "daniel"
OK
redis> set users:1:age 24
OK
redis> set users:2:name "user2"
OK
redis> set users:2:age 24
OK
redis> sadd events:1:attendees users:1 users:2
(integer) 2
redis> sort events:1:attendees by nosort get *:name get *:age
1) "user2"
2) "24"
3) "daniel"
4) "24"

Sử dụng pipelining

Ứng dụng khách Ruby hỗ trợ pipelining (tức là khả năng gửi một số truy vấn tới Redis và đợi một vài câu trả lời).

keys = $redis.smembers("events:1:attendees")
res = $redis.pipelined do
   keys.each do |x|
      $redis.mget(x+":name",x+":age")
   end
end

Đoạn mã trên sẽ chỉ truy xuất dữ liệu trong hai vòng lặp.

Sử dụng lệnh tham số đa dạng

Lệnh MGET có thể được sử dụng để truy xuất một số dữ liệu trong một lần chụp:

redis> smembers events:1:attendees
1) "users:2"
2) "users:1"
redis> mget users:1:name users:1:age users:2:name users:2:age
1) "daniel"
2) "24"
3) "user2"
4) "24"

Chi phí ở đây cũng là hai khứ hồi. Điều này hoạt động nếu bạn có thể đảm bảo rằng số lượng khóa để lấy là có giới hạn. Nếu không, pipelining là một giải pháp tốt hơn nhiều.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis xuất bản / đăng ký:xem những kênh nào hiện được đăng ký

  2. Redis Serialization và Deserialization

  3. json.loads và Redis trong python 3.5

  4. Làm thế nào để cấu hình kết nối Redis với Rails 4, Puma và Sidekiq?

  5. Cơ sở dữ liệu Redis TTL