Tớ đã cài đặt và sử dụng Redis Cache trên Ubuntu 16.04 như thế nào

Hiện nay có rất nhiều loại cơ sở dữ liệu như là MySQL, SQL Server, MongoDB, ..... bla bla, trong đó có Redis được rất nhiều dev sử dụng vào dự án, vậy thì Redis là gì, nó có tính năng gì nổi bật, cài đặt và áp dụng nó vào trong project như thế nào sẽ là chủ đề của bài viết này. yo .... bắt đầu nào

Redis là gì ?

Redis thuộc loại NoSQL, lưu trữ dưới dạng key => value hỗ trợ nhiều kiểu dữ liệu như strings, hashes, lists, sets, sorted. Redis lưu trữ trên RAM hoặc trên đĩa cứng cho phép bạn phục hồi dữ liệu khi hệ thống xảy ra sự cố.

Redis còn phép sao chép, đồng bộ từ CSDL Redis khác và thêm nữa tính năng cluster cũng đang được phát triển cho phép cân bằng tải (load balancing), bạn có thể tham khảo tại đây .

Ưu điểm

  • Nhắc tới Redis thì trước tiên phải nói về tốc độ, Redis hỗ trợ thêm mới, cập nhật, xoá dữ liệu một cách nhanh chóng.
  • Lưu trữ dữ liệu dạng KEY-VALUE nên rất dễ để sử dụng.
  • Dữ liệu được lưu trữ trên RAM giúp việc truy xuất dữ liệu một cách nhanh chóng. Ngoài ra bạn có thể cấu hình để Redis có thể lưu trữ dữ liệu trên ổ cứng.
  • Set thời gian sống cho key.
  • Hỗ trợ Queue(hàng đợi) thông qua cơ chế PUB/SUB, chúng ta có thể dùng Redis để làm hệ thống queue cho website xử lý tuần tự từng request.

Hỗ trợ nhiều kiểu dữ liệu như :

-STRING: string, integer hoặc float. Redis có thể làm việc với cả string, từng phần của string, cũng như tăng/giảm giá trị của integer, float.

  • LIST: danh sách liên kết của các strings. Redis hỗ trợ các thao tác push, pop từ cả 2 phía của list, trim dựa theo offset, đọc 1 hoặc nhiều items của list, tìm kiếm và xóa giá trị.

  • SET: tập hợp các string (không được sắp xếp). Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, kiểm tra sự xuất hiện của phần tử trong tập hợp. Ngoài ra Redis còn hỗ trợ các phép toán tập hợp, gồm intersect/union/difference.

  • HASH: lưu trữ hash table của các cặp key-value, trong đó key được sắp xếp ngẫu nhiên, không theo thứ tự nào cả. Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, cũng như đọc tất cả giá trị.

  • ZSET (sorted set): là 1 danh sách, trong đó mỗi phần tử là map của 1 string (member) và 1 floating-point number (score), danh sách được sắp xếp theo score này. Redis hỗ trợ thao tác thêm, đọc, xóa từng phần tử, lấy ra các phần tử dựa theo range của score hoặc của string.

Cách cài đặt

1. chuẩn bị

Để có được phiên bản mới nhất của Redis, chúng ta sẽ biên dịch và cài đặt phần mềm từ source và cần đáp ứng các phụ thuộc để có thể biên dịch phần mềm. Để làm điều này, chúng ta có thể cài đặt gói meta thiết yếu từ kho lưu trữ Ubuntu. Chúng ta cũng sẽ tải xuống gói tcl sử dụng để kiểm tra các tệp nhị phân của mình.

$ sudo apt-get update
$ sudo apt-get install build-essential tcl

Download, biên dịch, và cài đặt Redis

Cài đặt và giải nén

Di chuyển tới thư mục /tmp :

$ cd /tmp

Download bản stable redis mới nhất, bạn cũng có thể tải về tại đây :

$ curl -O http://download.redis.io/redis-stable.tar.gz

Giải nén bằng cách gõ:

$ tar xzvf redis-stable.tar.gz

Tiếp tục di chuyển tới thư mục Redis vừa mới giải nén:

$ cd redis-stable

Build và cài đặt Redis

Chúng ta cần biên dịch Redis binaries bằng lệnh:

