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ị địa lý (geo value) 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ị Geo (Geo Value)
Giá trị địa lý chứa tọa độ kinh độ và vĩ độ của một vị trí cụ thể trên Trái Đất. Trong Redis, các phần tử địa lý có thể được lưu trữ trong một giá trị sorted set tại một khóa và nhiều lệnh Redis khác nhau được dùng để lưu trữ, quản lý và truy xuất giá trị địa lý được lưu trong database Redis. Bạn có thể tìm thêm thông tin về các lệnh Geo 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)
Phương thức geoadd dùng để thêm một hoặc nhiều thành viên địa lý (geospatial member) vào giá trị địa lý (Sorted Set) được lưu trữ tại một khóa.
/* Chèn tọa độ Geo của London vào <geo-1> */
jedis.geoadd("geo-1", 51.5074, 0.1278, "London");
/* Chèn tọa độ Geo của London và Paris vào <geo-2> */
Map<String, GeoCoordinate> map = new HashMap<String, GeoCoordinate>();
map.put("London", new GeoCoordinate(51.5074, 0.1278));
map.put("Paris", new GeoCoordinate(48.8566, 2.3522));
jedis.geoadd("geo-2", map);
Lấy tọa độ Geo (Get Geo Coordinate)
Phương thức geopos dùng để lấy GeoCoordinate (kinh độ, vĩ độ) của một hoặc nhiều thành viên của giá trị địa lý (Sorted Set) được lưu trữ tại một khóa.
/* Trả về GeoCoordinate của London và Paris từ <geo-1> */
List geoCoordinates = jedis.geopos("geo-1", "London", "Paris");
Lấy GeoHash (Get GeoHash)
Phương thức geohash dùng để lấy chuỗi Geohash hợp lệ của một hoặc nhiều thành viên của giá trị địa lý (Sorted Set) được lưu trữ tại một khóa.
/* Trả về chuỗi GeoHash của London và Paris từ <geo-1> */
List geoStrings = jedis.geohash("geo-1", "London", "Paris");
Khoảng cách giữa hai thành viên (Distance between two members)
Phương thức geodist dùng để lấy khoảng cách giữa hai thành viên của giá trị địa lý (Sorted Set) được lưu trữ tại một khóa theo đơn vị được chỉ định. Đơn vị có thể là m (mét), km (kilômét), mi (dặm), ft (feet).
/* Trả về khoảng cách London & Paris tính bằng kilômét từ <geo-1> */
Double distance = jedis.geodist("geo-1", "London", "Paris", GeoUnit.KM);
Tài liệu tham khảo:
- Tài liệu lệnh Geo
Trên đây là tất cả về cách thực hiện thao tác CRUD trên giá trị địa lý 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é.