
假设有两个表,一个存放buy_record用户秒杀记录,一个是产品表goods
通过在buy_record添加uid,goods_id并加唯一索引
开启事务
插入 insert into buy_record
if(唯一索引报错?){
抛异常,用户已经秒过了,回滚
}else{
update goods set goods_num=goods_num-1 where goods_id=$goods_id and goods_num>0 ;//更新库存
if(受影响行数<=0){
抛异常,商品秒完了,回滚
}
}
其他方案:
主要思路:
1、前端三板斧【扩容】【限流】【静态化】
2、后端两条路【内存】+【排队】
解决方案1:
将存库从MySQL......

在 iOS 平台上,大部分应用是不允许在后台运行并连接网络的。在应用没有被运行的时候,只能通过 Apple Push Notification Service (APNs) 把数据发送到终端用户。对于互联网应用,正确高效的使用 APNs 显然非常重要。
Apple 为应用开发者提供了一个 APNs 推送接口,称为 binary interface。
Binary Interface V1
最初版本的 binary interface 协议如下图,这里我们称之为 v1。
Binary Interface V1
v1 协议有几个问题:
消息是否发送成功没有明确的反馈;
如果一个消息发送失败,比如因为 deviceToken 不合法,APNs 会在大约 500......

问题:
redis扩展是基于php 的socket方式实现的
php.ini中的一个配置项:default_socket_timeout = 60
因此该参数同样起作用。
解决方法:
1、直接修改php.ini,将其设置为我们想要的值(这个不推荐)
2、在脚本中设置:ini_set(‘default_socket_timeout’, -1); //不超时
作者: owoer
|
发表于:2016年6月24日
|
栏目:PHP, Redis
|
phpredis ‘RedisException’ with message ‘read error on connection’已关闭评论
阅读全文

$redis->connect('127.0.0.1', 6379);
for ($i = 0; $i < 10; $i++) {
$value = 'value_' . date('Y-m-d H:i:s');
$redis->LPUSH('key1', $value);
}
echo $l = $redis->lLen('key1') . "</br>";
for ($i = 0; $i < $l; $i++) {
echo $i.':'.$redis->LPOP('key1') . "</br>";
}
echo $l = $redis->lLen('key1') . "</br>";
//$redis->del('key1');
//$redis->close();
参考:
【高并发简单解决方案】redis队列缓......

PDO持久化连接的方式来访问数据库,代码如下:
<?php
$type = 'mysql'; //数据库类型
$db_name = 'test'; //数据库名
$host = '127.0.0.1';
$username = 'root';
$password = 'ready';
$dsn = "$type:host=$host;dbname=$db_name";
try {
//建立持久化的PDO连接
$pdo = new PDO($dsn, $username, $password, array(PDO::ATTR_PERSISTENT => true));
} catch (Exception $e) {
die('连接数据库失败!');
}
$stmt = $pdo->query('SELECT id, body FROM demo');
while ($row ......