redis的安装及操作
1. redis安装
[root@bogon ~]# wget https://download.redis.io/releases/redis-7.0.9.tar.gz
--2025-06-24 17:42:48-- https://download.redis.io/releases/redis-7.0.9.tar.gz
Resolving download.redis.io (download.redis.io)... 104.18.26.34, 104.18.27.34, 2606:4700::6812:1b22, ...
Connecting to download.redis.io (download.redis.io)|104.18.26.34|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2984823 (2.8M) [application/octet-stream]
Saving to: ‘redis-7.0.9.tar.gz’100%[=======================================>] 2,984,823 2.13MB/s in 1.3s 2025-06-24 17:42:50 (2.13 MB/s) - ‘redis-7.0.9.tar.gz’ saved [2984823/2984823][root@bogon ~]# tar xzf redis-7.0.9.tar.gz -C /usr/local
[root@bogon ~]# cd /usr/local/
[root@bogon local]# ls
bin etc games include lib lib64 libexec redis-7.0.9 sbin share src
[root@bogon local]# mv redis-7.0.9/ redis
[root@bogon local]# cd redis/
[root@bogon redis]# yum install -y gcc make
....
[root@bogon redis]# make
....
之后修改配置文件
[root@bogon redis]# vim redis.conf
bind 192.168.246.202 只监听内网IP
daemonize yes 开启后台模式将no改为yes
port 6379 端口号
dir /usr/local/redis/data 本地数据库存放持久化数据的目录该目录-----需要存在
requirepass 1122334 设置密码 单机时不用,可以不设置这个protected-mode no 这个设置为no,可以不写密码登入
logfile "/var/log/redis.log" 设置日志存放路径与日志名timeout 0 客户端空闲多少秒后,服务端侧断开连接,0代表不断开连接
tcp-keepalive 300 TCP连接保活,如果该选项配置不为0,则Redis将周期性地向客户端发送ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接,默认为300秒。
databases 16 数据库的数量,默认使用第0个数据库,可以通过"SELECT 1”命令选择第一个数据库,总量是16个,从0-15
创建存放数据的目录[root@bogon redis]# mkdir data
[root@bogon redis]# ls
00-RELEASENOTES data README.md runtest-moduleapi tests
BUGS deps redis.conf runtest-sentinel TLS.md
CODE_OF_CONDUCT.md INSTALL redis.conf.bak SECURITY.md utils
CONTRIBUTING.md Makefile runtest sentinel.conf
COPYING MANIFESTO runtest-cluster src
启服务:
[root@bogon redis]# src/redis-server redis.conf &
[1] 101176
[root@bogon redis]#
[1]+ Done src/redis-server redis.conf
[root@bogon redis]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.222.132:6379 0.0.0.0:* LISTEN 101177/src/redis-se
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1005/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1155/master
tcp6 0 0 :::22 :::* LISTEN 1005/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1155/master
登陆redis
[root@bogon src]# pwd
/usr/local/redis/src
[root@bogon src]# ./redis-cli -h 192.168.222.132 -p 6379
192.168.222.132:6379> ping ---测试redis是否可以用
PONG
单机版redsi已经部署完成。将ip和端口发给开发就可以了。
相关操作
string字符串类型
string 是 redis 最基本的类型,一个 key 对应一个 value。192.168.222.132:6379> set name xiaoyi
OK
192.168.222.132:6379> get name
"xiaoyi"
redis的相关工具
./redis-cli #redis的客户端
./redis-server #redis的服务端
./redis-check-aof #用于修复出问题的AOF文件
./redis-sentinel #用于哨兵管理
Set(集合)
Redis的Set是string类型的无序集合。
添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误。
192.168.222.132:6379> sadd myset redis
(integer) 1
192.168.222.132:6379> sadd myset zabbix
(integer) 1
192.168.222.132:6379> sadd myset ansible
(integer) 1
192.168.222.132:6379> sadd myset shell
(integer) 1
192.168.222.132:6379> sadd myset nginx
(integer) 1
192.168.222.132:6379> smembers myset
1) "ansible"
2) "shell"
3) "zabbix"
4) "redis"
5) "nginx"
192.168.222.132:6379> sadd myset nginx
(integer) 0添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
查看key的类型
192.168.222.132:6379> type myset
set
192.168.222.132:6379> type name
string查看所有的key
192.168.222.132:6379> keys *
1) "myset"
2) "name"删除某个key
192.168.222.132:6379> del myset
(integer) 1
192.168.222.132:6379> keys *
1) "name"
2. 部署三台机器redis---主从同步
前提:服务先停了
master:
[root@redis-master redis]# vim redis.conf
bind 0.0.0.0 或 bind 本机IP
验证:
[root@localhost redis]# src/redis-cli -h 192.168.222.132 -p 6379
192.168.222.132:6379> ping
PONG
192.168.222.132:6379> set name jack
OK
192.168.222.132:6379> get name
"jack"
192.168.222.132:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.222.133,port=6379,state=online,offset=224,lag=1
slave1:ip=192.168.222.134,port=6379,state=online,offset=224,lag=1
master_failover_state:no-failover
master_replid:e37c7afdd11f4316ce604f3f33b29a1e04aa617c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:224
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:224
slave1的配置文件:
bind 0.0.0.0 或 bind 本机IP
[root@bogon redis]# src/redis-server redis.conf &
[1] 75951
[root@bogon redis]#
[1]+ Done src/redis-server redis.conf验证:
[root@bogon redis]# src/redis-cli -h 192.168.222.133 -p 6379
192.168.222.133:6379> ping
PONG
192.168.222.133:6379> get name
"jack"
slave2的配置文件:
bind 0.0.0.0 或 bind 本机IP
[root@bogon redis]# src/redis-server redis.conf &
[1] 66597
[root@bogon redis]#
[1]+ Done src/redis-server redis.conf验证:
[root@bogon redis]# src/redis-cli -h 192.168.222.134 -p 6379
192.168.222.134:6379> ping
PONG
192.168.222.134:6379> get name
"jack"
3. redis的数据备份与恢复
手动:
自动的话,是在备份机器的redis.conf配置文件设置save 10 3
做备份机器的redis.conf配置文件内容:
dbfilename dump.rdb
dir /data/application/redis/data
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yesprotected-mode no
bind注意:
关闭protected-mode模式,此时任意ip可以直接访问,也不需要密码
开启protected-mode保护模式,需配置bind ip或者设置访问密码
迁移的机器上
备份数据:
[root@localhost redis]# src/redis-cli -h 192.168.222.132 -p 6379
192.168.222.132:6379> set name dd
OK
192.168.222.132:6379> set age 44
OK
192.168.222.132:6379> set sex f
OK
192.168.222.:6379> BGSAVE 执行备份,或者敲SAVE
[root@localhost redis]# ls data/
dump.rdb[root@localhost redis]# scp data/dump.rdb 192.168.222.133:/usr/local/redis/data/
root@192.168.222.133's password:
dump.rdb
恢复数据的机器:
要先停服务
[root@bogon redis]# kill -9 25588
[root@bogon redis]# netstat -lntp
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:22 0.0.0.0:* LISTEN 1004/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1159/master
tcp6 0 0 :::22 :::* LISTEN 1004/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1159/master
[root@bogon redis]# src/redis-server redis.conf &
[1] 51465
[root@bogon redis]#
[1]+ Done src/redis-server redis.conf
[root@bogon redis]# src/redis-cli -h 192.168.222.133 -p 6379
192.168.222.133:6379> get name
"dd"
192.168.222.133:6379> get sex
"f"
192.168.222.133:6379> get age
"44"
4. 配置哨兵模式
(停了服务)
1.每台机器上修改redis主配置文件redis.conf文件设置:bind 0.0.0.0 ---已经操作
2.每台机器上修改sentinel.conf配置文件:修改如下配置
[root@redis-master src]# cd ..
[root@redis-master redis]# vim sentinel.conf
daemonize yes #设置哨兵放后台运行
logfile "/var/log/sentinel.log" #设置哨兵日志
sentinel monitor mymaster 10.0.0.137 6379 2 #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)
sentinel auth-pass mymaster 1122334 #如果设置了密码那就需要指定密码,否则不需要
sentinel down-after-milliseconds mymaster 3000 #单位毫秒
sentinel failover-timeout mymaster 10000 #若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。protected-mode no #关闭加密模式--新添加到sentinel配置文件中 ----老版本中需需要添加
3.每台机器启动哨兵服务:
[root@redis-master redis]# ./src/redis-sentinel sentinel.conf注意:在生产环境下将哨兵模式启动放到后台执行: ./src/redis-sentinel sentinel.conf & --老版本
将master的哨兵模式退出,再将redis服务stop了,在两台slave上面查看其中一台是否切换为master:(没有优先级,为选举切换)
master:
[root@localhost redis]# kill -9 104996
验证:
[root@localhost redis]# netstat -lntp
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:26379 0.0.0.0:* LISTEN 103965/./src/redis-
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1005/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1155/master
tcp6 0 0 :::22 :::* LISTEN 1005/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1155/master
slave1: master转移到这个上了[root@bogon redis]# src/redis-cli -h 192.168.222.133 -p 6379
192.168.222.133:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.222.134,port=6379,state=online,offset=57595,lag=0
master_failover_state:no-failover
master_replid:6577a5d0f469eb3619a7367ff064c36ec18cfb07
master_replid2:c0b7ae74a4540526c0b0140b3d99a07401472f92
master_repl_offset:57595
second_repl_offset:21815
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2671
repl_backlog_histlen:54925slave2:
[root@bogon redis]# src/redis-cli -h 192.168.222.134 -p 6379
192.168.222.134:6379> info replication
# Replication
role:slave
master_host:192.168.222.133
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:49868
slave_repl_offset:49868
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:6577a5d0f469eb3619a7367ff064c36ec18cfb07
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:49868
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:25767
repl_backlog_histlen:24102