【介绍】
Redis是一个开源、支持网络、基于内存、键值对存储数据库,使用ANSI C编写。
Redis提供了持久化存储,重启了服务器后Redis依赖快照进行持久化,即使服务器刚开机启动也不会导致负载陡增。Redis缓存比较适合大流量的Wordpress。
Redis 由四个可执行文件:redis-benchmark、redis-cli、redis-server、redis-stat 这四个文件,加上一个redis.conf就构成了整个redis的最终可用包。
它们的作用如下:
1. redis-server:Redis服务器的daemon启动程序
2. redis-cli:Redis命令行操作工具
3. redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
4. redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况
【安装:php-redis】
Ubuntu + PHP8:
参考:https://amon.org/ubuntu-php
1 | sudo apt install php8.1-redis -y |
CentOS + PHP7:
1 | dnf install php-redis |
【安装:编译redis】
安装 tcl :
要求版本8.5或者更新。
Ubuntu:
1 | sudo apt install php8.1-redis -y |
CentOS:
1 | yum install tcl -y |
如果没有tcl,会导致编译redis时make test时报错:
1 2 3 4 5 6 7 | make test cd src && make test make [1]: Entering directory ` /root/redis-3 .2.4 /src ' You need tcl 8.5 or newer in order to run the Redis test make [1]: *** [ test ] Error 1 make [1]: Leaving directory ` /root/redis-3 .2.4 /src ' make : *** [ test ] Error 2 |
【安装:Redis (apt)】
参考:https://www.redis.com.cn/redis-installation-on-ubuntu.html
安装 Redis 服务器:
1 | sudo apt-get install redis-server |
启动 Redis 服务器:
您使用以下命令启动 redis 服务器:
1 | redis-server |
启动 Redis 客户端:
1 | redis-cli |
打开一个 redis 提示符:
1 | redis 127.0.0.1:6379> |
在上面的提示中,127.0.0.1 是机器的 IP 地址,6379 是 Redis 服务器运行的端口。
现在键入 ping 命令。返回 PONG 表示 Redis 已成功安装在您的系统上。
【安装:Redis (编译)】
参考:http://wiki.wooyun.org/server:redis
参考:http://www.runoob.com/redis/server-client-setname
参考:https://www.centos.bz/2017/11/linux-%E9%85%8D%E7%BD%AE-nginx%E3%80%81mysql%E3%80%81php-fpm%E3%80%81redis-%E5%BC%80%E6%9C%BA%E5%90%AF%E5%8A%A8/
最新版本:redis-7.0.5(实证通过)
1 | wget https: //github .com /redis/redis/archive/7 .0.5. tar .gz && tar zxvf 7.0.5. tar .gz && cd redis-7.0.5 && make && make test && make install |
注意:要求 GCC 5.3及以上版本,否则 make 不通过。
参考:https://amon.org/gcc
将可执行文件拷贝到到/usr/local/bin目录下面:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | cd /root/redis-6 .0.9 mkdir -p /usr/local/redis/ {bin,etc,var} cp -af src/{redis-benchmark,redis-check-aof,redis-cli,redis-sentinel,redis-server} /usr/local/redis/bin/ cp -a redis.conf /usr/local/redis/etc/ echo "export PATH=/usr/local/redis/bin:\$PATH" > /etc/profile .d /redis .sh . /etc/profile .d /redis .sh sed -i 's@pidfile.*@pidfile /var/run/redis.pid@' /usr/local/redis/etc/redis .conf sed -i "s@logfile.*@logfile /usr/local/redis/var/redis.log@" /usr/local/redis/etc/redis .conf sed -i "s@^dir.*@dir /usr/local/redis/var@" /usr/local/redis/etc/redis .conf sed -i 's@daemonize no@daemonize yes@' /usr/local/redis/etc/redis .conf [ -z "`grep ^maxmemory /usr/local/redis/etc/redis.conf`" ] && sed -i 's@maxmemory <bytes>@maxmemory <bytes>\nmaxmemory 360000000@' /usr/local/redis/etc/redis .conf wget http: //www .dwhd.org /script/Redis-server-init-CentOS -O /etc/init .d /redis-server chmod +x /etc/init .d /redis-server chkconfig --add redis-server chkconfig redis-server on chkconfig --list redis-server |
启动redis:
1 | redis-server /usr/local/redis/etc/redis .conf |
查看redis端口占用情况:
1 | ss -tnlp | grep 6379 |
输出:
1 | LISTEN 0 511 127.0.0.1:6379 *:* users :(( "redis-server" ,pid=16275,fd=4)) |
如果有多个redis:
参考:https://github.com/echocat/puppet-redis/issues/12
we dont use the default init scripts. We want to be able to install multiple redis instances on one machine. So the init scripts are renamed to redis-server_${redis_name}
启动:
1 | service server-redis_1 start |
报错:
1 2 | Redirecting to /bin/systemctl start server-redis.service Failed to start server-redis.service: Unit server-redis.service failed to load: No such file or directory. |
关闭所有:
1 | redis-cli shutdown |
关闭某个端口上的redis:
1 | redis-cli -p 6379 shutdown |
说明:关闭以后缓存数据会自动dump到硬盘上,硬盘地址见redis.conf中的dbfilename dump.rdb
查看redis信息:
1 | redis-cli |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 127.0.0.1:6379> info # Server redis_version:6.0.9 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:291fbcd02ebc3762 redis_mode:standalone os:Linux 5.0.8-1.el7.elrepo.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll atomicvar_api:atomic- builtin gcc_version:4.8.5 process_id:19980 run_id:e3ed8ffd3c5480695dcd89a2444795231113c559 tcp_port:6379 uptime_in_seconds:398 uptime_in_days:0 hz:10 configured_hz:10 lru_clock:12262435 executable: /root/redis-5 .0.4 /redis-server config_file: /usr/local/redis/etc/redis .conf ... |
Redis 配置文件说明:
配置文件路径:
1 | /usr/local/redis/etc/redis .conf |
注意,默认复制过去的redis.conf文件的daemonize参数为no,所以redis不会在后台运行,这时要测试,我们需要重新开一个终端。修改为yes则为后台运行redis。另外配置文件中规定了pid文件,log文件和数据文件的地址,如果有需要先修改,默认log信息定向到stdout。
下面是redis.conf的主要配置参数的意义:
daemonize:是否以后台daemon方式运行
pidfile:pid文件位置
port:监听的端口号
timeout:请求超时时间
loglevel:log信息级别
logfile:log文件位置
databases:开启数据库的数量
save * *:保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
rdbcompression:是否使用压缩
dbfilename:数据快照文件名(只是文件名,不包括目录)
dir:数据快照的保存目录(这个是目录)
appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
这时你可以打开一个终端进行测试了,配置文件中默认的监听端口是6379
参考:http://www.cnblogs.com/zhaoguihua/p/redis-003
我们说Redis是一个强大的Key-Value存储系统,在前面我们已遇到了两个问题:
1. redis server 启动后,独占进程,能不能修改为后台服务呢?
2. redis server 服务是单线程的,而机器是多核的,能不能在同一台机器上开启多个实例更充分的利用 cpu 资源呢?但6379端口已经被前一个实例绑定,肯定会有冲突,那能不能修改默认端口呢?
答案是肯定的,redis 提供了灵活的配置方式,一种可以通过配置文件来配置,另一种你可以在运行时通过 config set 命令来修改配置。
我们先来看看配置文件吧。
殊不知我们在前面启动 server 的时候敲的 ./redis-server 命令,如果后面不附加参数,它是按默认配置来启动 redis 服务的,其实它后面还可以附加一个配置文件路径的参数。这个配置文件在哪?在redis根目录下有一个redis.conf文件,这个文件为了提供了默认的配置和示例。你不要轻易去动这个文件,除非你非常牛逼。我们还是保险起见先复制一个副本吧。
Redis 配置文件示例:
参考:https://github.com/linli8/cnblogs/blob/master/redis%E5%89%AF%E6%9C%AC.conf
【安装:PHP的Redis扩展】
PHP Redis是Redis的PHP扩展。
参考:https://github.com/phpredis/phpredis/blob/develop/INSTALL.markdown
参考:https://github.com/phpredis/phpredis/issues/508
参考:https://www.80uncle.com/php7-make-make-install-phpredis-error
1 2 3 4 | git clone https: //github .com /phpredis/phpredis .git && cd phpredis phpize . /configure --with-php-config= /usr/local/php/bin/php-config make && make install |
PHP7专用分支:
参考:https://blog.csdn.net/jartins/article/details/80371257
1 2 3 4 | git clone https: //github .com /nicolasff/phpredis && cd phpredis phpize . /configure --with-php-config= /usr/local/php/bin/php-config make && make install |
PHP5使用较早版本:
参考:https://github.com/phpredis/phpredis/issues/1539
1 2 3 | wget -O phpredis-4.3.0. tar .gz https: //github .com /phpredis/phpredis/archive/4 .3.0. tar .gz && tar xvfz phpredis-4.3.0. tar .gz && cd phpredis-4.3.0 phpize && . /configure --with-php-config= /usr/local/php/bin/php-config make && make install |
输出:
1 | Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20180731/ |
在php.ini中添加:
1 2 | ; [redis] extension = "redis.so" |
重启 Apache :
1 2 | service httpd stop service httpd start |
检查是否成功安装到php扩展:
1 | /usr/local/php/bin/php -m | grep redis |
输出:
1 | redis |
查看 Redis版本:
查看 phpinfo:
1 2 3 4 5 | redis Redis Support enabled Redis Version 4.2.0 Git revision $Id: abb79ccb8385da07aeb815acf8550c41171ce0c7 $ Available serializers php |
查看redis版本:
1 | redis-cli --version |
输出:
1 | redis-cli 5.0.4 |
两处Redis版本不同的原因:
1. redis-cli –version 显示的是linux系统的redis版本
2. phpinfo里显示的是WEB Server中配置的版本。
安装完成。
在w3-total-cache中的测试:
参考:https://segmentfault.com/a/1190000011146150
主站用的 database 是默认的 0 ,查询:
1 2 3 | redis-cli 127.0.0.1:6379> select 0 OK |
使用 keys * 命令显示所有缓存数据:
1 2 3 4 | 1) "w3tc__0_pgcache_333b8a1f0bc682ad42ebc1b62dc31015_ssl" 2) "w3tc__0_pgcache_7817b5b1c36a7253c38a3be7e079bb0d_ssl" 3) "w3tc__0_pgcache_da8d2f31ea161adee89615b58bd1919f" ... |
可以看到 Redis 有 W3TC 的缓存数据了,Redis 缓存运行正常。