セッション共有: PHP クラスターと Redis クラスターがセッション共有を実装する方法
本篇文章给大家带来的内容是关于Session共享:php和redis集群如何实现Session共享,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
一、redis 数据库集群安装
软件版本redis-3.2.11、php-redis-2.2.4
角色 |
IP 地址 |
主机名 |
Redis 数据库服务器 |
192.168.1.41 |
Redis41 |
Slave 1 Redis 数据库服务器 |
192.168.1.42 |
Redis42 |
Slave 2 Redis 数据库服务器 |
192.168.1.43 |
Redis43 |
VIP 地址 |
192.168.1.40 |
|
三台数据库同样配置
adduser -s /sbin/nologin -d /var/lib/redis redis yum -y install gcc gcc-c++ tar -xf redis-3.2.11.tar.gz cd redis-3.2.11/ make MALLOC=libc //用MALLOC这个 环境变量去编译Redis,而且libc 并不是默认的 分配器,默认的是 jemalloc make PREFIX=/usr/local/redis install //指定安装路径 mkdir -p /usr/local/redis/conf cp redis.conf /usr/local/redis/conf/ cp sentinel.conf /usr/local/redis/conf/
常用配置选项/usr/local/redis/conf/redis.conf
– port 6379 // 端口 – bind 192.168.1.41 //IP 地址 – tcp-backlog 511 //tcp 连接总数 – timeout 0 // 连接超时时间 – tcp-keepalive 300 // 长连接时间 – daemonize yes // 守护进程方式运行 – databases 16 // 数据库个数 – logfile /var/log/redis_6379.log //pid 文件 – maxclients 10000 // 并发连接数量 – dir /var/lib/redis/6379 // 数据库目录
配置Redis能够让systemclt系统管理(非必须)
vim /usr/lib/systemd/system/redis.server
[Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis Group=redis Type=simple ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf ExecStop=/usr/local/redis/bin/redis-cli shutdown Restart=always RestartSec=42s [Install] WantedBy=multi-user.target
二、安装 php-redis 扩展
配置 php 支持 Redis
tar zxvf phpredis-2.2.4.tar.gz cd phpredis-2.2.4 /usr/local/php/bin/phpize //用phpize生成configure配置文件 ./configure --enable-redis --with-php-config=/usr/local/php/bin/php-config make && make install php -m |grep redis
编写测试文件 redis.php 进行页面测试
<?php $redis = new redis(); $redis->connect('192.168.1.41',6379); $redis->set('redistest','666666'); echo $redis->get('redistest'); ?>
三、redis 服务器集群高可用
redis集群实现大概有以下几种方式:
redis-cluster, 官方提供的集群搭建方案(过于重量级,比较适合后期数据量较大的时候的使用) redis+keepalive 虚拟IP,多台配置非常复杂,不宜维护,需要 slaveof no one 脚本 redis+zookeeper 需要引入zookeeper,对现有代码变动较大 redis+sentinel redis自带监控中间件,哨兵模式 配置三台 redis 服务器 配置主从关系,在 slave 上添加配置 slaveof 192.168.1.41 6379 查看集群主从关系 redis-cli -h 192.168.1.41 -p 6379 info replication
修改 redis 哨兵配置文件 sentinel.conf
bind 192.168.1.41 protected-mode no daemonize yes port 26379 dir /tmp sentinel monitor mymaster 192.168.1.41 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 5000 sentinel client-reconfig-script mymaster /usr/local/redis/conf/reconfig.sh 分别在主,从上启动 sentinel redis-sentinel /usr/local/redis/conf/sentinel.conf 查看哨兵状态 redis-cli -h 192.168.1.41 -p 26379 info sentinel
四、客户端兼容问题
客户端程序(如PHP程序)连接redis时需要ip和port,但redis-server进行故障转移时,主数据库是变化的,所以ip地址也是变化的,客户端程序如何感知当前主redis的ip地址和端口呢?
redis-sentinel提供了接口,请求任何一个sentinel,发送SENTINEL get-master-addr-by-name
解决方案:
增加配置切换脚本 sentinel.conf,当主数据库服务宕机时,实现VIP漂移自动切换主从。
sentinel client-reconfig-script mymaster /usr/local/redis/conf/reconfig.sh
#!/bin/bash #mymaster leader start 192.168.1.41 6379 192.168.1.42 6379 VIP="192.168.1.40/24" local_ip=$(ip addr show dev eth0 |awk '$1=="inet"{print $2}') if [[ "${local_ip%%/*}" == "$4" ]];then /usr/sbin/ifconfig eth0:1 down elif [[ "${local_ip%%/*}" == "$6" ]];then /usr/sbin/ifconfig eth0:1 "${VIP}" fi
相关推荐:
thinkphp5中belongsToMany() 模块名称的命名问题解决
php中文网学习专题:php session (包含图文、视频、案例)
以上がセッション共有: PHP クラスターと Redis クラスターがセッション共有を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
