- Redis
- Image Redis
- Sử dụng redis-cli
- Một số lệnh Redis
- Sử dụng Redis với PHP
- Sử dụng Redis với C# NET Core
- Sử dụng Redis với Java
Giới thiệu Redis, cài đặt và cấu hình
Redis (REmote DIctionary Server), nó cho phép tạo ra một Server có chức năng dùng bộ nhớ để lưu trữ dữ liệu (giống như Memcached), bên cạnh đó nó có cơ chế định kỳ lưu trữ dữ liệu bộ nhớ vào đĩa để phục hồi lại nếu có lỗi (tắt đột ngột ...). Redis có ưu điểm là tốc độ, an toàn (có cơ chế xác thực), nên nó được dùng làm cache cho các ứng dụng web, để lưu trữ dữ liệu cho các ứng dụng cần sự truy vấn trả về nhanh chóng ...
Dữ liệu lưu trữ ở dạng cặp key/value
, với giá trị lưu trữ là các chuỗi, danh sách, tập hợp.
Mặc định Server Redis lắng nghe ở cổng 6379
có nhiều thư viện hỗ trợ kết nối cho các ngôn ngữ như
PHP, C#, Java ...
Để cài đặt trên CentOS gõ lệnh
yum install redis
Để cài đặt trên Ubuntu
apt-get install redis-server
Các lệnh để quản lý Server Redis gồm có kích hoạt tự động chạy, khởi chạy, khởi động lại có thể sử dụng như
systemctl enable redis
systemctl start redis
systemctl restart redis
File cấu hình ở đường dẫn /etc/redis.conf
, trong đó cấu hình cơ bản gồm có điều chỉnh bind và port
(mặc định chọn port 6379),
nếu chỉ để dịch vụ local kết nối thì để
bind 127.0.0.1 port 6379
Nếu cho kết nối qua mạng để
bind 0.0.0.0 port 6379
Nếu sử dụng unix socket (dịch vụ kết nối trên một máy), thì tạo cấu hình nó tạo file sock theo đường dẫn chỉ định
port 0 unixsocket /tmp/redis.sock unixsocketperm 777
Mỗi khi thay đổi cấu hình cần khởi động lại redis theo lệnh phía trên, ngoài ra còn có thể thiết lập bảo mật bằng cách đặt password
requirepass yourpass
Trong phần này để nhanh chóng có Server Redis sẽ hướng dẫn dùng Docker để chạy Server Redis, ứng dụng nó làm cache lưu trữ Session của PHP, cũng như thực hiện kết nối đến nó từ PHP, Java, C# với NET CORE 3
Image redis trên docker
Trên docker có Image chính thức redis, có thể tải về phiên bản phù hợp muốn sử dụng, ví dụ lấy về phiên bản cuối dùng lệnh docker
docker pull redis
Một cách nhanh chóng để có ngay Server Redis trên một container đặt tên là myredis
,
từ ngoài truy cập được qua cổng 6379
thì thực hiện lệnh docker tạo/chạy container sau:
docker run --name myredis -p 6379:6379 -d redis
Từ đây đã có Server Redis, chỉ việc kết nối và sử dụng tùy theo ngôn ngữ lập trình của bạn!
Cấu hình riêng chạy Server Redis
Image Redis không có trong nó file cấu hình, nó sử dụng các cấu hình mặc định. Tuy nhiên nhiều trường hợp muốn thiết lập các cấu hình thì cần biên tập file cấu hình rồi yêu cầu chạy với file cấu hình đó.
Ví dụ file cấu hình tên redis.conf
lưu ở thư mục hiện tại tức đường dẫn
$(pwd)/redis.conf
(hoặc đường dẫn tuyệt đối trên máy bạn), thì chỉ việc ánh xạ file
đó vào container và yêu cầu redis chạy với cấu hình đó.
docker run -p 6379:6379 -v $(pwd)/redis.conf:/redis.conf --name myredis redis redis-server /redis.conf
Hãy lấy file cấu hình redis.conf mặc định về, và chỉnh sửa các thiết lập tùy nhu cầu
Mở file redis.conf
, các cấu hình có thể xem xét tùy nhu cầu như:
Đặt password xác thực
Tìm đến dòng có chỉ thị requirepass
, nếu muốn đặt pass thì bỏ comment, ví dụ
đặt password xác thực là mypassword
Thiết lập lắng nghe kết nối
Mặc định Redis thiết lập chỉ cho phép các kết nối đến nó từ địa chỉ IP cùng máy (localhost),
nếu muốn chấp nhận kết nối từ mọi IP thì comment dòng bind 127.0.0.1
thành
# bind 127.0.0.1
Sửa #bind 127.0.0.1 ::1
thành
bind 0.0.0.0 ::1
requirepass mypassword
Từ đây, các truy vấn đọc, lưu dữ liệu vào Server Redis cần có password này để xác thực
Cấu hình lưu dữ liệu trên đĩa
Tìm đến chỉ thị appendonly
, nếu nó bằng yes
thì định kỳ sẽ đổ dữ liệu từ bộ nhớ
ra đĩa, nếu no
sẽ hủy chức năng này. Chọn no nếu cần tốc độ, và dữ liệu không quan trọng - ví dụ
như chỉ để cache trang web.
Ngoài ra nó còn có chỉ thị save
, sẽ tiến hành lưu dữ liệu tùy sự kiện. Trong file cấu hình
mặc định thì nó có sẵn ba dòng
save 900 1 save 300 10 save 60 10000
Ba dòng này có hai tham số cuối là thời-gian-giây
số-thay-đổi
, khi hai sự kiện đó xảy
ra thì tiến hành lưu ra đĩa. Ví dụ save 300 10
nếu sau 300 giây, có 10 sự thay đổi dữ liệu (cập nhật, thêm, xóa)
thì tiến hành lưu đĩa
Nếu không cần tính năng này, thì comment lại các dòng đó
Lưu ý, nếu các tính năng lưu bộ nhớ ra đĩa được chọn thì dữ liệu lưu ở đường dẫn /data
, bạn có thể
ánh xạ vào thư mực này để lưu dữ liệu cố định trên máy host.
Sử dụng redis-cli
redis-cli
là công cụ dòng lệnh có sẵn trong Redis, để kết nối và thực hiện các lệnh Redis
(giống mysql trong MySQL Server)
Giả sử để kết nối đến Redis Server ở địa chỉ IP (domain) thì gõ lệnh
redis-cli -h IP
Nếu vào dòng lệnh container đang chạy Redis Server và kết nối đến Redis trong container này thì không cần thiết
phải chỉ ra -h IP
hoặc muốn thì chỉ ra -h localhost
hoặc -h 127.0.0.1
Nếu muốn chỉ ra cổng kết kết thì dùng tham số -p cổng
redis-cli -h localhost -p 6391
Sau khi kết nối, thì nó ở dòng lệnh của Redis để thực hiện trực tiếp một số tác vụ mà không cần phụ thuộc ngôn ngữ lập trình nào, một số lệnh có thể tham khảo phần sau:
Một số lệnh Redis
Lệnh AUTH
Để nhập password xác thực, nếu Redis cấu hình cần xác thực
Lệnh SET
và GET
Lệnh SET để lưu một giá trị vào một key nào đó, lệnh GET thì để đọc giá trị lưu với key đó
Lệnh DBSIZE
Lệnh DBSIZE để kiểm tra xem có bao nhiêu key dữ liệu đang lưu trữ
Lệnh KEYS
Lệnh này hiện thị tất cả các key
Lệnh DELETE
Lệnh DELETE để xóa một key
DELETE mykey
Lệnh FUSHALL
Xóa tất cả các key trong Redis Server
Sử dụng Redis với PHP
Để PHP có khả năng truy cập Redis Server nó cần cài đặt PHP Extension Redis - PHP Extension Redis
Có thể dùng lệnh pecl để cài
pecl install redis
Sau đó trong php.ini thêm cấu hình nạp extension này
extension=redis
Sử dụng Redis để lưu phiên làm việc Session PHP
Các Session PHP mặc định lưu trên đĩa, có thể thiết lập lưu trong Redis để tăng tốc PHP. Mở php.in
thêm vào cấu hình sau:
session.save_handler = redis session.save_path = "tcp://192.168.1.5:6379?auth=mypassword" #session.save_path = "/tmp/redis.sock"
Nếu không có đặt password thì bỏ tham số ?auth=mypassword
đi, thay 192.168.1.5:6379
bằng địa
chỉ IP và cổng chính xác của Redis
Sử dụng với code PHP
Khi cài đặt Extension PHP, thì nó cung cấp sẵn các lớp để thực hiện kết nối đến Redis, ví dụ
<?php // Khởi tạo lớp $redis = new Redis(); // Thiết lập kết nối $redis->connect('192.168.1.5', 6379); // dùng sock // $redis->connect('/tmp/redis.sock'); // Nhập password nếu cần $redis->auth("mypassword"); // Kiểm tra xem Server Redis hoạt động không if ($redis->ping() !== true) { echo "Redis Server not running ..."; die; } // Lưu một giá trị vào key = hello $redis->set("hello", "Xin chào Redis"); // Đọc một giá trị lưu trong key $vl = $redis->get("hello"); // Xóa đi một key $redis->delete("mykey"); // Lấy về mảng tất cả các key $keys = $redis->keys("*"); // Lấy về mảng các key theo mẫu $keys = $redis->keys("product*"); // Xóa tất cả các key $redis->flushAll();
Sử dụng Redis với C#
Có thể sử dụng thư viện Client StackExchange.Redis, tích hợp bằng lệnh:
dotnet add package StackExchange.Redis --version 2.0.601
Ví dụ, sử dụng kết nối với C#, đọc ghi dữ liệu vào Redis
using System; using StackExchange.Redis; namespace redis { class Program { static void Main(string[] args) { // Tạo kết nối ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("192.168.1.5:6379,password=mypassword"); // Lấy DB IDatabase db = redis.GetDatabase(1); // Ping thử if (db.Ping().TotalSeconds > 5 ) { throw new TimeoutException("Server Redis không hoạt động"); } // Lưu dữ liệu db.StringSet("hello", "Xin chào Redis C#"); // Đọc lại dữ liệu var vl = db.StringGet("hello"); Console.WriteLine(vl); // Xóa một key db.KeyDelete("mykey"); // Lấy tất cả các key IServer server = redis.GetServer("192.168.1.5:6379"); var keys = server.Keys(pattern: "*"); foreach (var k in keys) { Console.WriteLine(k); } // Xóa tất cả các key server.FlushAllDatabases(); } } }
Sử dụng Redis với Java
Đối với Java có thể sử dụng thư viện client, Jedis,
hãy tải file jar cho phiên bản muốn dùng, ví dụ nếu chọn 3.1.0 thì tải về được file jar
jedis-3.1.0.jar
, file này sẽ nạp vào dự án Java của bạn!
Ở hướng dẫn này, sẽ tích hợp và sử dụng jedis-3.1.0.jar
trong một dự án Java cơ bản,
sử dụng với Visual Studio Code, hãy tham khảo Tạo dự án Java với VSC để tạo ra một dự án đặt tên là redis
Trong thư mục dụ án, tạo ra một thư mục lib
, copy file jar thư viện vào đó
1 (xem hình trên)
Mở file .classpath
thêm vào dòng nạp thư viện
2
<classpathentry exported="true" kind="lib" path="lib/jedis-3.1.0.jar"/>
Kiểm tra mục JAVA DEPENDENCIES
có xuất hiện các thành phần của jedis là thành công
Ví dụ sử dụng:
package app; // nạp thư viện vào code import redis.clients.jedis.Jedis; public class App { public static void main(String[] args) throws Exception { // Tạo kết nối Jedis jedis = new Jedis("192.168.1.5", 6379); jedis.auth("mypassword"); //Kiểm tra if (!jedis.ping().equals("PONG")) { System.out.println("Redis Server không trả lời"); } // Lưu một giá trị vào key = hello jedis.set("hello", "Xin chào Redis"); // Lưu một giá trị vào key = hello String s = jedis.get("hello"); System.out.println(s); // Xóa một key jedis.del("mykey"); // Lấy tất các key var keys = jedis.keys("*"); // Xóa tất cả các key jedis.flushAll(); jedis.close(); } }