您好,欢迎光临! 推荐您使用Chrome浏览器访问本站。

秒杀核心设计(减库存部分)-防超卖与高并发

1,175 views
秒杀核心设计(减库存部分)-防超卖与高并发假设有两个表,一个存放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......

APNs 推送原理及如果提高推送质量

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

phpredis ‘RedisException’ with message ‘read error on connection’

2,473 views
phpredis ‘RedisException’ with message ‘read error on connection’问题: redis扩展是基于php 的socket方式实现的 php.ini中的一个配置项:default_socket_timeout = 60 因此该参数同样起作用。 解决方法: 1、直接修改php.ini,将其设置为我们想要的值(这个不推荐) 2、在脚本中设置:ini_set(‘default_socket_timeout’, -1); //不超时

redis list php简单队列例子

695 views
redis list php简单队列例子 $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队列缓......

PHP MySQL PDO持久化连接与关闭

801 views
PHP MySQL PDO持久化连接与关闭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 ......