为什么现在高级语言内置的数据结构非常高效,但还要使用 Redis 这类(不开持久化)的缓存?

2015-09-17 16:26:29 +08:00
 Feiox

R.T

我在比较慢的 CPython 中建立一个一千万的集合用时 1.1s ,做一千万次查找用时 1.4s ,
但使用 redis-benchmark 跑测试却只能达到 12w 每秒的速度。
(测试用机: 2015 高配 Macbook Pro 15 )

所以,对于那些只是单机跑的小应用来说,还有必要使用 Redis 这类的缓存吗?

4075 次点击
所在节点    程序员
22 条回复
messense
2015-09-17 16:33:31 +08:00
方便跨进程共享数据。
maemual
2015-09-17 16:37:38 +08:00
1 、单机跑的小应用本来就是少数
2 、不开持久化的 Redis 又是少数
加上这么些限制条件之后,只能说,嗯,在你的设想下是不需要用 Redis 了。
wayne712
2015-09-17 16:41:31 +08:00
redis 如果作为缓存使用的话 , 缓存当然还可以设置过期时间了, 而内置数据的话本身并不带这样的功能吧
learnshare
2015-09-17 16:47:34 +08:00
语言无关,可共享
Feiox
2015-09-17 16:52:54 +08:00
@learnshare @wayne712 @maemual @messense 那为什么这些语言实现的如此快,而 Redis 要差两个数量级呢?
aisk
2015-09-17 16:54:26 +08:00
除了上述需要考虑分布式环境 / 持久化的原因之外,如果直接在内存里保存大量的数据结构,在某些带 GC 的语言里,会导致 GC 速度大大降低。不过也看实现了。

另外如果自己申请大段内存做序列化实现的话,可以避免这个问题,但是实现复杂度会大大增加。
aisk
2015-09-17 16:55:35 +08:00
@Feiox 还要考虑网络开销,这个是大头。另外你用 Python 客户端再往里面添加复杂对象,序列化也是很大的开销。另外 redis 还会帮你压缩内存,这也是开销。
zts1993
2015-09-17 16:57:59 +08:00
多线程?线程安全么?
xiaolee59
2015-09-17 17:00:45 +08:00
高内聚,低耦合,生产环境下服务都是分层的,数据就应该在数据那一层,业务只需要关心逻辑实现,全部用原生数据结构,那么你的服务进程过了,你的数据也就没了?而且百分之百找不回来?
ljbha007
2015-09-17 17:14:23 +08:00
大多数情况生产环境都不只一台机器 /一个进程 你内存里的数据结构虽然快 但是没办法横向扩展 没办法分布式同步数据 如果你自己实现的话开发成本会飙升 然而 redis 本来解决了这个问题 为什么不用呢
maemual
2015-09-17 17:39:30 +08:00
@Feiox 因为存到 Redis 里的,有大量的网络开销,大量的序列化开销啊。。。
shiny
2015-09-17 17:42:21 +08:00
这种 benchmark 不能反映生产环境上的真实情况
assassinpig
2015-09-17 20:47:55 +08:00
万一需要开持久呢?
msg7086
2015-09-17 21:06:34 +08:00
只开一个进程一个线程的话,自然不需要开的。
问题是这情况实在太少了。
akira
2015-09-17 21:50:10 +08:00
单机跑的小应用 用内存缓存干嘛,人家本来就不是设计给这个场景用的
adrianzhang
2015-09-17 21:55:12 +08:00
为了分布式。单机小应用用不着。
llhhss
2015-09-17 23:30:11 +08:00
小应用要不要缓存都得先看看
chenwen
2015-09-17 23:41:40 +08:00
就算是是单机小应用,用内存缓存,你不用考虑缓存持久化得问题么
zoul
2015-09-17 23:53:14 +08:00
分布式,水平扩展,缓存服务化
gamexg
2015-09-18 07:13:14 +08:00
即使是 python web 小应用也不会是单进程的啊。
跨进程共享最好上专业缓存。
Redis 对于一些操作可以保证原子。

Python 进程内当然比 Redis 网络通信快。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/221485

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX