本篇文章给大家带来的内容是关于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 52872deab012c65a2c01c9e21fed070d就能得到当前主redis的ip和port。
解决方案:
增加配置切换脚本 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 (包含图文、视频、案例)
以上是Session共享:php和redis集群如何实现Session共享的详细内容。更多信息请关注PHP中文网其他相关文章!

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。

要保护应用免受与会话相关的XSS攻击,需采取以下措施:1.设置HttpOnly和Secure标志保护会话cookie。2.对所有用户输入进行输出编码。3.实施内容安全策略(CSP)限制脚本来源。通过这些策略,可以有效防护会话相关的XSS攻击,确保用户数据安全。

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显着提升应用在高并发环境下的效率。

thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceIsiseededeedeedeedeedeedeedto to to avoidperformance andununununununexpectedLogOgouts.3)

在PHP中,可以使用session_name()函数配置会话名称。具体步骤如下:1.使用session_name()函数设置会话名称,例如session_name("my_session")。2.在设置会话名称后,调用session_start()启动会话。配置会话名称可以避免多应用间的会话数据冲突,并增强安全性,但需注意会话名称的唯一性、安全性、长度和设置时机。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Linux新版
SublimeText3 Linux最新版

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Atom编辑器mac版下载
最流行的的开源编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中