前言
Redis可好用了,速度快,支援的資料型別又多,最主要的是現在可以用來向量搜尋了。
本文記錄一下官方提供的 redis-stack 部署和配置過程。
關於 redis-stack
redis-stack installs a Redis server with additional database capabilities and the RedisInsight.
redis 提供了倆映象
redis/redis-stack
contains both Redis Stack server and RedisInsight. This container is best for local development because you can use RedisInsight to visualize your data.redis/redis-stack-server
provides Redis Stack but excludes RedisInsight. This container is best for production deployment.
區別就是有沒有附帶 RedisInsight 這個Web管理介面。
我需要使用Web管理介面,所以本文選擇的是 redis-stack 這個映象。
部署
老規矩,使用 docker-compose 部署。
把 Redis 的 6379 埠和 RedisInsight 的 8001 埠對映出來。
version: '3.4'
services:
redis:
image: redis/redis-stack:latest
container_name: redis-stack
restart: always
ports:
- "6379:6379"
- "8001:8001"
volumes:
- ./data:/data
networks:
default:
name: redis-stack
推薦使用 Portainer 來部署和管理映象。
這裡的持久化是透過對映 dump.rdb 檔案。
安全與ACL命令
在Redis6.0之前的版本中,登陸Redis Server只需要輸入密碼(前提配置了密碼 requirepass )即可,不需要輸入使用者名稱,而且密碼也是明文配置到配置檔案中,安全性不高。並且應用連線也使用該密碼,導致應用有所有許可權處理資料,風險也比較高。
在Redis6.0有了ACL之後,終於解決了這些不安全的因素,可以按照不同的需求設定相關的使用者和許可權。
Redis ACL 是向後相容的,即預設情況下使用者為default,使用的是requirepass配置的密碼。要是不使用ACL功能,對舊版客戶端來說完全一樣。
在 RedisInsight 中的 Workbench 介面可以很方便的執行 Redis 命令,而且左邊還有命令教程,太酷了!
幾個ACL命令
ACL的命令很簡單,而且在 RedisInsight 裡還可以補全,這裡簡單介紹幾個:
acl help
- 幫助acl list
- 列出所有使用者acl whoami
- 檢視當前使用者acl setuser
- 設定使用者,包括我們需要的設定密碼也是用這個命令
設定密碼
假設要把 default 使用者的密碼設定為 abc123
ACL SETUSER default on >abc123 sanitize-payload ~* &* +@all
如果不想要密碼了,可以用以下命令清除
ACL SETUSER default on nopass sanitize-payload ~* &* +@all
在程式中連線
以 C# 為例
首先安裝官方提供的 nuget 包
dotnet add package NRedisStack
demo 程式碼
using NRedisStack.RedisStackCommands;
using StackExchange.Redis;
var redis = await ConnectionMultiplexer.ConnectAsync("localhost", options => {
options.User = "default";
options.Password = "abc123";
});
var db = redis.GetDatabase();
var json = db.JSON();
// 寫入
json.Set("ext:1", "$", new { Age = 35, Name = "Alice" });
// 讀取
Console.WriteLine($"讀取:{json.Get(key: "ext:1", path: "$", indent: "\t", newLine: "\n")}");