经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Redis » 查看文章
RedisStack部署/持久化/安全/与C#项目集成
来源:cnblogs  作者:程序设计实验室  时间:2023/10/9 9:23:04  对本文有异议

前言

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 端口映射出来。

  1. version: '3.4'
  2. services:
  3. redis:
  4. image: redis/redis-stack:latest
  5. container_name: redis-stack
  6. restart: always
  7. ports:
  8. - "6379:6379"
  9. - "8001:8001"
  10. volumes:
  11. - ./data:/data
  12. networks:
  13. default:
  14. 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

  1. ACL SETUSER default on >abc123 sanitize-payload ~* &* +@all

如果不想要密码了,可以用以下命令清除

  1. ACL SETUSER default on nopass sanitize-payload ~* &* +@all

在程序中连接

以 C# 为例

首先安装官方提供的 nuget 包

  1. dotnet add package NRedisStack

demo 代码

  1. using NRedisStack.RedisStackCommands;
  2. using StackExchange.Redis;
  3. var redis = await ConnectionMultiplexer.ConnectAsync("localhost", options => {
  4. options.User = "default";
  5. options.Password = "abc123";
  6. });
  7. var db = redis.GetDatabase();
  8. var json = db.JSON();
  9. // 写入
  10. json.Set("ext:1", "$", new { Age = 35, Name = "Alice" });
  11. // 读取
  12. Console.WriteLine($"读取:{json.Get(key: "ext:1", path: "$", indent: "\t", newLine: "\n")}");

参考资料

原文链接:https://www.cnblogs.com/deali/p/17746538.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号