webman中,为了加快处理的效率并减少IO,做了内存缓存。即根据请求的数据,从数据库中查询到数据后加载到了静态数组LoadData::$data中,供下次请求直接使用。 请问如何解决用户删除了对应数据后,内存缓存也要删除的问题, 需要每个worker进程都清理,请问该如何处理? 由于考虑到性能因素,所以没使用apcu等共享内存机制。在不使用共享内存存放$data的前提下,怎么处理呢?
LoadData::$data
$data
考虑每个worker进程订阅redis的频道,然后推送,但是可能存在不稳定的情况。
你这不是脱裤子放屁吗?在乎这点点性能还不如好好优化下SQL语句和数据表设计加缓存来得快。你这样有可能会造成内存泄漏 架构师眼里:没有是加一层解决不了问题,一层不够就加二层。 给你一个多级缓存思路;
并发大概2000 request/sec ,主要是业务上会审核数据,数据审核以后就固定了,所以才考虑采用这种内存缓存方式,确实太过于设计了。
没必要用apcu,直接redis缓存吧。成熟方案,还支持持久化。
感谢,用redis设计上会简单不少
如果对数据过期不是很敏感,可以定时从数据库读,然后缓存到内存。 如果敏感感觉用apcu最好。apcu性能绝对够用,我们公司测试过,每秒读写上千万次。
确实,都加载到worker进程中,太浪费内存了
就redis就好了啊,
你这不是脱裤子放屁吗?在乎这点点性能还不如好好优化下SQL语句和数据表设计加缓存来得快。你这样有可能会造成内存泄漏
架构师眼里:没有是加一层解决不了问题,一层不够就加二层。
给你一个多级缓存思路;
当然这样优化在不是超高频率访问下,有可能还不如直接webman+cache性能
后期上面那种多级缓存维护起来还是有点点麻烦的(特别是做了负载均衡)
并发大概2000 request/sec ,主要是业务上会审核数据,数据审核以后就固定了,所以才考虑采用这种内存缓存方式,确实太过于设计了。
没必要用apcu,直接redis缓存吧。成熟方案,还支持持久化。
感谢,用redis设计上会简单不少
如果对数据过期不是很敏感,可以定时从数据库读,然后缓存到内存。
如果敏感感觉用apcu最好。apcu性能绝对够用,我们公司测试过,每秒读写上千万次。
确实,都加载到worker进程中,太浪费内存了
就redis就好了啊,