go 语言直接使用 map 和连接 Redis 后使用 Map 性能差别有多大

2024-01-16 00:13:14 +08:00
 huahsiung

go 语言直接使用 map 很方便

map1 := make(map[string]int)
key1 := map1["str1"]

但是发现有些 go 项目源码偏向使用 Redis 等第三方的 map.

import (
    github.com/go-redis/redis"
)
 client := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379", 
        Password: "",               
        DB:       0,                
    })
client.Ping()
client.HSet("myhash", "key1", "value1")
value1, err := client.HGet("myhash", "")

然后看到项目的 map 并不是并发使用的,数据量也不是特别大。(有些并没有持久需求的也在使用 redis )

go map 和 redis map 都是内存使用的,而且速度也很快。但是很多需要查找 hash 关系表的项目,偏向使用如 redis map 等第三方表。

我粗略测试了一下,没看出什么区别(可能我测试数据较小)。如果排除 go map 不能并发读写外与 Redis Map 使用性能差别有多大

5207 次点击
所在节点    程序员
54 条回复
Rehtt
2024-01-16 09:35:24 +08:00
这对比没意义,就像在问火车和远洋轮渡谁快
wzw
2024-01-16 09:41:21 +08:00
小系统可以考虑直接用 goframe 的 gmap, 当缓存,

系统启动的时候, 把所有数据读到 gmap 里面,

速度超级快, 还省了序列化的时间
8355
2024-01-16 09:42:54 +08:00
举个例子
你现在想去厕所
去你家的厕所快
还是去邻居家的厕所快
wysnxzm
2024-01-16 09:44:07 +08:00
我嫉妒你的才华
nothingistrue
2024-01-16 09:46:12 +08:00
如果性能一样的话,当然是 Redis 的更好,你可以把内存占用、自动超时等烦心事一股脑的扔给 Redis 去处理。

但是性能是否一样,那还另说,不过这块我不擅长,不评论。

再但是,性能是够用就好,不是越高越好。所以,只要性能差距对上层没那么敏感,还是以功能方便为首要选择依据。然而,借用 Redis 做 Map 是增加编码和运维复杂度的,所以一般场景的功能上也会偏向于使用内置 Map 。如果你发现一般场景都用 Redis Map 来取代内置 Map ,那很有可能是内置 Map 太烂了。
RedisMasterNode
2024-01-16 09:51:28 +08:00
有没有一种可能....用 Redis 的人寻求的是一个 "既可快速读写" ,"又可以多个服务(同个服务多个副本)" 访问的 KV 存储....

我看楼主的意思,应该没有多个副本吧,就一个普通的单实例应用
insert000
2024-01-16 09:53:21 +08:00
又没有可能是集群应用?
realJamespond
2024-01-16 09:56:38 +08:00
tcp 传输完内存都操作几百次,你说哪个快?
QlanQ
2024-01-16 10:05:52 +08:00
你说的这都不是一个事情吧,需求都不一样吧,内存只能单机用呀,会这样写,肯定是预留扩展吧
qq1340691923
2024-01-16 10:21:31 +08:00
jonsmith
2024-01-16 10:30:45 +08:00
redis 是数据库,跟本地操作怎么比,语言再拉跨也比网络快啊
javaisthebest
2024-01-16 10:31:25 +08:00
本地 Map 强多了为什么会出现 Redis?

为什么 Redis 功能这么强大还是会有本地 Map ?

先把这两个问题搞清楚吧。。 别一头雾水就提问
cloverzrg2
2024-01-16 10:32:07 +08:00
外部的服务缓存,怎么能跟本地内存比速度。
一个网络耗时,就比本地内存数据速度慢几百倍
tairan2006
2024-01-16 10:32:35 +08:00
分布式缓存和内存缓存的应用场景完全不一样,对比无意义
fgodt
2024-01-16 10:37:13 +08:00
集群应用只能存 redis 自带的再快也不行
shellcodecow
2024-01-16 10:38:34 +08:00
一个是持久化 一个是不是 redis 要 io 耗时的啊 看应用场景分不同用法...

如果是集群应用 那就要用到 redis
seth19960929
2024-01-16 11:06:09 +08:00
你还是停留在单机呀, 当你上集群的时候, 你还用 map 吗
而且机器之间怎么交换数据, 缓存控制这些
sampeng
2024-01-16 11:23:52 +08:00
哦。。那你这段数据同时被两个接口做 update ,请问阁下如何应对?
wOuv7i4e7XxsSOR1
2024-01-16 11:41:01 +08:00
莫民奇妙的问题
wOuv7i4e7XxsSOR1
2024-01-16 11:41:12 +08:00
莫名奇妙的问题

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

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

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

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

© 2021 V2EX