public async Task <ReadResult <string> > ReadFrom(LogRef @ref)
        {
            long offset = @ref.Offset.GetValueOrDefault(0);

            var value = (string)await Redis.StringGetRangeAsync(@ref.Key, offset, -1);

            return(AppendResult.Ok(value, next: @ref.WithOffset(offset + value.Length)));
        }
        public async Task <AppendResult> AppendTo(LogRef @ref, string val)
        {
            if (@ref.Offset == null)
            {
                throw new LogException("Can't append using a handle without an offset!");
            }

            await _luaAppend.EnsureLoaded(_redisMultiplexer);

            var newOffset = (long)await Redis.ScriptEvaluateAsync(
                script : _luaAppend.LoadedLuaScript,
                parameters : new { key = (RedisKey)@ref.Key, offset = @ref.Offset, val }
                );

            if (newOffset < 0)
            {
                return(AppendResult.Fail);
            }

            return(AppendResult.Ok(next: @ref.WithOffset(newOffset)));
        }