MinIO 存储桶通知 Redis

本章节将介绍怎样利用 Redis 来存储 MinIO 存储桶发生变化时产生的通知,详细步骤如下:

安装/运行 Redis

本文采用 Windows 版本的 Redis 进行测试,如果不知道怎样在 Windows 下面安装 Redis,请参考“Windows下安装Redis详解”。

MinIO 配置 Redis 监听

打开 MinIO 数据目录下面的 .minio.sys 目录,编辑 .minio.sys\config\config.json 文件。找到“notify_redis”配置项,添加 Redis 配置信息。配置如下:

{
    //...
    "notify_redis": {
        "_": [{
                "key": "enable",
                "value": "true"
            }, {
                "key": "format",
                "value": "namespace"
            }, {
                "key": "address",
                "value": "127.0.0.1:6379"
            }, {
                "key": "key",
                "value": "bucketevents"
            }, {
                "key": "password",
                "value": ""
            }, {
                "key": "queue_dir",
                "value": ""
            }, {
                "key": "queue_limit",
                "value": "0"
            }
        ]
    },
    //...
}

其中:

  • enable 设置为 on 表示开启 Redis 通知,即启用当前配置(on 表示启用;off 表示禁用);

  • format 取值可以是 namespace 或者 access,该配置取值直接影响 key 的类型,详情见 key 配置;

  • address 配置 Redis 的服务器地址,如:127.0.0.1:6379

  • password 配置 Redis 的访问密码,如果 Redis 没有设置密码,则保持空字符串即可;

  • key 指定事件要存储到 redis key 的名称。如果用的是 namespace 格式的话,则是一个hash;如果是 access 格式的话,则是一个list;

完成上面配置后,启动 MinIO 服务;如果 MinIO 服务控制台输出“SQS ARNs: arn:minio:sqs::_:redis”信息,则说明启动成功。

存储桶添加通知

我们现在可以创建一个 images 存储桶,在该存储桶上面开启时间通知。一旦有文件被创建或者覆盖,一个新的 key 会被创建,或者一个已经存在的 key 就会被更新到之前配置好的 redis hash 里。如果一个已经存在的对象被删除,这个对应的 key 也会从hash 中删除。因此,这个 Redis hash 里的行,就映射着 images 存储桶里的 .jpg 对象。

要配置这种存储桶通知,我们需要用到前面步骤 MinIO 输出的 ARN 信息“arn:minio:sqs::_:redis”。

使用 mc 客户端执行如下脚本去开启通知:

# 使用客户端命令,在本地 MinIO 服务器中创建 images 存储桶
D:\server\minio>mc mb local/images
Bucket created successfully `local/images`.

# 为刚刚创建的 images 存储桶添加事件通知
# 使用 --suffix 选项指定仅仅上传/删除 jpg 格式图片才触发事件
D:\server\minio>mc event add local/images arn:minio:sqs::_:redis --suffix=".jpg"
Successfully added arn:minio:sqs::_:redis

# 查看 images 存储桶上面的事件
D:\server\minio>mc event list local/images
arn:minio:sqs::_:redis   s3:ObjectCreated:*,s3:ObjectRemoved:*,s3:ObjectAccessed:*   Filter: suffix=".jpg"

验证结果

使用浏览器访问 http://localhost:9000 ,使用 Access Key 和 Securet Key 登陆到后台。手动添加两张图片到 images 存储桶,如下图:

然后连接到 Redis 验证结果,如下图:

如果我们从 images 存储桶删除一张 jpg 图片,该图片在 Redis 中的 key 也将被删除。

注意:如果 images 存储桶中有部分图片是在开启通知之前存在的,则不会在 Redis 中创建 key。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号