关于分布式缓存,有点疑问,不吝赐教

2021-01-28 23:05:56 +08:00
 orangeChu
如果网站有大数据需要缓存(最大键值可能有 10M 左右,我觉得这么大的数据都缓存,太离谱了,但是实际又需要),有什么好的分布式缓存解决方案吗?
尝试了一下 memcached,键值太大的时候,读写太慢了。没有自带的本地缓存快。
小于 1m 的读写速度倒是跟本地缓存速度几乎一样。
ps:c#开发
4731 次点击
所在节点    程序员
51 条回复
orangeChu
2021-01-29 12:34:04 +08:00
@emSaVya 目前来看,这个方案应该可行。我会尝试一下。再次感谢您的回复。
orangeChu
2021-01-29 12:36:47 +08:00
@YouLMAO 是这样吗?我会了解一下,看看是否有帮助,感谢回复。
zzh7982
2021-01-29 14:21:11 +08:00
@emSaVya 直接入 db 就可以了吧,本地定时读 db 更新缓存,多上个 redis 和 kafka 有点复杂
securityCoding
2021-01-29 14:26:42 +08:00
用进程内缓存吧,比如 guava cache+lazyloading,这么大不适合走网络 io
melkor
2021-01-29 18:47:24 +08:00
@orangeChu 每台机器都搞缓存呗。如果对数据实时性要求不高的话,可以在服务进程启动的时候拉全量数据缓存下来,请求来了只从缓存里找,找不到就拉倒;同时有另一个进程在后台定时把全量数据拉回本地写入共享内存中。
melkor
2021-01-29 18:52:56 +08:00
@orangeChu 这个方案速度应该是最快的,毕竟是共享内存。但是要仔细设计一下结构,写的时候如果是往后加还好,如果要改中间的数据、甚至要删数据,需要注意加锁(可以简单用文件锁),否则可能直接读到错的数据。
orangeChu
2021-01-29 19:17:58 +08:00
@melkor 好的,你的方案很具体,太感谢您的回复了。我打算用这个方案来实现一次。
onion83
2021-01-29 19:24:37 +08:00
是 10Mb 还是 10MB ?如果是后者每秒 10 个并发就打爆千兆网卡 100 个并发打爆万兆网卡!
ferock
2021-01-29 20:30:25 +08:00
@orangeChu #20

为什么不静态化
mybyons
2021-01-29 20:33:22 +08:00
这些数据如果每次只是做 过滤 抽取 取其中的部分子集的话 可以考虑 lua script OR function 直接过滤 这样网络压力会小很多
zhuawadao
2021-01-29 20:50:36 +08:00
可以走 cdn 吗这个数据
opengps
2021-01-29 21:44:38 +08:00
我以前把线上 memcached 用到过一个内核爆满,memcached 对于集群下应用,目前来说确实不像 redis 那么方便
laminux29
2021-01-29 22:11:47 +08:00
@orangeChu

你嫌弃 redis 与 memcached 速度慢,具体是指:

api 调用延迟高?

还是每秒吞吐量低?
orangeChu
2021-01-30 11:20:44 +08:00
@laminux29 感谢回复。速度慢主要是指存储和读取回来后,反序列化成对象或集合,这整个过程的耗时比自带缓存慢。
orangeChu
2021-01-30 11:22:59 +08:00
@orangeChu 自带缓存用的是微软的 WebCache 。
orangeChu
2021-01-30 11:24:38 +08:00
@onion83 是的。高并发时,单机器卡爆,站点访问缓慢。原来框架设计如此,搞得我来维护的时候,也很头疼。
orangeChu
2021-01-30 11:28:23 +08:00
@zhuawadao 感谢回复。之前倒是没考虑到,大数据用 cdn 倒是个不错的方案,后续会考虑一下这个方案。再次感谢。
orangeChu
2021-01-30 11:29:43 +08:00
@ferock 可以具体说一下吗?我有点不太明白。
orangeChu
2021-01-30 11:34:43 +08:00
@mybyons 我举个例子来说明我们现在的缓存使用情况。
比如区域数据,先从数据库把所有的区域数据(大约 5W 条数据的 List 集合)都取出来,放在微软的 WebCache 里。
然后用到省份的数据时,直接把区域集合拿出来,抽取父级为空的区域数据。
选完省份后,根据省份,继续拿集合抽取父级为选取省份主键下的市级数据。
以此类推。

目前看到框架,用缓存都是这个使用情况。
yanyimin
2021-01-30 13:50:15 +08:00
每个服务都弄个本地缓存,数据有变动的时候再用 mq 或者 zk 做广播通知,服务收到通知更新缓存

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

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

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

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

© 2021 V2EX