【介绍】
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
sudo apt install php8.1-redis -y
CentOS + PHP7:
dnf install php-redis
【安装:编译redis】
安装 tcl :
要求版本8.5或者更新。
Ubuntu:
sudo apt install php8.1-redis -y
CentOS:
yum install tcl -y
如果没有tcl,会导致编译redis时make test时报错:
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 服务器:
sudo apt-get install redis-server
启动 Redis 服务器:
您使用以下命令启动 redis 服务器:
redis-server
启动 Redis 客户端:
redis-cli
打开一个 redis 提示符:
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(实证通过)
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目录下面:
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:
redis-server /usr/local/redis/etc/redis.conf
查看redis端口占用情况:
ss -tnlp | grep 6379
输出:
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}
启动:
service server-redis_1 start
报错:
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.
关闭所有:
redis-cli shutdown
关闭某个端口上的redis:
redis-cli -p 6379 shutdown
说明:关闭以后缓存数据会自动dump到硬盘上,硬盘地址见redis.conf中的dbfilename dump.rdb
查看redis信息:
redis-cli
输出:
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 配置文件说明:
配置文件路径:
/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
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
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
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
输出:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20180731/
在php.ini中添加:
; [redis] extension = "redis.so"
重启 Apache :
service httpd stop service httpd start
检查是否成功安装到php扩展:
/usr/local/php/bin/php -m | grep redis
输出:
redis
查看 Redis版本:
查看 phpinfo:
redis Redis Support enabled Redis Version 4.2.0 Git revision $Id: abb79ccb8385da07aeb815acf8550c41171ce0c7 $ Available serializers php
查看redis版本:
redis-cli --version
输出:
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 ,查询:
redis-cli 127.0.0.1:6379> select 0 OK
使用 keys * 命令显示所有缓存数据:
1) "w3tc__0_pgcache_333b8a1f0bc682ad42ebc1b62dc31015_ssl" 2) "w3tc__0_pgcache_7817b5b1c36a7253c38a3be7e079bb0d_ssl" 3) "w3tc__0_pgcache_da8d2f31ea161adee89615b58bd1919f" ...
可以看到 Redis 有 W3TC 的缓存数据了,Redis 缓存运行正常。