java EE 用的是MySQL数据库,缓存问题


一直没考虑缓存问题,网页上展示的数据全部直接是读取数据库,这样肯定是不行

现在想的方案是吧数据库文件直接缓存为文件,然后直接读取文件

这样比读数据库感觉快了很多,我现在是用 jackson 吧数据存为 XXX.json 文件,然后用 jackson 读取 XXX.json 文件转为 JavaBean 使用,如果是 添加 更新 操作时,就更新下 XXX.json 文件,但是并发非常大时是不是不行,应该可能2个更新同时在操作这个文件?

不知道这方案对不对

一般缓存是怎么做

mysql 缓存 java-ee

贝尔·格力屌丝 9 years, 6 months ago

提一句,mysql本身就是有 查询缓存机制 的,也就是并非你的每句sql它都会费力的去解析查询。
用文件做缓存对io的占也是比较大的,性能方面的提升不会太大(当然,如果之前数据库查询的逻辑的确是太复杂、太慢了的话,你还是有机会感到提升很多)。
你先把产品上线看看效果再决定是否真的有必要上缓存,真要上的话试试Memcached吧,自己去折腾无异于自己挖坑埋自己。

killer7 answered 9 years, 6 months ago

我工作经验要少些 要是说的有什么问题请指正
我没试过 但是理论上来说感觉程序和数据库交互的性能要比直接本地文件读写的性能高吧
写缓存一般习惯于把HashMap封装成线程同步的类,然后读写的时候都是直接get和put了 反正并发的时候可以通过上锁来保证
就是现在还对javaEE的网络并发机制不大了解 所以不知道现在这种做法到底是否正确

至于读写json并发问题,您可以专门封装一个类用于读写这个json文件,然后通过占用状态和执行队列来执行操作,并且拒绝其他修改json的方式来保证同步性吧。

動と静D均衡 answered 9 years, 6 months ago

系统有文件读写锁,所以两个线程(进程)不能同时获得写锁进行写操作.
直接访问MySQL读写数据的性能也没你想象中那么差,MySQL有自己的缓存机制.
i5-3230M笔记本的CPU,在Ubuntu14.04上,5个PHP-FPM工作进程跟MySQL建立5个持久连接,ab压测每秒连接能达到5900多个,在服务器CPU上,数据库并发连接超过C10K估计也没有问题.
关键还是SQL执行快慢的问题,如果SQL查询没能利用索引导致速度慢,那这是SQL优化的问题,不是MySQL的问题.

诶诶诶诶诶诶 answered 9 years, 6 months ago

Your Answer