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

Làm chủ Redis List CRUD với Jedis: Hướng dẫn Java hoàn chỉnh

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ị list (danh sách) 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ị List (List Value)

List là một dãy các chuỗi (strings) được sắp xếp theo thứ tự chèn (insertion order). Trong Redis, list có thể được lưu trữ làm một giá trị và nhiều lệnh Redis khác nhau có thể dùng để lưu trữ, quản lý và truy xuất giá trị list được lưu trong database Redis. Bạn có thể tìm thêm thông tin về các lệnh List 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 & Thêm (Create & Add)

Thư viện Jedis cung cấp một số phương thức để tạo và chèn phần tử vào giá trị list. Một số phương thức quan trọng như sau:

  1. lpush: Chèn một hoặc nhiều phần tử vào đầu (head) của giá trị list. Nếu list không tồn tại, nó trước tiên tạo khóa chứa list rỗng trước khi chèn.
    /* Tạo list mới và chèn string a, b, c vào đầu */
    jedis.lpush("list-1", "a", "b", "c");
    /* Tạo list mới và chèn byte array của string 1, 2 vào đầu */
    jedis.lpush("list-2".getBytes(), new BigInteger("1").toByteArray(), new BigInteger("2").toByteArray());
  2. rpush: Chèn một hoặc nhiều phần tử vào cuối (tail) của giá trị list. Nếu list không tồn tại, nó trước tiên tạo khóa chứa list rỗng trước khi chèn.
    /* Tạo list mới và chèn string a, b, c vào cuối */
    jedis.rpush("list-3", "a", "b", "c");
    /* Tạo list mới và chèn byte array của string 1, 2 vào cuối */
    jedis.rpush("list-4".getBytes(), new BigInteger("1").toByteArray(), new BigInteger("2").toByteArray());
  3. lpushx: Chèn một hoặc nhiều phần tử vào đầu list chỉ nếu list đã tồn tại.
    /* Chèn string d, e vào đầu list <list-1> */
    jedis.lpushx("list-1", "d", "e");
    /* Chèn string 3, 4 vào đầu list <list-2> */
    jedis.lpushx("list-2".getBytes(), new BigInteger("3").toByteArray(), new BigInteger("4").toByteArray());
  4. rpushx: Chèn một hoặc nhiều phần tử vào cuối list chỉ nếu list đã tồn tại.
    /* Chèn string d, e vào cuối list <list-3> */
    jedis.rpushx("list-3", "d", "e");
    /* Chèn string 3, 4 vào cuối list <list-4> */
    jedis.rpushx("list-4".getBytes(), new BigInteger("3").toByteArray(), new BigInteger("4").toByteArray());

Xóa & Trả về (Remove & Return)

Có hai phương thức để thực hiện thao tác pop kiểu stack (stack-like pop) trên giá trị list:

  1. lpop: Xóa và trả về phần tử đầu tiên của giá trị list.
    /* Xóa và trả về 1 phần tử từ đầu <list-1> */
    jedis.lpop("list-1");
    /* Xóa và trả về 1 phần tử từ đầu <list-2> */
    jedis.lpop("list-2".getBytes());
  2. rpop: Xóa và trả về phần tử cuối cùng của giá trị list.
    /* Xóa và trả về 1 phần tử từ cuối <list-3> */
    jedis.rpop("list-3");
    /* Xóa và trả về 1 phần tử từ cuối <list-4> */
    jedis.rpop("list-4".getBytes());

Độ dài (Length)

Phương thức llen dùng để lấy độ dài của giá trị list được lưu tại một khóa.

/* Trả về kích thước <list-1> */
jedis.llen("list-1");
/* Trả về kích thước <list-2> */
jedis.llen("list-2".getBytes());

Xóa (Delete)

Phương thức lrem dùng để xóa tất cả các lần xuất hiện của một phần tử từ giá trị list (theo count).

/* Xóa 1 lần xuất hiện của phần tử a khỏi <list-1> */
jedis.lrem("list-1", 1, "a");
/* Xóa 2 lần xuất hiện của phần tử 1 khỏi <list-2> */
jedis.lrem("list-2".getBytes(), 2, "1".getBytes());

Lấy theo chỉ số (Get By Index)

Phương thức lindex dùng để lấy một phần tử bằng đối số chỉ số (index) của nó.

/* Lấy phần tử tại chỉ số 3 từ <list-1> */
jedis.lindex("list-1", 3);
/* Lấy phần tử tại chỉ số 2 từ <list-2> */
jedis.lindex("list-2".getBytes(), 2);

Cập nhật theo chỉ số (Update By Index)

Phương thức lset dùng để cập nhật một phần tử bằng đối số chỉ số (index) của nó.

/* Thiết lập phần tử g tại chỉ số 3 từ <list-1> */
jedis.lset("list-1", 3, "g");
/* Thiết lập phần tử 6 tại chỉ số 2 từ <list-2> */
jedis.lset("list-2".getBytes(), 2, "6".getBytes());

Lấy nhiều phần tử (Get Multiple Elements)

Phương thức lrange dùng để lấy một hoặc nhiều phần tử từ giá trị list, được xác định bởi các đối số offset.

/* Trả về phần tử từ chỉ số 1 đến 5 từ <list-1> */
jedis.lrange("list-1", 1, 5);
/* Trả về tất cả phần tử từ <list-2> */
jedis.lrange("list-2".getBytes(), 0, -1);

Tài liệu tham khảo:

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

Trên đây là tất cả về cách thực hiện thao tác CRUD trên giá trị list 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é.