thinkphp商城如何处理高并发,怎么使用memcache做缓存

thinkphp商城如何处理高并发,怎么使用memcache做缓存


眼眸繁星
浏览 740回答 3
3回答

慕无忌1623718

1234567891011121314151617181920212223242526272829303132333435363738394041424344ThinkPHP其实并不支持分布式缓存功能,这可以从官方提供的CacheMemcache.class.php文件中看到:if(empty($options)) {  $options = array  (    'host' => '127.0.0.1',    'port' => 11211,    'timeout' => false,    'persistent' => false  );}$func = $options['persistent'] ? 'pconnect' : 'connect';$this->expire = isset($options['expire'])?$options['expire']:C('DATA_CACHE_TIME');$this->handler = new Memcache;$this->connected = $options['timeout'] === false ?$this->handler->$func($options['host'], $options['port']) :$this->handler->$func($options['host'], $options['port'], $options['timeout']);    不过不要紧,稍微修改下就行了,即    if(empty($options)) {  $options = array  (    'timeout' => false,    'persistent' => false,    'servers'=>array(      array('ip'=>'127.0.0.1','port'=>11211),      array('ip'=>'127.0.0.1','port'=>11212),      array('ip'=>'202.116.32.4','port'=>11211),    ),  );}//分布式处理函数$func="addServer";$this->expire = isset($options['expire'])?$options['expire']:C('DATA_CACHE_TIME');$this->handler = new Memcache;if($options['timeout']===false){  foreach($options['servers'] as $server)  {    $this->handler->$func($server['ip'],$server['port']);  }}    闲来无事,于是就在本机上启动了两个MemCache服务器,顺手编写了一段简单的监控代码(隔一段时间自动刷新一次),进行测试。如果发现服务器运行不正常,则使用PhpMailer自动发送一封Email到管理员邮箱。测试结果表明,两台Memcache服务器均工作正常,而另外一台虚假的服务器当然是无法连接到的。 

呼啦一阵风

所有的被发送到memcached的单个命令是完全原子的。如果您针对同一份数据同时发送了一个set命令和一个get命令,它们不会影响对方。它们将被串行化、先后执行。即使在多线程模式,所有的命令都是原子的,除非程序有bug:)命令序列不是原子的。如果您通过get命令获取了一个item,修改了它,然后想把它set回memcached,我们不保证这个item没有被其他进程(process,未必是操作系统中的进程)操作过。在并发的情况下,您也可能覆写了一个被其他进程set的item。memcached1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果您使用gets命令查询某个key的item,memcached会给您返回该item当前值的唯一标识。如果您覆写了这个item并想把它写回到memcached中,您可以通过cas命令把那个唯一标识一起发送给memcached。如果该item存放在memcached中的唯一标识与您提供的一致,您的写操作将会成功。如果另一个进程在这期间也修改了这个item,那么该item存放在memcached中的唯一标识将会改变,您的写操作就会失败。

ITMISS

thinkphp 本身并没有进行高并发处理的功能高并发 的先要知道你自己做的东西哪里并发高thinkphp 内置很多第三方的内存缓存类,你只要把redis memcache memcached这些缓存安装上,用内存缓存可以缓解高并发。只是缓解并不能完全解决。高并发要想说可以写一本书了 ,不是thinkphp能解决的问题
打开App,查看更多内容
随时随地看视频慕课网APP