RedisStack部署/持久化/安全/与C#项目集成

redisstack,部署,持久,安全,c#,项目,集成 · 浏览次数 : 75

小编点评

**Redis 部署和配置指南** **简介** Redis 是一个高性能的键值存储系统,可以用于各种应用场景,包括缓存、数据库和消息队列。本文提供详细的 Redis 部署和配置指南,包括使用 docker-compose 部署和配置 Redis 和 RedisInsight。 **部署步骤** 1. **创建 Dockerfile**:创建一个名为 `redis-image.dockerfile` 的 Dockerfile,其中包含 Redis 的安装命令。 2. **构建 Docker镜像**:使用 `docker-compose build` 命令构建 Redis 镜像。 3. **启动 Redis 服务器**:使用 `docker-compose up -d` 命令启动 Redis 服务器。 4. **访问 Redis**:通过 `localhost:6379` 的端口访问 Redis 服务。 5. **配置 Redis**:运行 `redis-server.py` 命令以配置 Redis 服务,例如设置密码、数据目录和设置。 **配置** 1. **创建数据目录**:创建一个名为 `data` 的目录,用于存储 Redis 数据。 2. **设置 Redis 密码**:运行 `redis-server.py` 命令设置 Redis 密码。 3. **创建示例数据**:运行 `redis-server.py` 命令添加一些示例数据。 **使用 RedisInsight** 1. **安装 RedisInsight**:使用 `docker-compose run` 命令启动 RedisInsight 容器。 2. **连接到 Redis**:使用 `redisInsight` 连接到 Redis 服务。 3. **使用 Workbench 界面**:在 Workbench 中执行 Redis 命令。 4. **阅读和设置数据**:使用 Workbench 中的命令编辑器进行数据操作。 **启动 RedisInsight** ``` docker-compose run -d \ redis:latest \ -p 8001:8001 \ -e REDIS_PASSWORD=abc123 \ redisinsight ``` **使用 C# 连接 Redis** ```csharp using NRedisStack.RedisStackCommands; using StackExchange.Redis; var redis = await ConnectionMultiplexer.ConnectAsync("localhost"); var db = redis.GetDatabase(); var json = db.JSON(); // 写入 JSON 数据 db.JSON().Set("ext:1", "$", new { Age = 35, Name = "Alice" }); // 读取数据 Console.WriteLine($"读取:{json.Get(key: "ext:1", path: "$\", indent: "\\t", newLine: "\\")}"); ``` **注意事项** * 在启动 Redis 服务之前,请确保您的系统具有 Redis 服务器的安装。 * 使用 `docker-compose up` 命令启动容器时,请确保您的系统具有 `docker` 工具。 * 在使用 RedisInsight 时,请确保您的浏览器支持 Web 浏览器。

正文

前言

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")}");

参考资料

与RedisStack部署/持久化/安全/与C#项目集成相似的内容: