2017-06-17 64 views
2

我是Redis的新手,我不确定为什么这个查询需要这么长时间。它基本上是json对象的7mb字符串。我使用HGet key data,它所花费的时间平均为225毫秒。这实际上比同一虚拟化环境中的sql服务器慢。他们也有相同的分配资源。Redis 225 ms检索哈希值

虚拟化环境中内置的延迟最差只有约9000微秒。

我什至不能包装我的头周围如何完全缓存内存需要比在sql中获取相同的数据更长的时间。 redis服务器需要花费两倍的时间。下面是一个字符串示例。

[ {"name":"Christopher", "advocate": "John"}, {"name": "Jane", "advocate": "John"}, etc..]

的SQL只是完全相同的信息表。

| name  | advocate | 
| ---------- | -------- | 
| Christopher | John  | 
| Jane  | John  | 

有我丢失的东西在Hash较大的物体,这将提高性能?如果完全相同的查询内存比sql慢,我不能证明任何人使用Redis。我明白,一旦我开始增加sql中的连接复杂性,我可以看到更多的重要性。但我认为我在Redis中可能会缺少更多的东西。

如果您需要,我可以提供更多细节。

回答

1

这并不令人惊讶。

SQL Server使用TDS返回数据。该协议旨在有效地返回表格数据。它不会重复每行的字段名称 - 这发生在您的JSON对象中。我的猜测是JSON表示实际上比TDS表示更大。由于该用例受网络带宽限制(超过延迟),因此Redis似乎较慢。

请注意,Redis没有特别优化来存储和返回大型对象。

对于225 ms,7 MB表示31 MB/s。这显然取决于管道的大小,但对于虚拟化环境来说,这看起来并不坏。

+0

我该怎么做才能改善时间? –

+0

您提到了Pipes。我怎样才能增加管道的大小?你也提到它没有优化,我怎样才能更有效地返回大对象?我应该将这些对象分离为更多关键值以减小大小,并减少字段的json重复次数,并让我的键成为这些对象的表示形式? –

+0

如果不需要操作来自Redis的JSON字段(即将数据存储为大块) - 那么我会建议使用轻量级压缩算法(LZ4,Snappy,LZO等)压缩数据客户端。 )。 –