Redis部署使用

Redis安装部署

资源列表

操作系统配置主机名IP所需软件
CentOS 7.92C4Gredis-node1192.168.93.101redis-4.0.9.tar.gz
CentOS 7.92C4Gredis-node2192.168.93.102redis-4.0.9.tar.gz

基础环境

  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
  • 修改主机名
hostnamectl set-hostname redis-node1
hostnamectl set-hostname redis-node2

一、Redis安装部署

  • 两台主机都需要安装,以node1节点为例进行演示

  • Redis源码包中直接提供了Makefile文件,所以解压完软件包后,直接进入源码包目录,执行make与make install命令进行安装

[root@redis-node1 ~]# yum -y install gcc gcc-c++ make
[root@redis-node1 ~]# tar -zxvf redis-6.2.4.tar.gz 
[root@redis-node1 ~]# cd redis-6.2.4/
# PREFIX=/usr/local/redis:指定安装目录
[root@redis-node1 redis-6.2.4]# make && make PREFIX=/usr/local/redis install
[root@redis-node1 redis-6.2.4]# ln -s /usr/local/redis/bin/* /usr/local/bin/
  • make install只是安装了二进制文件到系统中,并没有启动脚本 和配置文件。软件包中默认提供另一个install_server.sh脚本文件,通过该脚本文件可以设置Redis服务所需要的相关配置文件。当脚本运行完毕,Redis服务就已经启动,默认侦听端口为6379
[root@redis-node1 redis-6.2.4]# cd /root/redis-6.2.4/utils/
[root@redis-node1 utils]# vim install_server.sh
# 默认76行,注释掉一下内容,不然执行脚本的时候会报错
#_pid_1_exe="$(readlink -f /proc/1/exe)"
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
#       echo "This systems seems to use systemd."
#       echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
#       exit 1
#fi

[root@redis-node1 utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 	# 回车
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]  # 回车
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 	# 回车
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]  # 回车
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server # 手动输入绝对路径	
Selected config:
Port           : 6379		# 端口号								
Config file    : /etc/redis/6379.conf	# 配置文件路径
Log file       : /var/log/redis_6379.log	# 日志文件路径
Data dir       : /var/lib/redis/6379	# 数据文件路径
Executable     : /usr/local/redis/bin/redis-server	# 可执行文件路径
Cli Executable : /usr/local/redis/bin/redis-cli		# 客户端命令行工具
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

[root@redis-node1 utils]# netstat -anpt | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      5875/redis-server 1 
tcp6       0      0 ::1:6379                :::*                    LISTEN      5875/redis-server 1 

二、添加为系统服务

[root@redis-node1 ~]# vim /etc/systemd/system/redis.service
[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/6379.conf    	

[Install]
WantedBy=multi-user.target
[root@redis-node1 ~]# kill 5875		# 先杀死redis控制脚本的启动服务

[root@redis-node1 ~]# systemctl daemon-reload 
[root@redis-node1 ~]# systemctl start redis
[root@redis-node1 ~]# systemctl enable redis
[root@redis-node1 ~]# netstat -anpt | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      5965/redis-server 1 
tcp6       0      0 ::1:6379                :::*                    LISTEN      5965/redis-server 1 




# 也可以使用redis脚本执行后自动生成的控制脚本来控制redis服务
[root@redis-node1 ~]# /etc/init.d/redis_6379 start
[root@redis-node1 ~]# /etc/init.d/redis_6379 stop
[root@redis-node1 ~]# /etc/init.d/redis_6379 restart
[root@redis-node1 ~]# /etc/init.d/redis_6379 status

三、配置参数

  • Redis主配置文件为/etc/redis/6379.conf,有注释行与设置行两部分组成。与大多数Linux配置文件一样,注释性的文字以“#”开始,包含了对相关配置内容进行的说明和解释。除了注释行与空行以外的内容即为设置行。可根据生产环境的需求调整相关参数,如下:
[root@redis-node1 ~]# vim /etc/redis/6379.conf 
# 若注释bind,Redis将侦听服务器上所有可用网络接口的连接
bind 127.0.0.1 192.168.93.101	# 本地回环接口,若不修改,外网无法连接服务端
port 6379	# 默认端口
daemonize yes	# 启用守护进程,后台运行
pidfile /var/run/redis_6379.pid		# 指定PID文件
loglevel notice		# 日志级别
logfile /var/log/redis_6379.log		# 指定日志文件
[root@redis-node1 ~]# systemctl restart redis
[root@redis-node1 ~]# netstat -anpt | grep 6379
tcp        0      0 192.168.93.101:6379     0.0.0.0:*               LISTEN      6029/redis-server 1 
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      6029/redis-server 1 



  • 除了上述配置参数外,Redis主配置文件中还包含很多其他的配置参数,具体内容如下表
参数作用
timeout 300当客户端闲置很长时间后关闭连接,如果指定为0,表示关闭该功能
dbfilename dump.rdb指定本地数据库文件名,默认值为dump.rdb
dir /var/lib/redis/6379指定本地数据库存放目录
maxclients 10000设置同一时间最大客户端连接数,默认为10000.Redis可以同时开发的客户端连接数为Redis进程可以开打的最大文件描述符数,如果设置maxclients 0,表示不限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
rdbcompression yes指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU资源,可以关闭该选项,但会导致数据库文件变得巨大
slaveof 当本地为从服务器时,设置主服务的IP地址及端口。在Redis启动时,从服务器会自动从主服务进行数据同步
masterauth 当主服务设置了密码保护时,从服务连接主服务器的密码
requirepass foobared设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH 命令提供密码,默认关闭
maxmemory 指定Redis最大内存限制。Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会尝试清除已经到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新VM机制,会把Key存放内存,Value会存放在Swap分区
appendonly no指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步把数据写入磁盘,如果不开启,可能会断电时导致一段时间内的数据丢失。因为Redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在内存中。默认为no
appendfilename appendonly.aof指定更新日志文件名,默认为appendfilename.aof
appendfsync everysec指定更新条件,共有3个可选值:
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折中,默认值)
activerehashing yes指定知否激活重置哈希,默认为开启
include /path/to/local.conf指定包含其他的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有的特定配置文件

