3

RedisStack部署/持久化/安全/与C#项目集成 - 程序设计实验室

 11 months ago
source link: https://www.cnblogs.com/deali/p/17746538.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

前言#

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

参考资料#


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK