单节点安装软件包
环境准备
主机:192.168.1.16
主机配置:2C 4G
下载软件包
wget https://download.redis.io/releases/redis-6.2.12.tar.gz -P /root
解压压缩包
tar -xf redis-6.2.12.tar.gz
安装依赖包
yum -y install make
编译安装redis
make PREFIX=/usr/local/redis install
拷贝配置文件至redis安装目录
cp redis.conf /usr/local/redis/
修改配置文件
vi /usr/local/redis/redis.conf
bind 0.0.0.0 # 监听地址,默认是监听本地回环地址,可以修改为0.0.0.0,表示监听所有ip地址,如果要监听多个,用空格隔开。
protected-mode yes # 开启保护模式,如果没有配置bind,而是直接注释了bind,那么远程服务器是不能直接查看键值数据的,可以设置为no(不建议),或者设置bind监听地址,不要直接注释;再或者设置密码requirepass 123456
requirepass 123456 #设置redis登录访问密码
port 6379 # 监听端口,可以修改
tcp-backlog 511 # ack队列长度
timeout 0 # 客户端与服务端的连接超时时间,0表示永不超时
会话探测时间。
tcp-keepalive 300 #redis服务端默认每隔300s发ack包给客户端,探测客户端是否还在,还在就保持连接。
daemonize yes # 默认情况下redis是在前台运行,可以设置为yes,让redis以守护进程在后台运行。
supervised no #表示 Redis 不使用任何特殊的系统级别的进程管理方式(stsemd或者upstart)
pidfile /var/run/redis_6379.pid #pid文件存放路径
oglevel notice # 日志级别,有debug,verbose,notice,warning
logfile /usr/local/redis/redis.log # 日志路径
syslog-enabled no # 是否把日志输出到系统日志,默认为no
databases 16 # 设置数据库个数,从0号数据库开始,默认为17个
always-show-logo yes # 在启动时是否显示日志
save 900 1 # 在900秒内修改一个键触发快照
save 300 10 # 在300秒修改10个键触发快照
save 60 10000 # 在60秒修改10000个键触发快照
stop-writes-on-bgsave-error yes # 在快照出现问题时,禁止redis写入操作
rdbcompression yes # 进行持久化时,是否压缩,默认为压缩
rdbchecksum yes # 在保存或者加载rdb数据库时是否开启校验
dbfilename dump.rdb # rdb文件名,可以修改
dir /usr/local/redis/data # 数据库文件存放路径
创建redis数据存放目录
mkdir /usr/local/redis/data
启动redis服务
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &
查看日志,出现如下告警信息提示
cat /usr/local/redis/redis.log
上面告警解决方法如下
解决方法如下
cat >> /etc/sysctl.conf << EOF
net.core.somaxconn=512
vm.overcommit_memory=1
EOF
echo never > /sys/kernel/mm/transparent_hugepage/enabled
sysctl -p
重新启动redis服务
重启redis服务
下面的方法进行停止时,会把密码泄露在终端,可以登录redis服务后,执行“SHUTDOWN”
/usr/local/redis/bin/redis-cli -a 123456 -p 6379 shutdown #不建议使用此方法停止redis服务
停止redis建议采用下图方法进行停止
启动redis
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &
再次查看redis日志无告警内容输出
cat /usr/local/redis/redis.log
登录验证
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456 #注意此方式不安装会造成密码泄露,采取下面方式进行登录
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379
auth 123456
验证是否登录成功
ping #会返回PONG
此时redis服务已经部署完成
Redis半持久化rdb模式设置:
配置文件修改redis.conf
vi /usr/local/redis/redis.conf
bind 0.0.0.0
protected-mode yes
requirepass 123456
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
oglevel notice
logfile /usr/local/redis/redis.log
syslog-enabled no
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /usr/local/redis/data
修改完配置文件后重新启动redis服务
停止redis(需登录redis服务执行)
SHUTDOWN
启动redis
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
重新启动后会生成配置文件指定的rdb文件
ls /usr/local/redis/data
redis全持久化AOF模式设置(aof模式和rdb模式实可以同时开启)
配置文件修改redis.conf
vi /usr/local/redis/redis.conf
bind 0.0.0.0
protected-mode yes
requirepass 123456
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
oglevel notice
logfile /usr/local/redis/redis.log
syslog-enabled no
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /usr/local/redis/data #此参数和rdb存放路径相同,如果rdb和aof同时开启会存放在同一个路径
appendonly yes #开启全持久化aof模式
appendfilename “appendonly.aof” #自定义aof文件名
appendfsync everysec #每秒同步到磁盘
appendfsync no #默认为no,开启yes为写入动作由操作系统自己完成,同步效率低不建议开启
no-appendfsync-on-rewrite no #设置rbd写磁盘过程中,是否停止aof,负载过高可以开启。但是并不代表开启了rdb写磁盘完成,aof不执行,而是rdb写磁盘完成后aof只进行同步
auto-aof-rewrite-percentage 100 #aof相对上次文件大小,达到100%时重写。
auto-aof-rewrite-min-size 64mb #aof文件至少超过64M时进行重写
aof-load-truncated yes #开启读取不完整的aof文件,将其中可用的数据写入内存当中
修改完配置文件后重新启动redis服务
停止redis(需登录redis执行)
SHUTDOWN
启动redis服务
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
重新启动后会生成配置文件指定的aof文件
ls /usr/local/redis/data
redis主从复制
环境准备
主机两台:192.168.1.16;192.168.1.17
配置:2C 4G
两台军下载redis软件包(主节点和从节点相同操作)
wget https://download.redis.io/releases/redis-6.2.12.tar.gz -P /root
解压软件包(主节点和从节点相同操作)
tar -xf redis-6.2.12.tar.gz
安装软件包(主节点和从节点相同操作)
安装依赖包
yum -y install make
编译安装redis
make PREFIX=/usr/local/redis install
拷贝配置文件至redis安装目录
修改配置文件
cp redis.conf /usr/local/redis/
主节点修改配置文件
vi /usr/local/redis/redis.conf
bind 0.0.0.0
protected-mode yes
requirepass 123456
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /usr/local/redis/redis.log
syslog-enabled no
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /usr/local/redis/data
appendonly yes
appendfilename “appendonly.aof”
#appendfsync always
appendfsync everysec
#appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100 #aof相对上次文件大小,达到100%时重写。
auto-aof-rewrite-min-size 64mb #aof文件至少超过64M时进行重写
aof-load-truncated yes #开启读取不完整的aof文件,将其中可用的数据写入内存当中
replicaof no one #no one表示为不是任何节点的从节点
masterauth 123456 #从节点连接主节点的密码
从节点修改配置文件
vi /usr/local/redis/redis.conf
bind 0.0.0.0
protected-mode yes
requirepass 123456
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /usr/local/redis/redis.log
syslog-enabled no
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /usr/local/redis/data
appendonly yes
appendfilename “appendonly.aof”
#appendfsync always
appendfsync everysec
#appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100 #aof相对上次文件大小,达到100%时重写。
auto-aof-rewrite-min-size 64mb #aof文件至少超过64M时进行重写
aof-load-truncated yes #开启读取不完整的aof文件,将其中可用的数据写入内存当中
replicaof 192.168.1.16 6379 #主节点ip以及主节点的端口
masterauth 123456 #连接主节点的密码
主节点、从节点依次启动redis服务
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &
主节点和从节点启动redis后,登录redis查看集群信息
在主节点查看信息
redis-cli -h 192.168.1.16 -p 6379
auth 123456
info replication
在从节点查看信息
redis-cli -h 192.168.1.16 -p 6379
auth 123456
info replication
在主节点手动创建数据,验证从节点是否进行同步
主节点插入数据 1:10 如下操作
从节点查看数据是否同步
由上图得知,数据以进行同步,此时redis主从同步已设置完成。
Redis哨兵模式
主从节点一致,配置文件:
vi /usr/local/redis/sentinel.conf
daemonize yes #是否以守护进程模式运行哨兵
pidfile “/usr/local/redis/redis-sentinel.pid” #哨兵进程的 PID 文件路径
logfile “/usr/local/redis/sentinel.log” #哨兵日志文件路径
sentinel monitor master 192.168.1.16 6379 2 #配置监控的 Redis 实例,该配置项的语法为 sentinel monitor <master-name> <ip> <port> <quorum>
,其中 master-name
为需要监控的 Redis 实例名, ip
和 port
分别为 Redis 实例的 IP 和端口号, quorum
为最小投票数。
sentinel down-after-milliseconds master 10000 #指定哨兵认为 Redis 实例已经失效的时间(毫秒)
启动主节点和从节点哨兵模式程序
/usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf
验证哨兵模式
把主节点手动关闭模拟主节点宕机
停止redis(需登录redis执行)
SHUTDOWN
查看主节点哨兵进程是否启动
ps -elf | grep sentinel
ss -tuanpl | grep sentinel
登录从节点查看信息
info replication
由上图可以看出redis主节点为“down”
回复主节点服务,验证从节点显示主节点信息是否为up
主节点执行如下启动redis服务:
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &
从节点查看信息
info replication
由上图看出,显示主节点的信息为“up”。
redis哨兵模式设置完成。
Redis基础命令使用
set key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]
说明:key为指定的键值对的键,value为键值对的值。
‘EX seconds或
PX milliseconds:设置键的过期时间,以秒或毫秒为单位。例如,
SET mykey “Hello” EX 10 将在10秒后过期,并将从Redis中自动删除该键。 ‘EXAT timestamp
或 PXAT milliseconds-timestamp
:设置键在指定的时间戳过期
KEEPTTL
: 保留现有键的到期时间.如果存在过期时间的key调用set命令并携带该命令会保留原有的过期时间
NX
或 XX
:设置键的行为,当键不存在时,或仅在键存在时,才创建该键。例如,SET mykey "Hello" NX
仅在mykey
不存在时创建该键
GET
:仅返回从 GET
命令检索键所返回的值。例如,SET mykey "Hello" GET
将返回 "Hello"
(而不是OK或null)
注意如果某个键值对已存在,当再次set key value时是更新键值对的值。例如:已存在键值对”2:2” ,当再次执行时会替换原有的键值,set 2 3 这时键值对为”2:3”
SELECT index
说明:用于切换库。例如sekect 0切换到0库,select 1切换到1库。
EXISTS key
说明:是用于查找当前库是否存在想要查询的键值对。例如:EXISTS test-key 查询当前库是否存在 test-key 这个键。
KEYS pattern
说明:*用于查询当前所在库所有的键。?用于查询单个字符。[abc]用于查询a或者b或者c。
GET KEY
说明:用于查询当前库的键值对。例如GET test-key用于查看test-key键对应的键值。
GETSET key value
说明:用于修改key对应的value。例如已存在键值对 2:3 让其修改为2:10,执行getset 2 10即可修改。
mset key value key2 value2
说明:一次性修改多个键值对的键值。例如已存在1:1 2:2两个键值对,想要一次修改执行mset 1 10 2 20即可。
MGET key1 key2
说明:一次性获取多个key对应的键值,例如查看键为1、2、3的键值,执行mget 1 2 3即可。
DEL key [key …]
说明:删除键值,例如1的键值对,del 1 删除多个键值对del key1 key2…。
TTL key
说明:查看此键值对剩余过期时间。例如创建set test test ex 60 此键值对自创建剩余时间60s,查看剩余过期时间可执行 ttl test进行查看。
EXPIRE key seconds
说明:修改或设置键值对的剩余时间,以秒为单位。例如已存在键值对1:10,对其设定剩余时间100s,执行EXPIRE 1 100即可,设置成功后返回为1,可执行ttl 1 进行查看剩余时间。
PEXPIRE key milliseconds
说明:修改或这只键值对的剩余时间,以毫秒为单位,例如已存在键值对1:10,对其设定剩余时间100ms,执行PEXPIRE 1 100即可,执行成功后返回为1,可执行ttl 1进行查看升级时间。
MOVE key db
说明:将键值对移动到对应库。例如在0库中存在1:10键值对,移动到3库中,执行move 1 3即可,执行成功后返回为1。
PERSIST key
说明:移除key的剩余时间,设置为无时间格式。例如在1:10键值对设置了EXPIRE或者PEXPIRE,可使用PERSIST 1 进行移除。
RANDOMKEY
说明:从当前的所在库随机返回一个key名称。例如在0库执行RANDOMKEY会随机返回0库中随机一个key进行返回。
RENAME key newkey
说明:对已经创建的key进行修改key名称。例如已经存在1的key键,修改为3的键,执行RENAME 1 3 即可。
RENAMENX key newkey
说明:对想要修改新的newkey不存在时,执行会修改成功。当newkey已经存在时,执行修改会无效。例如已经存在1:10和2:20键值对,想把1:10的键值对中的key修改为2,执行RENAMENX 1 2会无效并返回0。修改为不存在的key会执行成功返回1。
TYPE key
说明:查看key中的键值对值得类型。