我想做个上传图片的功能,需要将图片传到redis中(其实是ssdb),key是文件自己的md5sum,看了下文档,发现lua-resty-upload接文件是每次读取一小块的,但是redis是一次把整个文件内容都写进去的,请问有什么办法可以让它追加写入?还是说这个场景不适用lua-resty-upload?
谢谢!
    Hello!
    
    2014-05-07 20:27 GMT-07:00 马思奇:
    > 我想做个上传图片的功能,需要将图片传到redis中(其实是ssdb),key是文件自己的md5sum,看了下文档,发现lua-resty-upload接文件是每次读取一小块的,但是redis是一次把整个文件内容都写进去的,请问有什么办法可以让它追加写入?还是说这个场景不适用lua-resty-upload?
    
    这个场景非常适合使用 lua-resty-upload. 这里有两种不同的实现策略可供选择:
    
    1. 在 nginx 中全缓冲所有的上传文件数据,然后再一次性地写入 redis(比如使用 redis 的 set 命令)。此时,你可以为
    lua-resty-upload
    指定较大的块大小(毕竟块大小是你自己指定的),可以是你允许的最大的请求体的大小。当然,即使你指定较小的块,你也可以自己在 Lua
    里把它们累积拼接成一个大 Lua 字符串(不过,不建议使用 .. 操作符进行字符串拼接,而应使用 table 追加元素,最后再一次性地通过
    table.concat 拼接字符串)。这种做法的优点是较为简单,但在 Lua 空间里需要分配较多的内存,毕竟是全缓冲方式。
    
    2. 使用严格的流式处理模式。在 ngx_lua 一侧一次读取一个数据块,然后立即写入 redis,并不在 Lua 空间里累积大量数据。其实
    redis 协议也是支持数据追加的,见其标准的 append 命令:
    
        http://redis.io/commands/APPEND
    
    当然,我不确定你这里实际使用的 ssdb 后端是否支持 Redis 标准的 append 命令。
    
    Regards,
    -agentzh
    
      谢谢春哥,我去试试,有问题再回来发帖!

      在 2014年5月9日星期五UTC+8上午3时40分31秒,agentzh写道:
      Hello!

      2014-05-07 20:27 GMT-07:00 马思奇:
      > 我想做个上传图片的功能,需要将图片传到redis中(其实是ssdb),key是文件自己的md5sum,看了下文档,发现lua-resty-upload接文件是每次读取一小块的,但是redis是一次把整个文件内容都写进去的,请问有什么办法可以让它追加写入?还是说这个场景不适用lua-resty-upload?

      这个场景非常适合使用 lua-resty-upload. 这里有两种不同的实现策略可供选择:

      1. 在 nginx 中全缓冲所有的上传文件数据,然后再一次性地写入 redis(比如使用 redis 的 set 命令)。此时,你可以为
      lua-resty-upload
      指定较大的块大小(毕竟块大小是你自己指定的),可以是你允许的最大的请求体的大小。当然,即使你指定较小的块,你也可以自己在 Lua
      里把它们累积拼接成一个大 Lua 字符串(不过,不建议使用 .. 操作符进行字符串拼接,而应使用 table 追加元素,最后再一次性地通过
      table.concat 拼接字符串)。这种做法的优点是较为简单,但在 Lua 空间里需要分配较多的内存,毕竟是全缓冲方式。

      2. 使用严格的流式处理模式。在 ngx_lua 一侧一次读取一个数据块,然后立即写入 redis,并不在 Lua 空间里累积大量数据。其实
      redis 协议也是支持数据追加的,见其标准的 append 命令:

          http://redis.io/commands/APPEND

      当然,我不确定你这里实际使用的 ssdb 后端是否支持 Redis 标准的 append 命令。

      Regards,
      -agentzh
        Write a Reply...