1
hangszhang 2021-01-28 23:16:28 +08:00
怎么可能一样, 除开读写速度之外还有序列化与网络 IO 的成本...
|
2
orangeChu OP @hangszhang 感谢回复。哈哈,可能我测试的不太严谨,扔本地测试,确实速度相当。哈哈…
|
3
thet 2021-01-29 00:33:11 +08:00 via iPhone
数据不能拆开吗
|
4
eason1874 2021-01-29 01:06:36 +08:00
memcached 默认最大 1M,要手动配置才支持 1M 以上,你确定改配置支持 10M 了吗?为什么不用 Redis,现在好像分布式内存缓存都用这个。
10M 数据载入内存我觉得正常,内存够用整站载入都没问题。 |
5
laminux29 2021-01-29 02:03:29 +08:00
为什么要用分布式缓存?
|
7
orangeChu OP @thet 感谢回复。原先用的自带缓存,直接把数据缓存。如果拆开数据,业务逻辑要调整较多,所以想先把分布式缓存用起来,后续再做业务逻辑及数据的拆分。
|
8
orangeChu OP @eason1874 感谢回复。已经修改了配置,支持更大的键值存储。因为一开始用的自带缓存,把数据直接缓存,redis 的性能尝试了一下,在没有改变数据结构的情况下,读写性能一般,甚至还没有 memcached 优秀。
我想尽量这种大数据,直接先缓存起来,把应用先跑起来,后续对业务级数据结构再进行优化。 但是目前还没想到好的方案来处理。 |
9
melkor 2021-01-29 09:50:35 +08:00 via iPhone
这么大数据,不如考虑共享内存本地缓存
|
11
Jooooooooo 2021-01-29 11:09:35 +08:00
10M 就放在本地吧
|
12
orangeChu OP @Jooooooooo 感谢回复。但是多站点共享缓存咋解决~~~~(>_<)~~~~
|
13
Jooooooooo 2021-01-29 11:38:50 +08:00
@orangeChu 用定时推送的方法吧, 比如 2 分钟推一次. 真正用还是从本地拿.
|
14
YouLMAO 2021-01-29 12:14:14 +08:00 via Android 1
10m
名字叫分布式文件系统 你应该使用类似 Amazon s3 之类的系统或者协议 |
15
emSaVya 2021-01-29 12:16:59 +08:00
缓存都在 redis 按周期刷到进程内 cache 进程内使用只读不写 写更新内容走 log kafka
|
16
tailf 2021-01-29 12:23:19 +08:00
多机共享缓存也不叫“分布式缓存”,分布式指的是缓存本身是由多台机器提供的。
你这个需求单独部署一台 redis 秒解,10M 无压力。 |
17
orangeChu OP @Jooooooooo 好想法!我会尝试一下,再次感谢。
|
18
orangeChu OP @tailf 感谢回复。10M 如果直接序列化保存,或者用 set 保存集合,读取的时候速度太慢了。本地缓存几十 ms,redis 要几秒反序列化。
|
20
orangeChu OP @tailf 是的。数据量确实很大。比如把全国的区域级联数据集合都缓存起来,大概有 5w 条数据。之前都是直接放站点缓存里,倒是很快。多站点共享缓存就痛苦了。
|
24
securityCoding 2021-01-29 14:26:42 +08:00
用进程内缓存吧,比如 guava cache+lazyloading,这么大不适合走网络 io
|
25
melkor 2021-01-29 18:47:24 +08:00 via iPhone
@orangeChu 每台机器都搞缓存呗。如果对数据实时性要求不高的话,可以在服务进程启动的时候拉全量数据缓存下来,请求来了只从缓存里找,找不到就拉倒;同时有另一个进程在后台定时把全量数据拉回本地写入共享内存中。
|
26
melkor 2021-01-29 18:52:56 +08:00 via iPhone
@orangeChu 这个方案速度应该是最快的,毕竟是共享内存。但是要仔细设计一下结构,写的时候如果是往后加还好,如果要改中间的数据、甚至要删数据,需要注意加锁(可以简单用文件锁),否则可能直接读到错的数据。
|
28
onion83 2021-01-29 19:24:37 +08:00
是 10Mb 还是 10MB ?如果是后者每秒 10 个并发就打爆千兆网卡 100 个并发打爆万兆网卡!
|
30
mybyons 2021-01-29 20:33:22 +08:00
这些数据如果每次只是做 过滤 抽取 取其中的部分子集的话 可以考虑 lua script OR function 直接过滤 这样网络压力会小很多
|
31
zhuawadao 2021-01-29 20:50:36 +08:00
可以走 cdn 吗这个数据
|
32
opengps 2021-01-29 21:44:38 +08:00 via Android
我以前把线上 memcached 用到过一个内核爆满,memcached 对于集群下应用,目前来说确实不像 redis 那么方便
|
33
laminux29 2021-01-29 22:11:47 +08:00
|
34
orangeChu OP @laminux29 感谢回复。速度慢主要是指存储和读取回来后,反序列化成对象或集合,这整个过程的耗时比自带缓存慢。
|
37
orangeChu OP @zhuawadao 感谢回复。之前倒是没考虑到,大数据用 cdn 倒是个不错的方案,后续会考虑一下这个方案。再次感谢。
|
39
orangeChu OP @mybyons 我举个例子来说明我们现在的缓存使用情况。
比如区域数据,先从数据库把所有的区域数据(大约 5W 条数据的 List 集合)都取出来,放在微软的 WebCache 里。 然后用到省份的数据时,直接把区域集合拿出来,抽取父级为空的区域数据。 选完省份后,根据省份,继续拿集合抽取父级为选取省份主键下的市级数据。 以此类推。 目前看到框架,用缓存都是这个使用情况。 |
40
yanyimin 2021-01-30 13:50:15 +08:00 1
每个服务都弄个本地缓存,数据有变动的时候再用 mq 或者 zk 做广播通知,服务收到通知更新缓存
|
41
ZiLong 2021-01-30 14:07:14 +08:00 1
可以构造多级缓存,一级用本地,把最热的数据放里面(可以设定个 1m,LRU 更新),二级放 redis/memcached 都行,一般一开始不要用分布式,10M 的缓存都不算大.但是不建议放一个 key 里面,大 key 和热 key 是性能杀手,按某个规则(比如不同省份,不同城市)作为 key
|
43
mybyons 2021-01-30 21:07:59 +08:00
感觉你要重新设计 key
”业务逻辑调整较多“ 不影响你重新设计 key 对外的接口协商好 具体内部怎么实现 外部看不到 |
47
pavelpiero 2021-02-01 09:21:55 +08:00
@yanyimin 做过类似的骚操作,不过用的是 redis 的订阅发布 一样的道理
|
49
boowx 2021-02-01 09:52:01 +08:00 1
@orangeChu 可以考虑用 json 文件,修改数据后更新 json 文件,api 给前端传文件 key 。可以用 websocket 通知前端缓存文件。
|
50
eason1874 2021-02-01 10:36:18 +08:00 1
才发现居然不是多机同步的,网络再快也有消耗啊,这么大的数据走实时网络,流量大点,内网都能给你堵了
|