$ make

Sau khi nhị phân được biên dịch, chạy bộ test để chắc chắn không có lỗi xảy ra:

$ make test

Nếu xảy ra lỗi:

!!! WARNING The following tests failed:

*** [err]: With min-slaves-to-write: master not writable with lagged slave in tests/integration/replication-4.tcl
Expected 'NOREPLICAS*' to equal or match 'OK'
Cleanup: may take some time... OK
Makefile:242: recipe for target 'test' failed
make[1]: *** [test] Error 1
make[1]: Leaving directory '/tmp/redis-stable/src'
Makefile:6: recipe for target 'test' failed
make: *** [test] Error 2

thì bạn thử chạy lệnh như sau nhé:

$ make clean
$ make
$ make test

Tiếp đến là cài đặt

$ sudo make install

Cấu hình Redis

Chúng ta cần tạo thư mục cấu hình:

$ sudo mkdir /etc/redis

Copy nội dung từ một file cấu hình khác và xem nó có những gì :

$ sudo cp /tmp/redis-stable/redis.conf /etc/redis
$ sudo nano /etc/redis/redis.conf

Tìm tới dòng chứa supervised và thay đổi no thành systemd:

. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd

. . .

Tìm tiếp dir và thay đổi lại một chút, ở đây mình sử dụng /var/lib/redis :

. . .

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis

. . .

Lưu lại khi hoàn thành.

Tạo Redis systemd Unit File

Chúng ta sẽ tạo file để quản lí Redis process:

sudo nano /etc/systemd/system/redis.service

Và paste nội dung này vào:

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

Lưu và đóng file lại.

Tạo người dùng, group và thư mục

Tạo người dùng và group:

sudo adduser --system --group --no-create-home redis

Tạo thư mục redis tại var/lib/redis:

sudo mkdir /var/lib/redis

Khai báo người dùng:

$ sudo chown redis:redis /var/lib/redis

Tùy chỉnh lại permissions:

$ sudo chmod 770 /var/lib/redis

Chạy thử hoy :<

Start service và kiểm tra trạng thái redis bằng lệnh:

$ sudo systemctl start redis
$ sudo systemctl status redis

Nội dung hiện thị nên là như thế này:

Output
● redis.service - Redis Server
   Loaded: loaded (/etc/systemd/system/redis.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2016-05-11 14:38:08 EDT; 1min 43s ago
  Process: 3115 ExecStop=/usr/local/bin/redis-cli shutdown (code=exited, status=0/SUCCESS)
 Main PID: 3124 (redis-server)
    Tasks: 3 (limit: 512)
   Memory: 864.0K
      CPU: 179ms
   CGroup: /system.slice/redis.service
           └─3124 /usr/local/bin/redis-server 127.0.0.1:6379       

. . .

And......Yep , Test thôi, kết nối redis server với command-line client:

$ redis-cli

Nội dung của nó khi cài đặt thành công sẽ như thế này:

127.0.0.1:6379> 

Redis cung cấp cho bạn lệnh test ping:

127.0.0.1:6379> ping

Và sau đó các chế sẽ thấy:

Output
PONG

Bạn có thể gán và lấy giá trị thông qua lệnh setget. Với set thì sẽ là set KEY "Giá trị cần truyền vào", và get thì đơn giản chỉ là get KEY. Ví dụ:

127.0.0.1:6379> set test "Thanks you Bach for this post !"
Output:
OK
127.0.0.1:6379> get test
Output:
"Thanks you Bach for this post !"

Để thoát redis và trở lại shell:

127.0.0.1:6379> exit

Khởi động lại Redis:

$ sudo systemctl restart redis

Lần tới khi bạn muốn kết nối thì hãy nhớ sudo systemctl restart redis và chạy tiếp lệnh $ redis-cli nhé

Cho phép Redis được chạy khi khởi động máy

Ok, chúng ta có thể enable nó bằng lệnh:

$ sudo systemctl enable redis
Output
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /etc/systemd/system/redis.service.

Tổng kết

Trên đây là cách cài đặt Redis trên Ubuntu 16.04, chúc các bạn cài đặt thành công. Bài viết dựa trên hướng dẫn của digital ocean + Medium