• 售前

  • 售后

热门帖子
入门百科

redis服务器情况下mysql实现lnmp架构缓存

[复制链接]
墙和鸡蛋 显示全部楼层 发表于 2021-10-26 13:32:23 |阅读模式 打印 上一主题 下一主题
设置情况:redhat6.5
server1:redis(172.25.254.1)
server2:php(172.25.254.2)
server3:mysql(172.25.254.3)
设置步骤:
server2:
1、server2安装php的redis相应模块

2、nginx安装
  1. [root@server2 php-fpm.d]# rpm -ivh nginx-1.8.0-1.el6.ngx.x86_64.rpm
  2. warning: nginx-1.8.0-1.el6.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
  3. Preparing...        ########################################### [100%]
  4.   1:nginx         ########################################### [100%]
  5. ----------------------------------------------------------------------
  6. Thanks for using nginx!
  7. Please find the official documentation for nginx here:
  8. * https://nginx.org/en/docs/
  9. Commercial subscriptions for nginx are available on:
  10. * https://nginx.com/products/
  11. ----------------------------------------------------------------------
  12. [root@server2 php-fpm.d]# id nginx
  13. uid=498(nginx) gid=499(nginx) groups=499(nginx)
复制代码
3、nginx和php设置
1、php设置
  1. [root@server2 php-fpm.d]# cd /etc/php-fpm.d/
  2. [root@server2 php-fpm.d]# id nginx
  3. uid=498(nginx) gid=499(nginx) groups=499(nginx)
  4. [root@server2 php-fpm.d]# vim www.conf
  5. 39 user = nginx
  6. 41 group = nginx
  7. [root@server2 php-fpm.d]# vim /etc/php.ini
  8. 946 date.timezone = Asia/Shanghai
  9. [root@server2 php-fpm.d]# /etc/init.d/php-fpm start
  10. Starting php-fpm:                     [ OK ]
  11. [root@server2 php-fpm.d]# netstat -antlp | grep php
  12. tcp    0   0 127.0.0.1:9000       0.0.0.0:*          LISTEN   1125/php-fpm   
  13. [root@server2 php-fpm.d]# vim /etc/php.ini
复制代码
2、nginx设置
  1. [root@server2 ~]# cd /etc/nginx/conf.d/
  2. [root@server2 conf.d]# ls
  3. default.conf example_ssl.conf
  4. [root@server2 conf.d]# vim default.conf
  5. 10     index index.php index.html index.htm;
  6. 30   location ~ \.php$ {
  7. 31     root      html;
  8. 32     fastcgi_pass  127.0.0.1:9000;
  9. 33     fastcgi_index index.php;
  10. 34     fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script  _name;
  11. 35     include    fastcgi_params;
  12. 36   }
  13. [root@server2 conf.d]# nginx -t
  14. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  15. nginx: configuration file /etc/nginx/nginx.conf test is successful
  16. [root@server2 conf.d]# nginx
  17. [root@server2 conf.d]# netstat -anplt |grep nginx
  18. tcp    0   0 0.0.0.0:80         0.0.0.0:*          LISTEN   1141/nginx
复制代码

php测试:
  1. [root@server2 conf.d]# cd /usr/share/nginx/html/
  2. [root@server2 html]# vim index.php
  3. [root@server2 html]# cat index.php
  4. <!--php
  5. phpinfo()
  6. -->
  7. [root@server2 html]# /etc/init.d/php-fpm reload
  8. Reloading php-fpm: [14-Jul-2018 01:09:13] NOTICE: configuration file /etc/php-fpm.conf test is successful
  9.                               [ OK ]
复制代码
物理机访问:

4、php设置redis+mysql
  1. [root@server2 ~]# cd /usr/share/nginx/html/
  2. [root@server2 html]# vim test.php
  3.   <!--php
  4.       $redis = new Redis();
  5.       $redis--->connect('172.25.254.1',6379) or die ("could net connect redi  s server");
  6.    #   $query = "select * from test limit 9";
  7.       $query = "select * from test";
  8.       for ($key = 1; $key < 10; $key++)
  9.       {
  10.           if (!$redis->get($key))
  11.           {
  12.              $connect = mysql_connect('172.25.254.3','redis','wes  tos');
  13.              mysql_select_db(test);
  14.              $result = mysql_query($query);
  15.              //如果没有找到$key,就将该查询sql的结果缓存到redis
  16.              while ($row = mysql_fetch_assoc($result))
  17.              {
  18.                  $redis->set($row['id'],$row['name']);
  19.              }
  20.              $myserver = 'mysql';
  21.              break;
  22.          }
  23.          else
  24.          {
  25.              $myserver = "redis";
  26.              $data[$key] = $redis->get($key);
  27.          }
  28.      }
  29.      echo $myserver;
  30.      echo "
  31. ";
  32.      for ($key = 1; $key < 10; $key++)
  33.      {
  34.         echo "number is $key";
  35.         echo "
  36. ";
  37.         echo "name is $data[$key]"  ;
  38.         echo "
  39. ";
  40.    }
  41. >
