Redis
前言
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库
redis的官网:redis.io
注:域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地
redis的特点
1.支持数据持久化 (可以将数据存储在磁盘中,当redis重启之后会自动加载磁盘中的数据)
2.支持事务
3.支持搭建集群 (mencached不支持集群)
4.丰富的数据结构 ----- string,list,set,zset,hash等数据结构的存储
安装Redis
单机版安装
redis的安装
##获取源码包
wget https://download.redis.io/releases/redis-7.4.0.tar.gz
##解压重命名
tar xvzf redis-7.4.0.tar.gz -C /usr/local/
cd /usr/local/
mv redis-7.4.0/ redis
##安装编译工具对redis进行编译
yum -y install gcc make
cd redis/
make
##出现以下页面就表示编译完成
LINK redis-cli
CC redis-benchmark.o
LINK redis-benchmark
INSTALL redis-check-rdb
INSTALL redis-check-aof
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory `/usr/local/redis/src'
redis修改配置文件并启动
vim /usr/local/redis/redis.conf
bind 0.0.0.0
daemonize yes #开启后台模式将no改为yes
timeout 300 #连接超时时间
port 6379 #端口号
dir ./data ###存放在安装目录下的data目录下 用于存放数据
logfile "/var/log/redis.log" ###存放日志
pidfile /var/run/redis_6379.pid #定义pid文件
--##创建redis数据存放目录
cd /usr/local/redis
mkdir data/
--##配置redis为systemctl启动
vim /lib/systemd/system/redis.service
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown
[Install]
WantedBy=multi-user.target
redis启动
--##启动redis(systemctl启动):
systemctl daemon-reload
systemctl start redis.service
--##启动redis
cd /usr/local/redis
nohup src/redis-server redis.conf &
./src/redis-cli

[root@redis-master src]# pwd
/usr/local/redis/src
[root@redis-master src]# ./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> get name
"jack"
keys *查看所有key
del 删除key
expire 给key设置过期时间
ttl 查看key的剩余有效期
exists 查看key是否存在,0为不存在,1为存在
info 查看redis的信息
flushdb 清空数据(慎用)
redis相关的工具
./redis-benchmark #用于进行redis性能测试的工具
./redis-check-dump #用于修复出问题的dump.rdb文件
./redis-cli #redis的客户端
./redis-server #redis的服务端
./redis-check-aof #用于修复出问题的AOF文件
./redis-sentinel #用于集群管理
redis一主两从三哨兵
一主两从配置文件修改
环境准备
redis版本 redis7.4.0
192.168.13.111 redis主节点 redis、sentinel
192.168.13.112 redis从节点 redis、sentinel
192.168.13.115 redis从节点 redis、sentinel
主节点修改配置文件
vim /usr/local/redis/redis.conf
bind 0.0.0.0
protected no #关闭加密保护 否则从节点无法连接
daemonize yes #开启后台模式将no改为yes
timeout 300 #连接超时时间
port 6379 #端口号
logfile "/var/log/redis.log" ###存放日志
pidfile /var/run/redis_6379.pid #定义pid文件
dbfilename dump.rdb
dir ./data ###存放在安装目录下的data目录下 用于存放数据(目录需要提前创建)
save 3600 1 300 100 60 10000 #snapshot触发的时机
stop-writes-on-bgsave-error yes #当snapshot时出现错误无法继续时,阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等
rdbcompression yes #启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间
appendonly yes #开启aof功能,只有在“yes”下,aof重写/文件同步等特性才会生效
将主服务器的redis安装目录发送到从服务器
scp -r /usr/local/redis/ 192.168.13.112:/usr/local/
scp -r /usr/local/redis/ 192.168.13.115:/usr/local/
修改从节点配置文件
vim /usr/local/redis/redis.conf
replicaof 192.168.13.111 6379 ##添加 master IP和端口(注意:老版本的redis是搜索 slaveof 有些许区别)
启动测试
##-->master节点操作
pkill -9 redis
./src/redis-server redis.conf
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> get name
"jack"
##查看连接状态
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2 ##两个从节点
slave0:ip=192.168.13.112,port=6379,state=online,offset=6535,lag=0
slave1:ip=192.168.13.115,port=6379,state=online,offset=6535,lag=0
##-->从节点操作
./src/redis-server redis.conf
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> get name
"jack"
##查看连接状态
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.13.111
master_port:6379
master_link_status:up
一主两从搭建成功
下面开始配置三哨兵
哨兵搭建
配置文件修改
vim /usr/local/redis/sentinel.conf
protected-mode no
daemonize yes
logfile "/var/log/sentinel.log"
sentinel monitor mymaster 192.168.13.111 6379 2 ##监控的主节点信息 “2”表示有两个sentinel认为主节点主观下线,则将主机点判断为客观下线
sentinel down-after-milliseconds mymaster 30000 ##30s后主机点无反应,则判断为主观下线
sentinel failover-timeout mymaster 180000
将配置文件发送到另外两台服务器
scp /usr/local/redis/sentinel.conf 192.168.13.112:/usr/local/redis/
scp /usr/local/redis/sentinel.conf 192.168.13.115:/usr/local/redis/
启动测试
##--启动哨兵(三台机器均启动)
./src/redis-sentinel sentinel.conf
##--动态查看
tailf /var/log/sentinel.log

##主节点
cd /usr/local/redis
./src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.13.115,port=6379,state=online,offset=684083,lag=1
slave1:ip=192.168.13.112,port=6379,state=online,offset=684226,lag=0
##--停止主节点redis
[root@redis-master redis]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 7544/./src/redis-se
tcp 0 0 0.0.0.0:26379 0.0.0.0:* LISTEN 7479/./src/redis-se
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 961/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1204/master
tcp6 0 0 :::26379 :::* LISTEN 7479/./src/redis-se
tcp6 0 0 :::22 :::* LISTEN 961/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1204/master
[root@redis-master redis]# kill 7544

##--新的主节点机器
cd /usr/local/redis
./src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.13.112,port=6379,state=online,offset=743594,lag=1
##已实现故障转移
##--启动故障机器
./src/redis-server redis.conf
./src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.13.115
master_port:6379
master_link_status:up
恢复的机器会自动加入集群降为从节点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)