


Session sharing: How php and redis clusters implement session sharing
本篇文章给大家带来的内容是关于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 (包含图文、视频、案例)
The above is the detailed content of Session sharing: How php and redis clusters implement session sharing. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

In PHP, password_hash and password_verify functions should be used to implement secure password hashing, and MD5 or SHA1 should not be used. 1) password_hash generates a hash containing salt values to enhance security. 2) Password_verify verify password and ensure security by comparing hash values. 3) MD5 and SHA1 are vulnerable and lack salt values, and are not suitable for modern password security.

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP type prompts to improve code quality and readability. 1) Scalar type tips: Since PHP7.0, basic data types are allowed to be specified in function parameters, such as int, float, etc. 2) Return type prompt: Ensure the consistency of the function return value type. 3) Union type prompt: Since PHP8.0, multiple types are allowed to be specified in function parameters or return values. 4) Nullable type prompt: Allows to include null values and handle functions that may return null values.

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

PHP and Python have their own advantages and disadvantages, and the choice depends on project needs and personal preferences. 1.PHP is suitable for rapid development and maintenance of large-scale web applications. 2. Python dominates the field of data science and machine learning.