复制代码
5、添加php支持的redis模块
  1. [root@server2 ~]# unzip phpredis-master.zip
  2. [root@server2 ~]# cd phpredis-master
  3. [root@server2 phpredis-master]# phpize
  4. Configuring for:
  5. PHP Api Version:     20090626
  6. Zend Module Api No:   20090626
  7. Zend Extension Api No:  220090626
  8. [root@server2 phpredis-master]# ls
  9. acinclude.m4  config.sub   library.c     README.markdown
  10. aclocal.m4   configure    library.h     redis.c
  11. autom4te.cache configure.in  ltmain.sh     redis_session.c
  12. build      CREDITS     Makefile.global  redis_session.h
  13. common.h    debian     missing      run-tests.php
  14. config.guess  debian.control mkdeb-apache2.sh serialize.list
  15. config.h.in   igbinary    mkinstalldirs   tests
  16. config.m4    install-sh   php_redis.h
  17. [root@server2 phpredis-master]# ./configure
  18. [root@server2 phpredis-master]# make && make install
  19. [root@server2 ~]# cd /etc/php.d/
  20. [root@server2 php.d]# ls
  21. curl.ini   json.ini   mysql.ini   pdo_sqlite.ini zip.ini
  22. fileinfo.ini mbstring.ini pdo.ini    phar.ini
  23. gd.ini    mysqli.ini  pdo_mysql.ini sqlite3.ini
  24. [root@server2 php.d]# cp mysql.ini redis.ini
  25. [root@server2 php.d]# vim redis.ini
  26. 2 extension=redis.so
  27. [root@server2 php.d]# /etc/init.d/php-fpm reload
  28. Reloading php-fpm: [14-Jul-2018 01:21:56] NOTICE: configuration file /etc/php-fpm.conf test is successful
  29.                               [ OK ]
  30. [root@server2 php.d]# php -m |grep redis
  31. redis
  32. server3:mysql配置
复制代码
1、安装mysql-server
  1. [root@server3 ~]# rpm -qa | grep mysql
  2. mysql-community-common-5.7.17-1.el6.x86_64
  3. mysql-community-client-5.7.17-1.el6.x86_64
  4. mysql-community-libs-compat-5.7.17-1.el6.x86_64
  5. mha4mysql-node-0.56-0.el6.noarch
  6. mysql-community-libs-5.7.17-1.el6.x86_64
  7. mysql-community-server-5.7.17-1.el6.x86_64
  8. [root@server3 ~]# rpm -e `rpm -qa|grep mysql` --nodeps  ##不考虑依赖性删除mysql
  9. warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave
  10. [root@server3 ~]# rpm -qa | grep mysql
  11. [root@server3 ~]# cd /var/lib/mysql/
  12. [root@server3 mysql]# rm -fr *
  13. [root@server3 mysql]# ls
  14. [root@server3 mysql]# yum install -y mysql-server ##安装
复制代码
2、开启mysql,并导入测试数据库
  1. [root@server3 ~]# /etc/init.d/mysqld start
  2. [root@server3 ~]# mysql < test.sql
  3. [root@server3 ~]# mysql < test.sql
  4. [root@server3 ~]# cat test.sql
  5. use test;
  6. CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  7. INSERT INTO `test` VALUES (1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6'),(7,'test7'),(8,'test8'),(9,'test9');
  8. #DELIMITER $$
  9. #CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
  10. #  SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));
  11. # END$$
  12. #DELIMITER ;
复制代码
3、数据库授权
  1. [root@server3 ~]# mysql
  2. mysql> grant all on test.* to redis@'%' identified by 'westos';
  3. Query OK, 0 rows affected (0.00 sec)
  4. mysql> select * from test.test;
  5. +----+-------+
  6. | id | name |
  7. +----+-------+
  8. | 1 | test1 |
  9. | 2 | test2 |
  10. | 3 | test3 |
  11. | 4 | test4 |
  12. | 5 | test5 |
  13. | 6 | test6 |
  14. | 7 | test7 |
  15. | 8 | test8 |
  16. | 9 | test9 |
  17. +----+-------+
  18. 9 rows in set (0.00 sec)
复制代码
测试:访问172.25.254.2/test.php
1、php默认从redis 索取数据,第一次redis无缓存,则php从mysql'索取数据
第一次无缓存

第二次索取数据后:

redis节点也可查察
  1. [root@server1 redis-4.0.1]# redis-cli
  2. 127.0.0.1:6379> get 2
  3. "test2"
复制代码
2、将数据库server3节点内容更新并删除节点,则php从数据库索取数据节点更新内容
  1. mysql> update test.test set name='westos' where id=1;
  2. Query OK, 1 row affected (0.05 sec)
  3. Rows matched: 1 Changed: 1 Warnings: 0
  4. mysql> select * from test.test;
  5. +----+--------+
  6. | id | name  |
  7. +----+--------+
  8. | 1 | westos |
  9. | 2 | test2 |
  10. | 3 | test3 |
  11. | 4 | test4 |
  12. | 5 | test5 |
  13. | 6 | test6 |
  14. | 7 | test7 |
  15. | 8 | test8 |
  16. | 9 | test9 |
  17. +----+--------+
  18. 9 rows in set (0.00 sec)
复制代码
redis的master主机删除节点内容
  1. [root@server1 redis-4.0.1]# redis-cli
  2. 127.0.0.1:6379> get 2
  3. "test2"127.0.0.1:6379> del 1(integer) 1127.0.0.1:6379> get 1(nil)
复制代码
刷新页面,再次访问

以上redis 作为 mysql 的缓存服务器,但是假如更新了 mysql,redis中仍旧会有对应的 KEY,数据就不会更新,此时就会出现 mysql 和 redis 数据不同等的情况。
总结
以上所述是小编给各人介绍的redis服务器情况下mysql实现lnmp架构缓存,盼望对各人有所资助,假如各人有任何疑问请给我留言,小编会实时回复各人的。在此也非常感谢各人对草根技术分享网站的支持!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作