本文目录导读:

- 同一请求内共享(全局变量 / 单例模式)
- 不同请求之间共享(Session / Cookie)
- 不同进程/服务之间共享(文件 / 数据库 / Redis)
- 跨服务器共享(共享文件系统 / 消息队列)
- 性能对比与推荐
- 企业级最佳实践
在 PHP 中实现数据共享,主要取决于你的应用场景(如:同一请求内、不同请求之间、不同进程之间、不同服务器之间),以下是几种常见的数据共享方案及代码示例:
同一请求内共享(全局变量 / 单例模式)
适用于同一个 HTTP 请求中不同函数/类之间共享数据。
// 方式一:全局变量(不推荐,易污染)
$globalData = [];
function setData($key, $value) {
global $globalData;
$globalData[$key] = $value;
}
// 方式二:单例模式(推荐)
class DataShare {
private static $instance = null;
private $data = [];
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function set($key, $value) {
$this->data[$key] = $value;
}
public function get($key) {
return $this->data[$key] ?? null;
}
}
// 使用
DataShare::getInstance()->set('user', 'Alice');
echo DataShare::getInstance()->get('user'); // Alice
不同请求之间共享(Session / Cookie)
适用于用户登录状态、购物车等需要跨请求保持的数据。
// Session(服务端存储)
session_start();
$_SESSION['user_id'] = 123;
$_SESSION['cart'] = ['item1', 'item2'];
// Cookie(客户端存储,不安全,大小有限制)
setcookie('preference', 'dark_mode', time() + 86400);
echo $_COOKIE['preference']; // dark_mode
不同进程/服务之间共享(文件 / 数据库 / Redis)
适用于集群部署、负载均衡环境。
// 文件共享(简单但性能低)
file_put_contents('/tmp/shared_data.json', json_encode(['count' => 5]));
$data = json_decode(file_get_contents('/tmp/shared_data.json'), true);
// Redis(推荐,高性能)
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('shared_key', 'value');
echo $redis->get('shared_key'); // value
// MySQL 数据库共享
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$pdo->exec("INSERT INTO shared_data (key_name, value) VALUES ('last_login', NOW())");
跨服务器共享(共享文件系统 / 消息队列)
// NFS 共享文件系统
// 所有服务器挂载同一目录,通过文件共享数据
// RabbitMQ 消息队列
use PhpAmqpLib\Connection\AMQPStreamConnection;
$connection = new AMQPStreamConnection('localhost', 5672, 'user', 'password');
$channel = $connection->channel();
$channel->basic_publish(new AMQPMessage('Hello World!'), '', 'task_queue');
性能对比与推荐
| 方案 | 适合场景 | 性能 | 复杂度 |
|---|---|---|---|
| 单例模式 | 同一请求内 | 极快 | 低 |
| Session | 同一用户跨请求 | 中等 | 低 |
| Cookie | 少量客户端数据 | 快 | 低 |
| 文件 | 小规模共享 | 慢 | 低 |
| Redis/Memcached | 高并发集群 | 极快 | 中 |
| 数据库 | 需要持久化 | 中等 | 中 |
企业级最佳实践
// 使用依赖注入容器(如 Laravel 的服务容器)
// config/app.php
'app' => [
'shared_service' => function($app) {
return new SharedService();
}
];
// 任意位置获取
$sharedService = app('shared_service');
- 同一请求:用单例或依赖注入容器
- 同一用户跨请求:用 Session
- 不同用户/进程:用 Redis 或数据库
- 分布式系统:用消息队列或分布式缓存(Redis Cluster)
选择时考虑:数据一致性要求 > 性能需求 > 开发复杂度。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播