单节点安装软件包

环境准备

主机: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
image

上面告警解决方法如下

解决方法如下

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建议采用下图方法进行停止

image-1683513328887

启动redis

/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &

再次查看redis日志无告警内容输出

cat /usr/local/redis/redis.log
image-1683341346471

登录验证

/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456 #注意此方式不安装会造成密码泄露,采取下面方式进行登录
image-1683341499742

/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379
auth 123456
image-1683341568229

验证是否登录成功

ping #会返回PONG
image-1683341645849

此时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
image-1683343308287

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
image-1683343617571

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
image-1683353787851

在从节点查看信息

redis-cli -h 192.168.1.16 -p 6379
auth 123456
info replication
image-1683507699023

在主节点手动创建数据,验证从节点是否进行同步

主节点插入数据 1:10 如下操作

image-1683507927194

从节点查看数据是否同步

image-1683507963055
由上图得知,数据以进行同步,此时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 实例名, ipport 分别为 Redis 实例的 IP 和端口号, quorum 为最小投票数。
sentinel down-after-milliseconds master 10000 #指定哨兵认为 Redis 实例已经失效的时间(毫秒)

启动主节点和从节点哨兵模式程序

/usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf

验证哨兵模式

把主节点手动关闭模拟主节点宕机

停止redis(需登录redis执行)

SHUTDOWN
image-1683510530616

查看主节点哨兵进程是否启动

ps -elf | grep sentinel
ss -tuanpl | grep sentinel
image-1683510638148

登录从节点查看信息

info replication
image-1683510784064
由上图可以看出redis主节点为“down”

回复主节点服务,验证从节点显示主节点信息是否为up

主节点执行如下启动redis服务:

/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &

从节点查看信息

info replication
image-1683511070722
由上图看出,显示主节点的信息为“up”。

redis哨兵模式设置完成。

Redis基础命令使用

set key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]
说明:key为指定的键值对的键,value为键值对的值。
‘EX secondsPX milliseconds:设置键的过期时间,以秒或毫秒为单位。例如,SET mykey “Hello” EX 10 将在10秒后过期,并将从Redis中自动删除该键。 ‘EXAT timestampPXAT milliseconds-timestamp :设置键在指定的时间戳过期
KEEPTTL: 保留现有键的到期时间.如果存在过期时间的key调用set命令并携带该命令会保留原有的过期时间
NXXX:设置键的行为,当键不存在时,或仅在键存在时,才创建该键。例如,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中的键值对值得类型。