本章节将介绍怎样利用 Redis 来存储 MinIO 存储桶发生变化时产生的通知,详细步骤如下:
本文采用 Windows 版本的 Redis 进行测试,如果不知道怎样在 Windows 下面安装 Redis,请参考“Windows下安装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。