redis软件下载地址:Redis
redis支持的数据类型:
• 字符串(strings)
• 散列(hashes)
• 列表(lists)
• 集合(sets)
• 有序集合(sorted sets)
redis常用命令:
config get * | 查看配置 |
select 1 | 选择数据库 |
flushdb | 清空当前数据库 |
flushall | 清空所有数据库 |
move key 1 | 移动key |
del key | 删除 |
rename oldkey newkey | 改名 |
expire key 10 | 设置过期时间 |
persist key | 设置持久化 |
keys user* | 查询 |
exists key | 判断是否存在 |
Redis主从复制的基本情况
1、Redis主从复制的概念
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。
默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
2、Redis主从复制的作用
●数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
●故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
●负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
●高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
3、Redis主从复制的流程
●【1】若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接。
●【2】无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。
●【3】后台进程完成缓存操作之后,Maste机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。
●【4】Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果Mater同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。
二、redis主从复制搭建
实验环境:
主机名称 |
ip |
角色 |
server1 | 172.25.10.1 | master |
server2 | 172.25.10.2 | slave |
server3 | 172.25.10.3 | slave |
实验步骤:
在server1中操作
[root@server1 ~]# ls
[root@server1 ~]# tar zxf redis-6.2.4.tar.gz
[root@server1 ~]# ls
dump.sql nginx-1.20.1 redis-6.2.4
mysql-5.7.31 nginx-1.20.1.tar.gz redis-6.2.4.tar.gz
mysql-boost-5.7.31.tar.gz php-fpm-5.4.16-46.el7.x86_64.rpm
[root@server1 ~]# cd redis-6.2.4
[root@server1 redis-6.2.4]# ls
00-RELEASENOTES COPYING MANIFESTO runtest-cluster src
BUGS deps README.md runtest-moduleapi tests
CONDUCT INSTALL redis.conf runtest-sentinel TLS.md
CONTRIBUTING Makefile runtest sentinel.conf utils
[root@server1 redis-6.2.4]# make && make install
[root@server1 redis-6.2.4]# cd utils/
[root@server1 utils]# ls[root@server1 utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis serverThis systems seems to use systemd.
Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!
[root@server1 utils]# vim install_server.sh78 #if [ "${_pid_1_exe##*/}" = systemd ]
79 #then
80 # echo "This systems seems to use systemd."
81 # echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
82 # exit 1
83 #fi 注释[root@server1 utils]# ./install_server.sh
/var/run/redis_6379.pid exists, process is already running or crashed
Installation successful! -----------------> 成功
[root@server1 utils]# cd /etc/redis/
[root@server1 redis]# ls
6379.conf sentinel.conf
[root@server1 redis]# vim 6379.conf76 bind 0.0.0.0
root@server1 redis]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...[root@server1 redis]# netstat -antlp
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 7971/redis-server 0
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3315/master
测试:
[root@server1 redis]# cd
[root@server1 ~]# cd redis-6.2.4/
[root@server1 redis-6.2.4]# ls[root@server1 redis-6.2.4]# redis-cli 登陆
127.0.0.1:6379> set name westos
OK
127.0.0.1:6379> get name
"westos"127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> get name server1为master 可以读写
(nil)127.0.0.1:6379> set name westos
OK
127.0.0.1:6379> EXPIRE name 5 5秒后后过期
(integer) 1
127.0.0.1:6379> get name
"westos"
127.0.0.1:6379> get name
"westos"
127.0.0.1:6379> get name
(nil)
在server2中操作:
[root@server2 ~]# ls
dump.sql redis-6.2.4.tar.gz
[root@server2 ~]# tar zxf redis-6.2.4.tar.gz
[root@server2 ~]# ls
dump.sql redis-6.2.4 redis-6.2.4.tar.gz
[root@server2 ~]# cd redis-6.2.4/
[root@server2 redis-6.2.4]# make && make install
[root@server2 ~]# ls
dump.sql redis-6.2.4.tar.gz
[root@server2 ~]# tar zxf redis-6.2.4.tar.gz
[root@server2 ~]# ls
dump.sql redis-6.2.4 redis-6.2.4.tar.gz
[root@server2 ~]# cd redis-6.2.4/
[root@server2 redis-6.2.4]# make && make install
[root@server2 utils]# ls
build-static-symbols.tcl redi