Redis - Hướng dẫn cài đặt một server Redis
Redis là hệ thống lưu trữ key-value với rất nhiều tính năng và được sử dụng rộng rãi và rất mạnh mẽ, thường được dân chuyên nghiệp gọi với cái tên rất ngầu là in-memory key-value store. Redis nổi bật bởi việc hỗ trợ nhiều cấu trúc dữ liệu cơ bản (hash, list, set, sorted set, string), đồng thời cho ...
Redis là hệ thống lưu trữ key-value với rất nhiều tính năng và được sử dụng rộng rãi và rất mạnh mẽ, thường được dân chuyên nghiệp gọi với cái tên rất ngầu là in-memory key-value store. Redis nổi bật bởi việc hỗ trợ nhiều cấu trúc dữ liệu cơ bản (hash, list, set, sorted set, string), đồng thời cho phép scripting bằng ngôn ngữ lua. Bên cạnh lưu trữ key-value trên RAM với hiệu năng cao, redis còn hỗ trợ lưu trữ dữ liệu trên đĩa cứng (persistent redis) cho phép phục hồi dữ liệu khi gặp sự cố. Trong thời buổi công nghệ vừa phải nhanh và an toàn ( không phải quá nhanh quá nguy hiểm nhé !) thì việc sử dụng Redis trở trành trào lưu rất hot gần đây. Và tất nhiên, không nằm ngoài xu hướng này thì mình cũng học đòi tìm hiểu xem cách sử dụng nó như thế nào .(ahihi)
Mình sẽ thực hiện việc cài đặt trên Ubuntu server 16.04. Hiện tại, muốn cài đặt Redis thì chúng ta phải build từ source code của nó, nên trước tiên mình sẽ install các package cần thiết cho việc compile source code.
$ sudo apt-get update $ sudo apt-get install build-essential tcl
Tiếp đến tìm chỗ lưu source trước khi compile, ở đây mình sẽ download source code của Redis và cho vào /tmp nhé.
$ cd /tmp $ curl -O http://download.redis.io/redis-stable.tar.gz
Sau khi download về thì giải nén ra và cd vào trong redis-stable
$ tar -xzvf redis-stable.tar.gz $ cd redis-stable
Kế đến thì combo 3 bước compile source code =))
$ make $ make test $ make install
Sau khi cài đặt xong thì bắt đầu config. Khác việc việc cài đặt thông thường, redis compile từ source không có sẵn ở /etc/redis, vì vậy mình phải tự tạo thôi.
$ sudo mkdir /etc/redis
Sau đó thì copy mấy cái config mặc định của Redis vào.
$ sudo cp /tmp/redis-stable/redis.conf /etc/redis
Ok, bây giờ thì mở lên xem thử nó có gì rồi.
$ sudo nano /etc/redis/redis.conf
Đầu tiên chúng ta sẽ chỉ định một supervised cho Redis, mặc định config này sẽ là no . Ở ubuntu16 thì sử dụng hệ thống systemd init, nên chúng ta sẽ cho supervised của redis là 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 . . .
Tiếp theo, tìm đến phần khai báo dir. Tùy chọn này chỉ định thư mục mà Redis sẽ sử dụng để đổ dữ liệu liên tục. Chúng ta cần chọn một vị trí mà Redis sẽ có quyền ghi và người dùng bình thường không thể xem được. Ở đây mình khai luôn là /var/lib/redis nhé.
. . . # 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 . . .
Sau đó nhớ save lại.
Vì Redis được compile từ source , nên thường là sẽ không có Unit file trong systemd, bây giờ chúng ta sẽ tạo 1 file như thế để tiện cho việc quản lý tiến trình của Redis (cụ thể là start/stop cho nó nhanh).
$ sudo nano /etc/systemd/system/redis.service
Nội dung file trên sẽ như sau :
[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
- Trường [Unit]: Mô tả service và xác định yêu cầu service netwoking phải có sẵn trước khi Redis được start.
- Trường `[Service] : Chỉ định hành vi của service , và các user/group được phép chạy service. Kèm theo đó là khai báo file cấu hình redis của bạn nằm ở đâu.
- Trường [Install] : Không hiểu lắm =)). Đại loại như khai báo phần đính kèm khi start redis :v . Nói chung phần này không hiểu @@ , ai hiểu giải thích dùm mình @@
Ở mấy phần trên chỉ định user và group start Redis thì bây giờ phải tạo user thôi :v
$ sudo adduser --system --group --no-create-home redis
Tạo thêm /var/lib/redis như trong khai báo config ở trên nhé :
sudo mkdir /var/lib/redis
Phân quyền cho thư mục mới tạo .
$ sudo chown redis:redis /var/lib/redis $ sudo chmod 770 /var/lib/redis
Nãy vừa tạo file systemd cho Redis, giờ xài thử coi được không nhé =))
$ sudo systemctl start redis
Check status các thứ :
$ sudo systemctl status redis ● 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 . . .
Test hoạt động của Redis .
Test xem Redis có hoạt động hay không, gõ redis-cli, bạn sẽ vào được console của redis.
$ redis-cli
Console trông như này :
127.0.0.1:6379> ping
Nó sẽ đáp lại =))
PONG
Bây giờ sẽ thử set 1 key vào nhé , nó sẽ báo OK.
127.0.0.1:6379> set test "Hello, this is Redis" OK
Bây giờ thử gọi key vừa set nhé.
127.0.0.1:6379> get test "Hello, this is Redis"
Nó đã lưu key bạn vừa set, bây giờ thử restart lại coi nó còn lưu không .
$ sudo systemctl restart redis
Thử lại :
$ redis-cli 127.0.0.1:6379> get test "Hello, this is Redis"
Ok, vậy là xong, nó vẫn chạy =)) Cuối cùng thì setting cho Redis start khi server reboot lại nhé.
$ sudo systemctl enable redis
Chúng ta đã cài đặt thành công Redis, còn việc xài và sử dụng như thế nào thì còn tùy mục đích của các bạn. Thực tế thì mình chỉ nghịch đến đây thôi chứ cũng chưa biết xài vào việc gì. Bao giờ có việc cần dùng thì mình sẽ chia sẻ thêm cho các bạn biết ứng dụng thực tế nó như thế nào để dễ hiểu hơn nhé