最新公司有个web项目,要求的并发数有点高。以前很少做网站这一块,特来请教一下各位大神。
主要是网站有个api调用,每秒读写数据库达到三千次左右,输出一个简单的josn。不知道用php apache linux 单台服务器 这样的配置行不行呢?
这个场景,缓存到底用是memcache,还是用Redis比较好呢?
之前没有使用过缓存,查询了一些资料恶补了一番,但是对 缓存数据 写入 mysql 还是模棱良可,不知哪位大神可以给出代码实例吗?谢谢了。
主要是网站有个api调用,每秒读写数据库达到三千次左右,输出一个简单的josn。不知道用php apache linux 单台服务器 这样的配置行不行呢?
这个场景,缓存到底用是memcache,还是用Redis比较好呢?
之前没有使用过缓存,查询了一些资料恶补了一番,但是对 缓存数据 写入 mysql 还是模棱良可,不知哪位大神可以给出代码实例吗?谢谢了。
memcache 扩展写的比 Redis 扩展好
memcache 扩展可直接存取 php 的数组、对象,Redis 扩展则需序列化
若是简单的存取key-value这样的数据用memcache好一些
若是要支持数据持久化,多数据类型(如集合、散列之类的),用列表类型做队列之类的高级应用,就用redis你这个主要是读的话,建议还是memcache
具体是有个表写的比较多,看了网上的建议,都说是redis比较好,然而今天上午倒腾了一上午,都出现安装错误。
倒是memcache安装成功了。
看资料也是说memcache 支持php更好,只是不知道用memcache有什么思路写mysql,就是这个API不停的被调用,需要往一个表里面插入一行数据,数据需要被及时保存,而原本的数据存储是使用mysql的。
数据本身很简单,一共才有五个表,其余表都是查询偏多。
memcache 安装配置成功了,Redis 安装的时候总是出现警告和make错误。现在我主要是不清楚新插入的数据该什么时候保存,还有memcache 不停的connect 和 get等等,会不会造成性能瓶颈。我在网上看到一篇资料,是说因为类似这个原因引起的
像查询,第一次查询就mysql,并记录在memecache/redis里,下次再来查就直接读memecache/redis若你实在想做缓存的插入,假如你用memecache,在每次执行插入的时候都把数据存在内存中,并存一个标记count,每次执行插入都检查一次count这个值,若是大于等于10(可自己设置),你就执行插入(一次插入10条数据),并将count置为0,如此反复,就能将10插入变为一次
但是遇到服务器宕机,你这缓存中的10条数据就不见了
就主要是这个插入太多了, 高峰期上千条每秒了,想减少mysql的并发啊。另外请教大神 memecache 不停的get,connect这样会不会造成性能瓶颈。
MySQL 默认并发数为 150
假定你没有对其修改那么,对于每秒三千的访问,你并没有说有数据丢失现象的存在
显然这个配置可以说还是合适的memcache 和 Redis 都是都是基于内存的
如果你增大了 Apache 和 MySQL 的并发数,势必会和 memcache 和 Redis 争抢内存。那么如何合理的分配有限的物理内存就成了问题关键。MySQL 提供有内存表,你可以象访问文件表一样的访问他,而不需要访问 memcache 和 Redis 服务器的而外开销
当然,如果你只使用 Redis 或更高级的 noSQL 就另当别论了以上是环境相关的一些考量使用缓存的流程是:
if 缓存中存在所需的数据
返回缓存中的数据
else
查询数据库
写入缓存
返回数据
endif显然缓存会降低实时性