四、Redis命令工具

  • Redis软件提供了多个命令工具。安装Redis服务时,所包含的软件工具会同时被安装到系统中,在系统中可以直接使用。这些命令工具的作用分别如下所示。
redis-server:用户启动Redis的工具
redis-benchmark:用于检测Redis在本机的运行效率
redis-check-aof:修复AOF持久化文件
reids-check-rdb:修改RDB持久化文件
redisc-cli:Redis命令行工具
# 本章只介绍redis-cli、redis-benchmark命令工具的使用

4.1、redis-cli命令行工具

  • Redis数据库系统也是一个典型的C/S(客户端/服务器端)架构的应用,要访问Redis数据库需要使用专门的客户端软件
# 连接本地Redis数据库
[root@redis-node1 ~]# redis-cli		# 连接本地Redis数据库
127.0.0.1:6379> ping		# 检测Redis服务是否启动
PONG
127.0.0.1:6379> 

# 连接远程主机Redis数据库
命令语法:redis-cli -h host -p port -a password
-h:指定主机
-p:指定端口
-a:指定密码,如果无密码可以省略该选项
[root@redis-node2 ~]# redis-cli -h 192.168.93.101 -p 6379
192.168.93.101:6379> info
# Server
redis_version:6.2.4
redis_git_sha1:00000000
redis_git_dirty:0

# exit或quit可以退回到原来的Shell环境
192.168.93.101:6379> exit
[root@redis-node2 ~]# 
  • 在数据库操作环境中,使用htlp命令可以获取命令类型的帮助。有三种获取命令的帮助的方式
help @<group>:获取<group>中的命令列表;
help <command>:获取某个命令的帮助;
help <tab>:获取可能帮助的主题列表;
[root@redis-node1 ~]# redis-cli
127.0.0.1:6379> help @list		# 查看所有与List数据类型的相关命令

  BLMOVE source destination LEFT|RIGHT LEFT|RIGHT timeout
  summary: Pop an element from a list, push it to another list and return it; or block until one is available
  since: 6.2.0

127.0.0.1:6379> help set		# 查看set命令的帮助

  SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]
  summary: Set the string value of a key
  since: 1.0.0
  group: string

4.2、redis-benchmark测试工具

  • redis-benchmark是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能。基本的测试语言为redis-benchmark [option] [option value]
# 常用选项如下所示
-h:指定服务器的主机名
-p:指定服务器端口
-s:指定服务器socket
-c:指定并发连接数
-n:指定请求数
-d:以字节的形式指定SET/GET指的数据大小
-k:1=keep alive 0=reconnect
-r:SET/GET/INCR 使用随机 key,SADD 使用随机值
-P:通过管道传输<numreq>请求
-q:强制退出redis。仅显示query/sec值
--csv:以CSV格式输出
-l:生成循环,永久执行测试
-t:仅运行以逗号分隔的测试命令列表
-l:ldle模式。仅打开N个idle连接并等待

  • 结合上述选项,可以针对某台Redis服务器进行性能检测,如指定redis-benchmark -h 192.168.93.101 -p 6379 -c 100 -n 100000 命令即可向IP地址为192.168.93.101、端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能
