惊了 redis 还能这样玩??

2018-05-07 18:39:19 +08:00
 johnsneakers
接手新项目,那个程序把 hash 当 MySQL 来用,给我说他们以前项目都这样搞。具体是:所有玩家的个人信息放在 user 这个 key 里面,hset user 10000 用户个人信息 json。 第一次见这样玩的 ,我太菜了,怎么给对方说都不听。
19340 次点击
所在节点    Redis
111 条回复
Los
2018-05-08 01:15:59 +08:00
@johnsneakers 是的,这样做没有太大问题。你只是潜意识里信不过 redis 而已。。
changwei
2018-05-08 01:24:03 +08:00
hashtable 里面放一百万个 key 有什么不对吗? hashtable 的查找时间复杂度是 o ( 1 )的(当然排除 hash 冲突的情况),和数据量又无关,只要内存够大,你放一千万个也没什么问题啊。
changwei
2018-05-08 01:28:19 +08:00
@dltsgl 那就再做一个手机号到 uid 的 key-value 对呗! redis 建缓存就像 mysql 建索引的策略一样,哪个是索引项就对谁建缓存。
kran
2018-05-08 08:30:09 +08:00
hareandlion
2018-05-08 08:40:54 +08:00
貌似很多人都觉得 Redis 不能做持久化存储
realpg
2018-05-08 08:48:22 +08:00
@hareandlion #25
非实时持久啊
对于很多项目 没法做主存储的
owt5008137
2018-05-08 08:49:55 +08:00
不考虑 sharding 或者自己做 sharding 是可以这么做。

但是别听上面他们说的,你的做法是对的。现有的 redus 的 sharding 方案全是基于 key 的,所有的数据存一个 key 那就只能单点。而且一级 key 带 uid 这样二级还可以再分字段,可以实现只存脏数据字段和读取部分字段,能减少很多 redis 压力的。
agostop
2018-05-08 08:55:54 +08:00
赞同#27,等到数据量上来,需要切片的时候,你就发现,傻了……

不过对于功能来讲,没什么问题。
lepig
2018-05-08 09:09:37 +08:00
功能上没什么问题 只是分 key 方便写代码和管理
salamanderMH
2018-05-08 09:10:13 +08:00
全部存一个 key,这个还是不寻常的
suyuanhxx
2018-05-08 09:32:16 +08:00
没什么太大问题,redis hash 结构-》 key field(hashkey) value,虽然是同一个 key,但是不同的 hashkey,没问题,但是这种方式不太优雅
kiddult
2018-05-08 09:46:16 +08:00
这里面大部分人的用户只有几十几百么?一个 hash 放这么多内容,你是打算找死呢,还是想害死 redis 运维?这么大 key 线上要出事的,楼主的做法才明明是对的
ryanking8215
2018-05-08 09:48:25 +08:00
记得哪里看到过,有公司(instagram ?)使用 key-value 方式存储觉得太占空间,咨询 redis 开发组后,改成 hash 方式存储,节约空间。
ylcc
2018-05-08 09:54:30 +08:00
为什么这么多人觉得一个 key 存这么大的数据没问题啊,这么干肯定需要拆分一下啊。
ioth
2018-05-08 10:03:57 +08:00
@ylcc 基于什么理由?
程序写多了,觉得什么都是天经地义,和社会脱节。
windstill
2018-05-08 10:04:10 +08:00
之前看过一篇 redis 优化的文章,其中说到一级 key 的数量不能太多。你那样一个用户一个 key,几百万个一级 key,会影响 redis 的读写效率。

不知道其他大神怎么看
g8287694
2018-05-08 10:12:01 +08:00
阿里的 redis 使用手册了解一下
eslizn
2018-05-08 10:13:25 +08:00
@johnsneakers 一个 hash key 里确实有问题,之前审题没注意,以为是一个用户一个 hash,里面存属性
mingzu
2018-05-08 10:14:01 +08:00
看了上半段回复开始自我怀疑人生了..

还好后半段回复又把我抓回来了。。
eslizn
2018-05-08 10:15:07 +08:00
@johnsneakers 因为一个 key 的话没办水平扩展,无法利用集群

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

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

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

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

© 2021 V2EX