文章目录
1. Linux系统安装Redis
Redis官网:https://redis.io/
官网下载位置如下:
进入下载文件的目录:
# 解压
tar zxvf redis-5.0.13.tar.gz
# 进入Redis解压后目录,后面提到的Redis解压目录都是这一个目录
cd redis-5.0.13
# 编译
make
# 下载(Redis安装可能需要的,如果make报错)依赖
yum -y install gcc-c++ automake autoconf
# 创建目录
mkdir -p /usr/local/redis
# 编译安装到我们创建的目录下
make PREFIX=/usr/local/redis/ install
# 进入Redis安装目录bin目录下,后面提到的Redis安装目录都是这一个目录
cd /usr/local/redis/bin
# 启动Redis
./redis-server
安装并启动成功标志:
2. 配置
2.1. Redis后台运行
这个时候我们不能在Redis启动页面的窗口输入Linux命令,因为这个时候Redis是前台运行,因此我们要将Redis改为后台启动。
首先我们先Ctrl+C结束Redis运行,然后进入刚才解压Redis的tar包后生成的Redis文件夹。
# 将刚刚解压后的Redis文件夹下的redis.conf复制一份到Redis安装目录bin目录下
# 这一步不直接把这份文件移动过去是因为等下如果修改完报错直接把安装目录的redis.conf删除再复制一份就好了,保险!
cp redis.conf /usr/local/redis/bin/
# 进入Redis安装目录
cd /usr/local/redis/bin/
# 编辑redis.conf文件
vim redis.conf
这时候已经打开了文件,找到daemonize no
改为daemonize yes
,然后按下键盘Esc键退出,然后输入:wq
。
# 启动Redis,并指定所用到的配置文件
./redis-server redis.conf
# 查看是否后台启动,进入客户端
./redis-cli
# 输入ping,若返回PONG则连接成功
2.2. Redis设置允许外网连接
进入Redis安装目录下bin目录。
# 打开配置文件
vim redis.conf
两种做法:
-
做法一:将
bind 127.0.0.1
注释掉,并将protected-mode yes
改为protected-mode no
-
做法二:在
bind 127.0.0.1
后面添加IP地址,形如:# 注意用空格隔开 bind 127.0.0.1 123.45.6.789
坑点——bind连接不上的问题:这里的IP地址既不是你以后要操作redis的电脑IP地址,也不是运行redis系统的服务器的外网IP地址,而是运行redis系统的服务器的内网IP地址。得到这个IP地址最可靠的方法:找到Redis运行的服务器,如果是window命令行输入
ipconfig
,找到IPv4地址;Linux系统输入ifconfig
,找到开头不是lo的位置,有一个形如:inet 123.45.6.789
,就是我们要找的IP地址。
同时,如果还是没有连接成功,那么要继续下面的步骤设置连接密码,因为我看文档注释上面写着如果设置protected-mode yes,如果没有设置密码或者没有通过bind配置访问IP,则redis默认访问127.0.0.1和::1。
重启服务器:
# 查看Redis进程
ps -ef|grep redis
# 找到 ./redis-server 对应的进程端口,将它删除
kill -9 端口号
# 启动Redis
./redis-server redis.conf
2.3. 设置需要密码才能连接Redis
打开redis.conf,找到# requirepass foobared
改为requirepass 自定义密码
。
2.4. 设置Redis数据库数量
打开redis.conf,找到databases 16
,修改后面的数量可以设置数据库个数。
3. 使用
3.1. 数据库操作命令
# 客户端打开方式:
# -p 指定端口号,-a 指定登录密码,如果没有指定则使用默认
./redis-cli -p 6379 -a root
# 选择数据库
# 指定1号数据库,默认是0号数据库
select 1
#-------------------------------------------------------
# String类型
# 设置值和取值
set name zhangsan
get name
# 一次导入多个值(用mset,后面跟多个key-value)
mset sex 1 address shanghai
# 一次查询多个值(用mget,后面跟多个key)
mget name sex address
#-------------------------------------------------------
# hash类型
# 存值:hset redis的key hash的key hash的value
hset user name zhangsan
# 取值:hget redis的key hash的key
hget user name
# 一次导入多个值( hmset redis的key [hash的key hash的value ...])
hmset user age 18 sex 1
# 一次查询多个值( hmget redis的key [hash的key ...] )
hmget user name age sex
# 将对应redis下所有hash数据打印出来( hgetall redis的key )
hgetall user
# 删除数据,可删除多个( hdel redis的key [hash的key ...] )
hdel user name age
#-------------------------------------------------------
# list类型
# 左添加(从列表左侧添加)
lpush students zhangsan lisi
# 右添加(从列表右侧添加)
rpush students wangwu zhaoliu
# 查询列表( lrange 列表名 索引[从第几个到第几个] )
lrange students 0 2
# 查看列表长度( llen 列表名 )
llen students
# 删除数据( lrem 列表名 删除同名数据的个数 列表数据 ),因为列表的数据可以一样,从左往右
lrem students 1 lisi
#-------------------------------------------------------
# set类型(无序集合)
# 添加数据( sadd set集合名 [数据 ...] )
sadd letters aaa bbb ccc ddd eee
# 查看数据( smembers set集合名 )
smembers letters
# 查询数据条数( scard set集合名 )
scard letters
# 删除数据( srem set集合名 [数据 ...] )
srem letters aaa ccc
#-------------------------------------------------------
# sorted set类型
# 插入数据( zadd sortedset集合名 排序码【默认从小到大】 set数据 )
zadd score 7 zhangsan 3 lisi 6 wangwu 10 zhaoliu 1 tianqi
# 查询数据( zrange 集合名 索引[从第几个到第几个] )
zrange score 0 4
# 查询数据条数( zcard 集合名 )
zcard score
# 删除数据( zrem 集合名 [数据 ...] )
zrem score zhangsan lisi
3.2. Redis-cli操作通用命令
# 层级关系目录形式存储数据
# 存值
set cart:user01:item01 apple
# 取值(这时候去可视化界面查看更加直观)
get cart:user01:item01
#-------------------------------------------------------
# 存值并设置数据失效时间(设置失效时间为10秒)
# (设置值语句后加入ex 10 可选[nx|xx],nx只有值不存在才会设置成功,xx只有值存在才会成功)
set code test ex 10 nx
# (设置值语句后加入px 10000 可选[nx|xx],nx只有值不存在才会设置成功,xx只有值存在才会成功)
set code test px 10000 xx
# 查询数据剩余生存时间( ttl 变量名 )
ttl code
# 为已有数据设置数据失效时间(设置失效时间为10秒)( expire 变量名 失效时间 )
expire code 10
#-------------------------------------------------------
# 通用删除指令,可以删除任意数据类型,可以删除多个( del 变量名 )
del address
3.3. 持久化方案
-
方案一:存值之后在客户端输入
# 优点:简单 缺点:有时候需要频繁操作 bgsave
-
方案二:rdb
# 优点:系统自动持久化 缺点:这个方法可能丢失数据 通过修改redis.conf中`save 等待时间 数据变化条数`来实现
-
方案三:aof
# 优点:实时持久化 缺点:如果某个数据库操作频繁,随着时间积累aof文件会越来越大,这样开启redis就会很慢 修改redis.conf,将`appendonly no`改为`appendonly yes`
此时bin目录下多了一个 appendonly.aof文件:
以后我们输入的命令都会追加到这个文件中,redis重启会读取这个文件模仿我们的命令再次敲击一遍。
3.4. 主从复用
3.4.1. 读写分离
如果是单服务器,数据过多会导致Redis服务器读写压力过大。如果只有几千几万条数据,用单服务器就可以;如果有10万及以上数据,需要读写分离和配置哨兵;如果是上百万条数据,则需要配置redis集群。
集群中服务器的数量要保证是单数,因为在集群里有一句话是:服务器损坏数量大于总数量50%集群则不可用,用单数数量的服务器可以节省一台服务器。
单虚拟机搭建伪主从分离,读写复用。这里以端口6379为主服务器,端口6380和6381为从服务器:
# 创建目录 data目录存放数据 log目录存放日志 conf目录存放配置文件
mkdir -p /opt/redis/data
mkdir -p /opt/redis/log
mkdir -p /opt/redis/conf
# 进入redis解压文件夹
cd redis-5.0.13
# 将redis的 redis.conf 复制一份到我们刚创建的 /opt/redis/conf
cp redis.conf /opt/redis/conf/
# 进入 /opt/redis/conf
cd /opt/redis/conf
# 将 redis.conf 改名为 redis-common.conf,我们打算将该配置文件改为公用配置文件
mv redis.conf redis-common.conf
# 编辑 redis-common.conf
vim redis-common.conf
# 具体修改如下:
#--------------------------------------------------------
注释 `bind 127.0.0.1`
`protected-mode yes` 改为 `protected-mode no`
注释 `port 6379`
# 后台启动
`daemonize no` 改为 `daemonize yes`
# 进程文件
注释 `pidfile /var/run/redis_6379.pid`
# 日志文件
注释 `logfile ""`
# rdb文件
注释 `dbfilename dump.rdb`
# rdb数据存放位置
`dir ./` 改为 `dir /opt/redis/data`
# 从服务器关联主服务器密码,这里root是我们的自定义密码
将 `# masterauth <master-password>` 改为 `masterauth root`
# 主服务器登录时的访问密码,这里root是我们的自定义密码
将 `# requirepass foobared` 改为 `requirepass root`
# <Esc> :wq 保存并退出
#--------------------------------------------------------
# 在/opt/redis/conf下创建每个进程所对应的配置文件
touch redis-6379.conf
touch redis-6380.conf
touch redis-6381.conf
# vim编辑文件,进入插入模式,在三个文件中写入如下数据,具体需要进行修改,这里以 redis-6379.conf 为例
#--------------------------------------------------------
# 引用公共配置
include /opt/redis/conf/redis-common.conf
# 进程编号记录文件
pidfile /var/run/redis-6379.pid
# 进程端口号
port 6379
# 日志记录文件
logfile "/opt/redis/log/redis-6379.log"
# 数据记录文件
dbfilename dump-6379.rdb
# 追加文件名称(因为我们这里配置采用rdb,所以aof文件可以不配置)
appendfilename "appendonly-6379.aof"
# 下面的配置无需在 6379 里配置
# 备份服务器从属于 6379 推荐配置配局域网 IP
slaveof 47.106.171.176 6379
#--------------------------------------------------------
# 进入redis安装目录bin目录
cd /usr/local/redis/bin/
# 先结束所有redis-server
# 启动刚刚创建的三个Redis服务器
./redis-server /opt/redis/conf/redis-6379.conf
./redis-server /opt/redis/conf/redis-6380.conf
./redis-server /opt/redis/conf/redis-6381.conf
这时所有配置都已经完成,我们来检验三个服务器的主从状态:
# 进入服务器客户端
./redis-cli -p 6379 -a root
# 查看主从信息
info replication
3.4.2. 哨兵配置
如果某个从服务器掉线,并不影响Redis系统的读写能力;但如果是主服务器掉线,就需要有从服务器转换为主服务器来维持Redis系统的读写能力。哨兵就是用来监控redis服务器集群的,当发现主服务器挂机,会将某个从服务器选举为主服务器。
配置哨兵:
# 进入redis解压目录
cd redis-5.0.13
# 将 sentinel.conf 复制一份到集群redis配置文件夹下
cp sentinel.conf /opt/redis/conf/
# 进入 /opt/redis/conf/ 文件夹
cd /opt/redis/conf/
# 改名,这里我们要将 sentinel.conf 作为公用配置文件
mv sentinel.conf sentinel-common.conf
# 编辑 sentinel-common.conf,具体修改如下:
#--------------------------------------------------------
注释 `port 26379`
# 后台启动
`daemonize no` 改为 `daemonize yes`
# 进程文件
注释 `pidfile /var/run/redis-sentinel.pid`
# 日志文件
注释 `logfile ""`
# 哨兵监控( sentinel monitor mymaster 服务器地址 redis主服务器端口 几个哨兵确认停机才选举新服务器 )
# 因为我们现在三个服务器有三个哨兵,根据大于50%原则就是需要2个哨兵确实停机才选举,如果是5台服务器就是3,...
`sentinel monitor mymaster 127.0.0.1 6379 2`
改为 `sentinel monitor mymaster 47.106.171.176 6379 2`
# 监控主服务器的密码,这里root是我们的自定义密码
`# sentinel auth-pass mymaster MySUPER--secret-0123passw0rd` 改为
`sentinel auth-pass mymaster root`
#--------------------------------------------------------
# 在/opt/redis/conf下创建每个哨兵所对应的配置文件
touch sentinel-26379.conf
touch sentinel-26380.conf
touch sentinel-26371.conf
# 修改刚才创建的每个私有配置文件,以26379为例,具体内容如下:
#--------------------------------------------------------
#引用公共配置
include /opt/redis/conf/sentinel-common.conf
#进程端口号
port 26379
#进程编号记录文件
pidfile /var/run/sentinel-26379.pid
#日志记录文件(为了方便查看日志,先注释掉,搭好环境后再打开)
logfile "/opt/redis/log/sentinel-26379.log"
#--------------------------------------------------------
这样我们的哨兵就配置好了,我们来检验一下。
在此之前要保证我们的redis.server还开启着
# 进入redis安装目录bin目录
cd /usr/local/redis/bin
# 启动哨兵
./redis-sentinel /opt/redis/conf/sentinel-26379.conf
./redis-sentinel /opt/redis/conf/sentinel-26380.conf
./redis-sentinel /opt/redis/conf/sentinel-26381.conf
# 先检查是否启动成功
ps -ef|grep sentinel
# 打开多个命令行窗口,查看日志
tail -f /opt/redis/log/sentinel-26379.log
tail -f /opt/redis/log/sentinel-26380.log
tail -f /opt/redis/log/sentinel-26381.log
# 模拟主服务器挂机状态
# 查看Redis进程
ps -ef|grep redis
# 找到 ./redis-server 对应的进程端口,将它删除
kill -9 端口号
# 配置文件默认30秒后选举,等待30秒后,注意这里需要在阿里云开放从服务器端口
# 在redis客户端输入
info replication
参考视频:
【全套完整版】2021最新SpringBoot+Vue前后端分离项目实战-在线智能办公系统,前后端分离项目,手把手教你如何做大项目。(强烈建议收藏)