[root@redis-node2 ~]# redis-benchmark -h 192.168.93.101 -p 6379 -c 100 -n 100000
Summary:
  throughput summary: 54945.05 requests per second
  latency summary (msec):
          avg       min       p50       p95       p99       max
        1.602     0.216     1.591     2.143     2.287     6.871

  • 指定redis-benchmark -h 192.168.93.101 -p 6379 -q -d 100命令的作用是测试存取大小为100字节的数据包的性能
[root@redis-node2 ~]# redis-benchmark -h 192.168.93.101 -p 6379 -q -d 100
LRANGE_600 (first 600 elements): 6668.00 requests per second, p50=2.951 msec
MSET (10 keys): 54200.54 requests per second, p50=0.799 msec       
  • 还可以测试某些操作的的性能,例如指定redis-benchmark -t set,lpush -n 100000 -q命令的作用是测试本机上Redis服务在进行set与plush操作时的性能
[root@redis-node2 ~]# redis-benchmark -h 192.168.93.101 -p 6379 -t set,lpush -n 100000 -q
SET: 62972.29 requests per second, p50=0.455 msec                   
LPUSH: 61614.29 requests per second, p50=0.503 msec 

五、Redis数据库常用命令

# 前面提到Redis数据库采用key-value(键值对)的数据存储形式,所使用的命令是set与get命令
set:存放数据,基本的命令格式为set key value
get:获取数据,基本的命令格式为get key


# 例如创建名为teacher的键值为zhanglong,使用get获取teacher键的值
127.0.0.1:6379> set teacher zhanglong
OK
127.0.0.1:6379> get teacher
"zhanglong"

5.1、key相关命令

5.1.1、keys
  • 使用keys命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> set k2 2
OK
127.0.0.1:6379> set k3 3
OK
127.0.0.1:6379> set v1 4
OK
127.0.0.1:6379> set v5 5
OK
127.0.0.1:6379> keys *		# 查看当前数据库中所有键
 1) "v1"
 2) "k3"
 3) "mylist"
 4) "counter:__rand_int__"
 5) "teacher"
 6) "k2"
 7) "myhash"
 8) "v5"
 9) "k1"
10) "key:__rand_int__"

127.0.0.1:6379> set v22 5	# 查看当前数据库中以v开头的键名
OK
127.0.0.1:6379> keys v*
1) "v1"
2) "v22"
3) "v5"

127.0.0.1:6379> keys v?		# 查看当前数据库中以v开头后面包含任意一位的键名
1) "v1"
2) "v5"
	
127.0.0.1:6379> keys v??	# 查看当前数据库中以v开头v开头后面包含任意两位的键名
1) "v22"

5.1.2、exists
  • exists命令可以判断键值是否存放
127.0.0.1:6379> exists teacher	# 判断teacher键是否存放
(integer) 1		# ”1“表示键存在
127.0.0.1:6379> exists tea
(integer) 0		# ”0“表示键不存在


5.1.3、del
  • del命令可以删除当前数据库的指定key
127.0.0.1:6379> keys *
 1) "v1"
 2) "k3"
 3) "mylist"
 4) "counter:__rand_int__"
 5) "teacher"
 6) "v22"
 7) "k2"
 8) "myhash"
 9) "v5"
10) "k1"
11) "key:__rand_int__"

127.0.0.1:6379> del v5
(integer) 1

127.0.0.1:6379> get v5
(nil)

5.1.4、type
  • 使用type命令可以获取key对应的value值类型
127.0.0.1:6379> type k1
string

5.1.5、rename
  • rename命令是对已有key进行重命名,其命令格式为:rename 源key 目标key。使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值。在实际使用过程中,建议先用exists命令查看目标key是否存在,然后再决定是否指定renane命令,以避免覆盖重要数据。(源key会消失)
127.0.0.1:6379> keys *
 1) "v1"
 2) "k3"
 3) "mylist"
 4) "counter:__rand_int__"
 5) "teacher"
 6) "v22"
 7) "k2"
 8) "myhash"
 9) "k1"
10) "key:__rand_int__"

127.0.0.1:6379> rename v22 v2
OK

127.0.0.1:6379> keys v*
1) "v1"
2) "v2"

127.0.0.1:6379> get v1
"4"
127.0.0.1:6379> get v2
"5"

127.0.0.1:6379> rename v1 v2
OK

127.0.0.1:6379> get v1
(nil)
127.0.0.1:6379> get v2
"4"

5.1.6、renamenx
  • renamenx命令的作用是对已有key进行重命名,并检测新名是否存在,其命令格式与renamenx的命令格式关键字不同外基本相同:renamenx 源key 目标key。使用renamenx命令进行重命名时,如果目标key存在则不进行重命名。(源和目标key都存在),若目标key不存在,则进行重命名,源key会丢失
127.0.0.1:6379> keys *
1) "k3"
2) "mylist"
3) "counter:__rand_int__"
4) "teacher"
5) "k2"
6) "myhash"
7) "v2"
8) "k1"
9) "key:__rand_int__"

