Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Redis

Làm chủ Redis CRUD với Jedis: Quản trị Hash trong Java

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách thực hiện các thao tác CRUD trên một giá trị hash sử dụng thư viện Jedis.

Thư viện Jedis

Jedis là thư viện client Java cho kho dữ liệu Redis. Nó nhỏ gọn, rất dễ sử dụng, và tương thích hoàn toàn với Redis 2.8.x, 3.x.x và các phiên bản mới hơn. Bạn có thể tìm thêm thông tin về thư viện Jedis tại đây.

Giá trị Hash (Hash Value)

Hash là một bản đồ (map) các cặp field-value (trường-giá trị), có thể dùng để biểu diễn kiểu đối tượng như object Java. Trong Redis, hash có thể được lưu trữ làm một giá trị và nhiều lệnh Redis khác nhau được dùng để lưu trữ, quản lý và truy xuất giá trị hash được lưu trong database Redis. Bạn có thể tìm thêm thông tin về các lệnh Hash tại đây.

Thiết lập dự án (Project Setup)

Tạo một dự án Maven đơn giản trong IDE yêu thích và thêm dependency sau vào file pom.xml:

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.0.1</version>
</dependency>

Để lấy phiên bản mới nhất của thư viện Jedis, hãy xem trang này.

Cài đặt Redis

Bạn sẽ cần cài đặt phiên bản mới nhất của Redis. Xem trang này để biết thêm thông tin về cài đặt Redis.

Kết nối Jedis

Tạo một đối tượng Jedis (redis.clients.jedis.Jedis) để kết nối code Java của bạn với Redis.

Jedis jedis = new Jedis();

Nếu bạn đã khởi động một dịch vụ Redis trên máy local và cổng mặc định (6379), constructor mặc định sẽ hoạt động tốt. Ngược lại, bạn phải truyền đúng URL host và số cổng làm đối số vào constructor.

Tạo & Thiết lập giá trị trường (Create & Set Field's Value)

Có ba phương thức để thiết lập giá trị liên kết với trường chứa bên trong giá trị hash:

  1. hset: Thiết lập giá trị được chỉ định cho trường tương ứng trong giá trị hash. Nếu trường đã tồn tại, giá trị của nó bị ghi đè. Nếu khóa không tồn tại, khóa mới chứa hash được tạo trước khi set.
    /* Chèn trường name vào <hash-1> */
    jedis.hset("hash-1", "name", "john");
    /* Chèn trường name vào <hash-2> (dạng byte array) */
    jedis.hset("hash-2".getBytes(), "name".getBytes(), "john".getBytes());
  2. hsetnx: Thiết lập giá trị cho trường trong hash, chỉ nếu trường không tồn tại. Nếu trường đã tồn tại, thao tác không có tác dụng. Nếu khóa không tồn tại, khóa mới chứa hash được tạo.
    /* Chèn trường name vào <hash-1> */
    jedis.hsetnx("hash-1", "name", "john");
    /* Chèn trường age vào <hash-2> */
    jedis.hsetnx("hash-2".getBytes(), "age".getBytes(), "23".getBytes());
  3. hmset: Thiết lập các giá trị cho các trường tương ứng (nhiều cặp field/value) trong hash. Nếu trường đã tồn tại, giá trị bị ghi đè. Nếu khóa không tồn tại, khóa mới chứa hash được tạo.
    /* Chèn trường name và age vào <hash-1> */
    Map<String, String> map = new HashMap<String, String>();
    map.put("name", "john");
    map.put("age", "23");
    jedis.hmset("hash-1", map);

Lấy giá trị trường (Get Field's Value)

Có hai phương thức để lấy giá trị liên kết với trường chứa bên trong hash:

  1. hget: Trả về giá trị liên kết với một trường đơn lẻ chứa bên trong hash.
    /* Lấy giá trị trường name trong <hash-1> */
    jedis.hget("hash-1", "name");
  2. hmget: Trả về giá trị liên kết với một hoặc nhiều trường chứa bên trong hash.
    /* Lấy giá trị trường name và age trong <hash-1> */
    jedis.hmget("hash-1", "name", "age");

Kích thước (Size)

Phương thức hlen dùng để lấy số lượng trường chứa trong giá trị hash được lưu tại một khóa.

/* Trả về số trường trong <hash-1> */
jedis.hlen("hash-1");

Xóa (Delete)

Phương thức hdel dùng để xóa một hoặc nhiều trường từ giá trị hash được lưu tại một khóa.

/* Xóa trường name và age khỏi <hash-1> */
jedis.hdel("hash-1", "name", "age");
/* Xóa trường name và age khỏi <hash-2> */
jedis.hdel("hash-2".getBytes(), "name".getBytes(), "age".getBytes());

Kiểm tra sự tồn tại của trường (Check Field Existence)

Phương thức hexists dùng để kiểm tra xem trường được chỉ định có phải là thành viên của hash hay không.

/* Kiểm tra name có phải thành viên của <hash-1> không */
jedis.hexists("hash-1", "name");
/* Kiểm tra name có phải thành viên của <hash-2> không */
jedis.hexists("hash-2".getBytes(), "name".getBytes());

Lấy tất cả (Get All)

Phương thức hgetall dùng để lấy tất cả các trường và giá trị liên kết của chúng chứa trong giá trị hash được lưu tại một khóa.

/* Trả về tất cả trường và giá trị từ <hash-1> */
jedis.hgetAll("hash-1");
/* Trả về tất cả trường và giá trị từ <hash-2> */
jedis.hgetAll("hash-2".getBytes());

Lấy tất cả Keys (Get All Keys)

Phương thức hkeys dùng để lấy tên của tất cả các trường chứa trong giá trị hash được lưu tại một khóa.

/* Trả về tên tất cả trường từ <hash-1> */
jedis.hkeys("hash-1");
/* Trả về tên tất cả trường từ <hash-2> */
jedis.hkeys("hash-2".getBytes());

Lấy tất cả Values (Get All Values)

Phương thức hvals dùng để lấy tất cả giá trị của các trường chứa trong giá trị hash được lưu tại một khóa.

/* Trả về tất cả giá trị từ <hash-1> */
jedis.hvals("hash-1");
/* Trả về tất cả giá trị từ <hash-2> */
jedis.hvals("hash-2".getBytes());

Tài liệu tham khảo:

  1. Tài liệu lệnh Hash

Trên đây là tất cả về cách thực hiện thao tác CRUD trên giá trị hash sử dụng thư viện Jedis. Nếu bạn thấy hữu ích, hãy chia sẻ suy nghĩ của bạn trong phần bình luận và lan tỏa cho người khác nhé.