Làm quen với Redis – cài đặt và code minh họa

Chào mừng các bạn đã trở lại với thachleblog, bài viết hôm nay mình sẽ giới thiệu về Redis, một công cụ được sử dụng như một database, cache và message broker. Thật thú vị phải không? Nào, chúng ta cùng bắt đầu nhé.

Giới thiệu chung

Redis (REmote DIctionary Server) là một open source (BSD licensed), in-memory data structure store (đại ý là cơ chế xử lý dữ liệu trên memory (nhằm tăng tốc) và lưu trữ trong disk như một database, các bạn có thể  xem thêm về in memory database tại đây). Qua đặc điểm trên thì Redis có khả năng được sử dụng như một database, cache và message broker (cớ chế pub/sub – xem thêm về cơ chế pub/sub tại đây). Nhờ cung cấp nhiều tính năng như  Pipelining (truyền nhiều command cùng lúc), Pub/Sub, Partitioning (cơ chế master slave), ưu điểm về tốc độ và dễ sử dụng, nên hiện tại Redis đang được sử dụng rộng rãi trong các ứng dụng, game với yêu cầu gọn nhẹ và tốc độ xử lý cao.

Đặc điểm

Lưu trữ data dưới dạng key – value, hỗ trợ lưu trữ các dạng dữ liệu:
String:
Screenshot from 2016-11-01 18-10-58.png
List:
Screenshot from 2016-11-01 18-11-40.png
Set:
screenshot-from-2016-11-01-18-11-59
Sort Set:
screenshot-from-2016-11-01-18-12-14
Hash: có thể sử dụng để lưu object
Screenshot from 2016-11-01 18-11-24.png
Hướng dẫn cài đặt Redis trên hệ điều hành Ubuntu
– sudo apt-get update
– sudo apt-get install redis-server
Sau khi cài đặt thành công, Redis sẽ được cài đặt trong thư mục /ect/redis. Ta có thể xem cấu hình cài đặt của Redis trong file .conf hoặc gõ redis-cli ->INFO để xem thông tin cấu hình. Cấu hình mặc định là server localhost và port 6379

Start server Redis: redis-server
Start sever thành công:

lam quen voi redis
Code minh họa sử dụng Redis
Class Account, dùng cấu trúc Hash để lưu trữ

  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package thach.le.redis.sample;
  7. /**
  8.  *
  9.  * @author thachlp
  10.  */
  11. public class Account {
  12. private String userName;
  13. private String passWord;
  14. public Account(String userName, String passWord) {
  15. this.userName = userName;
  16. this.passWord = passWord;
  17. }
  18. public String getUserName() {
  19. return userName;
  20. }
  21. public void setUserName(String userName) {
  22. this.userName = userName;
  23. }
  24. public String getPassWord() {
  25. return passWord;
  26. }
  27. public void setPassWord(String passWord) {
  28. this.passWord = passWord;
  29. }
  30. }

Class RedisSample demo cách sử dụng các kiểu dữ liệu trên Redis:

  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package thach.le.redis.sample;
  7.  
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.Set;
  13. import java.util.concurrent.CountDownLatch;
  14. import redis.clients.jedis.Jedis;
  15. import redis.clients.jedis.JedisPubSub;
  16. /**
  17.  *
  18.  * @author thachlp
  19.  */
  20. public class RedisSample {
  21. public static Map<String, String> putoMap(Account account) {
  22. Map<String, String> hash = new HashMap<>();
  23. hash.put("username", account.getUserName());
  24. hash.put("password", account.getPassWord());
  25. return hash;
  26. }
  27. public static void main(String[] args) throws InterruptedException {
  28. //Connecting to Redis server on localhost
  29. Jedis jedis = new Jedis("localhost");
  30.  
  31. System.out.println("Connection to server sucessfully");
  32. //check whether server is running or not
  33. System.out.println("Server is running: " + jedis.ping());
  34.  
  35. //redis string
  36. jedis.set("name", "Thach Le");
  37. System.out.println("String: " + jedis.get("name"));
  38.  
  39. //redis list
  40. jedis.lpush("fruits", "Banana");
  41. jedis.lpush("fruits", "Guava");
  42. jedis.lpush("fruits", "Apple");
  43. // Get the stored data and print it
  44. List list = jedis.lrange("fruits", 0, 3);
  45. for (int i = 0; i < list.size(); i++) {
  46. System.out.println("List: " + list.get(i));
  47. }
  48.  
  49. //redis hash
  50. Account account = new Account("thachlp", "thachlp");
  51. jedis.hmset("account", putoMap(account));
  52. Map<String, String> properties = jedis.hgetAll("account");
  53. System.out.println("Account: " + properties.get("username") + "/" + properties.get("password"));
  54.  
  55. //get data
  56. System.out.println("fish: " + jedis.get("fish"));
  57. jedis.pfmerge("fish", "temp");
  58. System.out.println("temp: " + jedis.get("temp"));
  59. System.out.println("HyperLoglog Count: " + jedis.pfcount("fish"));
  60. }
  61. }

Ta có thể dùng command để xem data đã được insert và lưu trữ  trong Redis hoặc xem bằng Redis Desktop Manager (xem cách cài đặt tại đây)

Kết quả data sau khi đã insert:

screenshot-from-2016-11-01-18-05-01
Vừa rồi là bài giới thiệu của mình về Redis, mình sẽ tiếp tục chia sẻ những kinh nghiệm, vấn đề trong quá trình sử dụng (nếu có :D), cảm ơn các bạn đã theo dõi. Rất mong nhận được ý kiến đóng góp của tất cả các bạn.
Xin cảm ơn

Còn rất rất nhiều các tính năng của Redis, các bạn có thể tham khảo thêm tại:
https://redislabs.com/Downloads/Redis-Labs-Do-You-Really-Know-108-Web.pdf
http://redis.io/