127.0.0.1:6379> get teacher
"zhanglong"

127.0.0.1:6379> get v2
"4"

127.0.0.1:6379> renamenx v2 teacher
(integer) 0

127.0.0.1:6379> keys *
1) "k3"
2) "mylist"
3) "counter:__rand_int__"
4) "teacher"
5) "k2"
6) "myhash"
7) "v2"
8) "k1"
9) "key:__rand_int__"

127.0.0.1:6379> get teacher
"zhanglong"
127.0.0.1:6379> get v2
"4"

5.1.7、dbsize
  • dbsize命令的作用是查看当前数据库中key的数目
127.0.0.1:6379> dbsize
(integer) 9

六、多数据库常用命令

  • Redis支持多数据库,Redis在没有任何改动的情况下默认包含16个数据库,数据库名称是用数字0-15来依次命名的。使用select命令可以进行Redis的多数据库之间的切换,命令格式为select index,其中index表示数据库的序号。而使用redis-cli连接Redis数据库后,默认使用的是序号为0的数据库

6.1、多数据库间切换

127.0.0.1:6379> select 10	# 切换至序号为10的数据库
OK	
127.0.0.1:6379[10]> select 15	# 切换到序号为15的数据库
OK
127.0.0.1:6379[15]> select 0		# 切换到序号为0的数据库
OK

6.2、多数据库间移动数据

  • Redis的多数据库在一定程度上是相对独立的,例如在数据库0上面存放k1的数据,在其他1-15的数据库上无法查看到
127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> get k1
"100"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get k1
(nil)

  • Redis数据库提供了一个move的命令,可以进行多数据库之间的数据移动。命令的基本语法为”move key dbindex“。其中”key”表示当前数据库的目标键,“dbindex”表示目标数据库的序号,具体操作方式如下所示
127.0.0.1:6379[1]> select 0		# 切换至数据库0
OK

127.0.0.1:6379> get k1		# 查看目标数据是否存在
"100"

127.0.0.1:6379> move k1 1	# 将数据库0中k1移动到数据库1中
(integer) 1

127.0.0.1:6379> select 1	# 切换至目标数据库1
OK

127.0.0.1:6379[1]> get k1	# 查看被移动数据
"100"

127.0.0.1:6379[1]> select 0		
OK

127.0.0.1:6379> get k1		# 在数据库0中无法查看到k1的值
(nil)

6.2、清除数据库内数据

# 清空当前数据库
127.0.0.1:6379> flushdb
OK


# 清空所有数据库的数据(不建议使用)
127.0.0.1:6379> flushall
OK

七、Redis持久化

  • Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富,有字符串、列表、集合和有序集合。支持在服务器端计算集合等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构化服务器。
  • Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化”);也可以把每一次数据变化都写入到一个文件里面(这称为“全持久化模式”)
  • 由于Redis的数据都存放在内容中,如果没有配置持久化,Redis重启后数据就hi丢失了。所以,需要开启Redis的持久化功能,将数据保存到磁盘上,当Redis重启后,可以从磁盘中恢复数据。Redis提供两种方式进行持久化,一种是RDB持久化(原理是将Redis在内存中的数据库记录定时dump到磁盘上的持久化),另一种是AOF持久化(append only file)(原理是将Redis的操作日志以追加的方式写入文件)

7.1、RDB和AOF的区别

  • RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入到磁盘,实际操作过程种fork一个子进程,先将数据集写入临时文件,写入成功后,新的RDB文件特换之前的就RDB文件,并删除旧文件,用二进制压缩存储

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以开发文件看到详细的操作记录

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7.2、Redis持久化配置

7.2.1、RDB持久化配置
  • Redis会将数据集的快照dump到dump.rdb文件中
[root@redis-node1 ~]# vim /etc/redis/6379.conf 
# 开发配置文件搜索save进行修改
save 900 1		# 在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照
save 300 10		# 在300秒(5分钟)之后,如果至少有3个key发生变化,则dump内存快照
save 60 10000 	# 在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照
	
7.2.2、AOF持久化配置
  • 在Redis的配置文件种存在三种同步方式
appendfsync always:每次有数据修改发生时都会写入到AOF文件
appendfsync everysec:每秒同步一次,该策略为AOF的缺省策略(推荐)
appendfsync no:从不同步(交给操作系统同步),高效但是数据不会被持久化

[root@redis-node1 ~]# vim /etc/redis/6379.conf 
appendonly yes		# 开启aof

# The name of the append only file (default: "appendonly.aof")

appendfilename "wzh.aof"	# aof文件名称

appendfsync everysec  # 同步方式(缺省策略)
[root@redis-node1 ~]# systemctl restart redis.service 
[root@redis-node1 ~]# ls /var/lib/redis/6379/
dump.rdb  wzh.aof

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值