1.redis安装
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar -xvf redis-5.0.3.tar.gz
cd redis-5.0.3/src
make //编译安装redis
vim /etc/profile 末尾追加export PATH=$PATH:[这里写redis-5.0.3的路径]/src
source /etc/profile 或者重启
然后就可以直接使用 redis-server,redis-cli等命令了
2. 常用redis配置
redis-server [配置文件名] //配置文件启动
redis-server --keyword1 argument1 --keyword2 argument2 .... //临时参数启动
常用配置项:
#端口号 (默认6379)
port 80
#是否以守护进程启动 (默认no)
daemonize yes
#认证密码 (默认不需要密码)
requirepass 1111
#是否以保护模式启动 (默认yes)
protected-mode no
#bind绑定的是本机的ip地址,如果redis服务器上有ip1和ip2两个ip地址,bind ip1 表示只有经过 ip1才可以访问redis 参考https://blog.csdn.net/cw_hello1/article/details/8344401
bind 127.0.0.1
#主从模式中主服务器地址
slaveof 127.0.0.1 6379
#配置主从的时候,如果主服务器配置了密码,从服务器中需要配置主服务器的密码,否则会同步 失败, 报错: MASTER aborted replication with an error: NOAUTH Authentication required.
masterauth 1111
#从服务器是否只读, 为no时候,从服务器可以增删改,但是修改不会同步到主服务器 (默认yes)
replica-read-only no
#rdb的持久化方式的配置,[900 | 300 | 60] 秒内达到 [1 | 10 | 10000] 次修改就持久化到rdb文件
临时参数启动时,配置方法为 redis-server --port 9001 --save 900 1 --save 300 10
save 900 1
save 300 10
save 60 10000
#指定rdb文件的路径和文件名, 不同端口的redis实例可以使用同一个rdb文件
dir /home/root/redis
dbfilename dump.rdb
#开启aof持久化方式 (默认 no)
appendonly yes
#指定aof日志文件的文件名, 路径同样用dir指定
appendfilename appendonly.aof
#aof持久化的策略,每秒 | 修改后立刻 | 不持久化 三种策略 (默认everysec)
appendfsync [everysec | always | no]
3. 开放远程连接
[server端] 守护进程的方式启动一个redis实例,端口9001,非保护模式
redis-server --port 9001 --daemonize yes --protected-mode no
vim /etc/sysconfig/iptables 添加 -A INPUT -p tcp -m tcp --dport 9001 -j ACCEPT
如果不存在这个文件,可能是没安装iptables, yum install iptables-services
service iptables restart
防火墙开放9001号端口
如果用iptables还是无法开放端口
firewall-cmd --add-port=9001/tcp --permanent
systemctl restart firewalld
firewall-cmd --query-port=9001/tcp 查看端口是否开放
或者直接关闭防火墙 systemctl stop firewalld
redis-cli -h [host] -p [port]
如果有进程监听端口,但是端口没有开放,报错
Could not connect to Redis at 10.72.58.241:7123: No route to host
Could not connect to Redis at 10.72.58.241:7123: No route to host
如果端口开放了, 但是没有进程监听端口,报错:
Could not connect to Redis at 10.72.58.241:9001: Connection retfused
Could not connect to Redis at 10.72.58.241:9001: Connection refused
4. redis持久化方式
redis是内存数据库,最终要选择一定的策略将数据保存在磁盘上才能实现数据持久化. 当然如果只是拿redis做缓存之类的辅助功能,不做数据持久化也没有关系
redis有rdb和aof两种持久化方式,rdb是快照的形式,保存是redis数据库在某个时刻的数据状态,aof类似于mysql的binlog日志,记录的是每一次对redis的写操作. 文档: http://www.redis.cn/topics/persistence.html
通过配置save参数启用rdb持久化,如果不想使用rdb持久化,配置save "" 即可
save 900 1
save 300 10
save 60 10000
就像定时任务一样,每隔900秒检测是否超过1个key修改,是就刷新数据到rdb文件
appendonly yes 开启aof持久化
rdb和aof两种方式并不冲突,可以同时使用两种持久化方式
理论上rdb持久化可能丢失数据,比如config set save "900 1"的时候,最多可能丢失900秒的数据
但是执行下面三种操作都触发了redis关机时的自动持久化,所以即使宕机一般也不会丢失数据
(1 )执行shutdown的redis命令
(2) kill 掉进程
(3) 非守护进程模式下 ctrl + c
打印如下日志:
7861:M 24 Jun 2019 01:03:45.567 * Saving the final RDB snapshot before exiting.
7861:M 24 Jun 2019 01:03:45.570 * DB saved on disk
7861:M 24 Jun 2019 01:03:45.570 * Removing the pid file.
7861:M 24 Jun 2019 01:03:45.570 # Redis is now ready to exit, bye bye...
aof持久化方式下 appendfsync 为 always时,数据是很安全的
appendfsync为everysec时,理论上最多丢失1s的数据,但是执行前面三种操作模拟宕机的时候,redis同样在关机前执行了一次aof的持久化操作,日志如下:
7713:signal-handler (1561913121) Received SIGTERM scheduling shutdown...
7713:M 01 Jul 2019 00:45:22.050 # User requested shutdown...
7713:M 01 Jul 2019 00:45:22.050 * Calling fsync() on the AOF file.
7713:M 01 Jul 2019 00:45:22.050 # Redis is now ready to exit, bye bye...
备注: 操作系统: centos 7 ; redis版本: 5.0.3