部署Redis服务

目录

部署Redis服务

NoSQL概述

数据库类型

RDBMS

RDBMS软件

NoSQL

NoSQL软件

部署Redis服务

部署Redis服务

Redis介绍

安装软件

初始配置

管理服务

连接服务

常用命令

配置文件解析

配置分类

数据单位

常用配置

内存管理

设置连接

服务管理脚本

测试配置


部署Redis服务

NoSQL概述

数据库类型

RDBMS

  • 关系型数据库管理系统

—— Relational Database Management System

—— 按照预先设置的组织结构(建库,建表),将数据存储到物理介质(硬盘)上

—— 数据之间可以做关联操作(外键)

RDBMS软件

  • 主流的RDBMS软件

—— MySQL

—— MariaDB

—— Oracle

—— DB2

—— SQL Server

NoSQL

  • NoSQL(NoSQL = Not Only SQL)

—— 意思是“不仅仅是SQL”

—— 泛指非关系型数据库

—— 不需要预先定义数据存储结构(不需预先建表、建库)

—— 每条记录可以有不同的数据类型和字段个数

NoSQL软件

  • 主流软件

—— Memcached

—— Redis

—— MongoDB

—— CouchDB

—— Neo4j

—— FlockDB

//Redis 和 Memcached 都是把数据存储在内存中,Redis相比于Memcached优点在于,Redis会把数据先放在内存里,服务在运行过程中定期的将内存数据存储到硬盘中。

部署Redis服务

部署Redis服务

Redis介绍

  • Remote Dictionary Server(远程字典服务器)

—— 是一款高性能的(Key/Values)分布式内存数据库

—— 支持数据持久化(定期把内存里的数据存储到硬盘)

—— 支持多种数据类型string、list、hash ... ...

—— 支持 master-slave 模式数据备份

—— 中文网站 www.redis.cn

安装软件

  • 源码编译安装

—— Redis-4.0.11下载地址:http://www.redis.cn/download.html

将下载好的软件包上传到操作系统中:

[root@host50 ~]# ls /root

[root@host50 ~]# rpm -q gcc      //源码安装需要使用编译软件gcc

gcc-4.8.5-44.el7.x86_64

[root@host50 ~]# yum -y install gcc        //若没有安装gcc,请安装gcc

[root@host50 ~]# tar -zxvf redis-4.0.11.tar.gz

[root@host50 ~]# cd redis-4.0.11

[root@host50 redis-4.0.11]# make

[root@host50 redis-4.0.11]# make install

主机192.168.233.51也需要安装redis服务,操作步骤和上面一样。

初始配置

  • 配置服务运行参数

—— ]# ./utils/install_serversh        //初始化(使用默认初始化配置)

—— 端口 ---> 6379

—— 主配置文件    /etc/redis/6379.conf

—— 日志文件    /var/log/redis_6379.log

—— 数据库目录    /var/lib/redis/6379

—— 服务启动程序    /usr/local/bin/redis-server

—— 命令行连接命令    /usr/local/bin/redis-cli

[root@host50 redis-4.0.11]# ./utils/install_server.sh     //使用默认初始化配置,全部选项都按回车

部署Redis服务_第1张图片

//如图所示,我们可以看见初始化配置参数。安装完成后Redis服务会自动开启

[root@host50 redis-4.0.11]# netstat -lntup | grep 6379       //查看服务是否运行

tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      36969/redis-server

//Redis服务默认使用的地址是127.0.0.1,说明此服务只接收本机的访问。

[root@host50 redis-4.0.11]# ls /etc/redis/6379.conf      //查看主配置文件

/etc/redis/6379.conf

[root@host50 redis-4.0.11]# ls /var/lib/redis/6379       //查看数据库目录,没有输出结果,数据库目录为空,因为还没有存储数据

[root@host50 redis-4.0.11]# ls /var/log/redis_6379.log         //查看日志文件

/var/log/redis_6379.log

[root@host50 redis-4.0.11]# ls /usr/local/bin/      //查看与redis服务相关的命令

管理服务

  • 相关命令

—— ]# /etc/init.d/redis_6379 stop         //停止服务

—— ]# /etc/init.d/redis_6379 start         //启动服务

—— ]# /etc/init.d/redis_6379 status      //查看服务状态

—— ]# ps -C redis-server                       //查看进程 

—— ]# netstat -lntup | grep 6379          //查看端口

[root@host50 ~]# ls /etc/init.d/redis_6379       //调用这个脚本文件来启动或停止服务

/etc/init.d/redis_6379

[root@host50 ~]# /etc/init.d/redis_6379 stop        //停止服务

Stopping ...

Redis stopped

[root@host50 ~]# netstat -lntup | grep 6379       //没有监听的端口,说明服务已经停止

[root@host50 ~]# /etc/init.d/redis_6379 start         //启动服务

Starting Redis server...

[root@host50 ~]# netstat -lntup | grep 6379

tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      37820/redis-server

[root@host50 ~]# /etc/init.d/redis_6379 status       //查看服务状态

Redis is running (37820)

连接服务

  • 访问redis服务

—— redis-cli 默认连接本机的redis服务

[root@host50 ~]# redis-cli      //连接redis服务

127.0.0.1:6379> ping      //ping一下redis服务,输出结果显示PONG说明连接正常

PONG

127.0.0.1:6379> set name bob     //存数据,目前存储在本机的内存中,会定期存储到硬盘里

OK

127.0.0.1:6379> get name      //取数据

"bob"

127.0.0.1:6379> exit     //断开连接

[root@host50 ~]# ls /var/lib/redis/6379/       //dump.rdb是硬盘里的数据,用来保存内存里数据的文件

dump.rdb

[root@host50 ~]# redis-cli

127.0.0.1:6379> get age       //取数据时,如果输出结果显示(nil),说明服务器上没有这个变量

(nil)

127.0.0.1:6379> get name     //如果有这个变量,就会返回这个变量的值

"bob"

127.0.0.1:6379> keys *       //查看服务器上所有已存储的变量

1) "name"

常用命令

—— set key名 key值                //存储1个key值

—— mset key名列表                //存储多个key值

—— get key名                         //获取key值

—— mget                                //获取多个key值

—— select 数据库编号0-15      //切换库

—— keys *                               //显示所有key名

—— keys a?                             //显示指定key名

—— exists key名                      //测试key名是否存在

—— ttl key名                           //查看key生存时间 

—— type key名                       //查看key类型

—— move key名 库编号          //移动key到指定库

—— expire key名 数字            //设置key在内存里有效时间

—— del key名                         //删除指定的key

—— flushall                            //删除内存里所有key

—— flushdb                           //删除当前所在库的所有key

—— save                                //保存所有key到硬盘

—— shutdown                       //停止服务

  • mset key名列表     //存储多个key值

127.0.0.1:6379> mset x 1 y 2 z 3

127.0.0.1:6379> keys *

1) "name"

2) "x"

3) "y"

4) "z"

  • mget     //获取多个key值

127.0.0.1:6379> mget x y name z

1) "1"

2) "2"

3) "bob"

4) "3"

  • select 数据库编号0-15      //切换库

—— 默认一共有16个库,当面默认是在0号库中

127.0.0.1:6379> select 16        //数据库编号只有0-15,输入以外的编号会报错,报错意思是索引超出了范围

(error) ERR DB index is out of range

127.0.0.1:6379> select 1           //切换到1号库

OK

127.0.0.1:6379[1]>                    // 切换到2号库

127.0.0.1:6379[1]> select 2

OK

127.0.0.1:6379[2]>

部署Redis服务_第2张图片

//如图所示,切换到几号库,前面就会显示库的编号,0号库不显示库的编号

  • keys a?      //显示指定key名

—— ?是通配符,表示任意一个字符

127.0.0.1:6379> keys ?       //查看1个字符的变量

1) "x"

2) "y"

3) "z"

127.0.0.1:6379> keys ????      //查看4个字符的变量

1) "name"

127.0.0.1:6379> keys n???      //查看一共有4个字符的变量,且变量名要以n开头

1) "name"

  • exists key名      //测试key名是否存在

127.0.0.1:6379> get y           //此时变量y已经存在

"2"

127.0.0.1:6379> set y 200     //再次给变量y赋值

OK

127.0.0.1:6379> get y       //y会被覆盖赋值,原来的值就不在了,变为新存储的值

"200"

127.0.0.1:6379> exists i       //查看变量i是否已存在,输出结果是0表示不存在

(integer) 0

127.0.0.1:6379> exists y      //查看变量y是否已存在,输出结果是1表示存在

(integer) 1

  • ttl key名      //查看key生存时间

—— 查看变量还能在内存里存多长时间,默认情况下我们存储变量时不会定义生存时间,即永不过期,只要不手动删除这个变量,这个变量就会一直存储在内存中。

127.0.0.1:6379> ttl y        //查看变量y的生存时间,返回值为-1表示变量y永不过期

(integer) -1

  • expire key名 数字      //设置key在内存里有效时间

—— 设置key在内存里有效时间,即可以在内存里存多久,到时后会自动删除key

127.0.0.1:6379> expire y 20       //设置变量y,过期时间单位是秒,即20秒之后过期,过期后会自动把过期的变量删除

(integer) 1      //返回值为1表示设置成功

127.0.0.1:6379> ttl y       //查看变量y的生存时间,过期时间还剩7秒

(integer) 7

127.0.0.1:6379> ttl y      //查看变量y的生存时间,返回值为-2表示变量y已经过期了

(integer) -2

127.0.0.1:6379> keys *      //查看已有所有变量,没有变量y,说明变量y因为过期已被自动删除

1) "name"

2) "x"

3) "z"

  • type key名      //查看key类型

—— 查看变量类型,默认情况下,用 set/mset 命令存储的变量类型都是字符型

127.0.0.1:6379> set f 99        //使用 set 命令存储变量 f

OK

127.0.0.1:6379> type f        //查看变量 f 的类型为string,即字符型

string

127.0.0.1:6379> mset age 21      //使用 mset 命令存储变量 age

OK

127.0.0.1:6379> type age      //查看变量 age 的类型为string,即字符型,即使赋的值是数字,也是字符型

string

127.0.0.1:6379> lpush xxx a b c       //使用 lpush 命令存储变量 xxx

(integer) 3

127.0.0.1:6379> type xxx       //查看变量 xxx 的类型为list,即列表型

list

  • del key名      //删除指定的key,一次删一个

127.0.0.1:6379> keys *

1) "age"

2) "name"

3) "f"

4) "xxx"

5) "x"

6) "z"

127.0.0.1:6379> del xxx       //删除变量xxx,返回值为1说明删除成功

(integer) 1

127.0.0.1:6379> keys *       //查看所有已有变量,没有变量xxx,说明已被删除

1) "age"

2) "name"

3) "f"

4) "x"

5) "z"

  • move key名 库编号 //移动key到指定库

127.0.0.1:6379> keys *        //查看当前0号库里所有的变量

1) "age"

2) "name"

3) "f"

4) "x"

5) "z"

127.0.0.1:6379> move x 1       //将变量x从当前库(0号库)移动到1号库中,返回值为1说明移动成功

(integer) 1

127.0.0.1:6379> move z 1       //将变量z从当前库(0号库)移动到1号库中,返回值为1说明移动成功

(integer) 1

127.0.0.1:6379> keys *        //查看当前0号库里所有的变量,发现没有变量x和z了

1) "age"

2) "name"

3) "f"

127.0.0.1:6379> select 1       //切换到1号库

OK

127.0.0.1:6379[1]> keys *        //查看1号库中的变量,发现有变量x和z

1) "x"

2) "z"

  • flushdb       //删除当前所在库的所有key

127.0.0.1:6379[1]> flushdb       //删除当前所在库(1号库)的所有变量

OK

127.0.0.1:6379[1]> keys *       //1号库中为空,说明1号库里的所有变量已被删除

(empty list or set)

  • flushall        //删除内存里所有key,删除所有变量

127.0.0.1:6379[1]> select 0

OK

127.0.0.1:6379> keys *      //查看0号库的所有变量

1) "age"

2) "name"

3) "f"

127.0.0.1:6379> flushall       //删除内存里所有key,删除所有变量,即删除所有库里的所有变量

OK

127.0.0.1:6379> keys *       //查看0号库的发现为空,说明0号库的所有变量已被删除

(empty list or set)

  • save //保存所有key到硬盘

—— 默认情况下,redis服务在运行过程中,定期将内存里的数据存储到硬盘中。管理员可以手动使用save命令,手动将现在的内存数据保存到硬盘里,不等服务按指定时间间隔去存。

  • shutdown        //停止服务

—— 效果和使用脚本 /etc/init.d/redis_6379 stop 停止服务一样,都会将数据写入硬盘中。

—— 不管到没到定期存储数据到硬盘的时间,只要停止服务,都会将内存里的数据存储到硬盘。

127.0.0.1:6379> set x 99

OK

127.0.0.1:6379> keys *       //此时变量x的数据是存储在内存里面的

1) "x"

127.0.0.1:6379> shutdown       //停止服务

not connected> ping         //此时服务已停止,还在redis服务的命令行中,连接提示符显示没连接上

Could not connect to Redis at 127.0.0.1:6379: Connection refused

not connected> exit      //退出redis服务命令行

[root@host50 ~]# netstat -lntup | grep 6379       //没有监听接口,说明服务已经停止运行

[root@host50 ~]# /etc/init.d/redis_6379 start       //启动服务

Starting Redis server...

[root@host50 ~]# redis-cli

127.0.0.1:6379> keys *        //重新启动服务后,依旧可以看见数据,说明变量x的数据已存入硬盘中,且启动服务后,会将硬盘里的数据调到内存中。

1) "x"

配置文件解析

配置分类

  • 具体如下

配置项名称

说明

INCLUDES

装载配置

MODULES

模块配置

NETWORK

网络配置

GENERAL

常规配置

SNAPSHOTTING

快照配置

REPLICATION

复制配置(主从同步)

SECURITY

安全配置

CLIENTS

客户端配置

MEMORY MANAGEMENT

内存管理配置

数据单位

  • 数据单位

# 1k => 1000 bytes

# 1kb => 1024 bytes

# 1m => 1000000 bytes

# 1mb => 1024*1024 bytes

# 1g => 1000000000 bytes

# 1gb => 1024*1024*1024 bytes

#

# units are case insensitive so 1GB 1Gb 1gB are all the same.       #意思是数据单位不区分字母大小写

部署Redis服务_第3张图片

常用配置

—— port 6379                //端口

—— bind 127.0.0.1         //IP地址

—— daemonize yes       //守护进程方式运行

—— databases 16          //数据库个数

—— logfile /var/log/redis_6379.log        //日志文件

—— maxclients 10000                             //并发连接数量

—— dir /var/lib/redis/6379                     //数据库目录

注:守护进程方式运行是指服务启动之后,会一直有一个进程在内存里活跃着,等待客户端来连接。

       非守护进程方式运行是指服务启动之后,会有一个进程,当长时间没有客户端访问时,进程会进入休眠状态,当有客户端访问时,由另一个服务唤醒处于休眠状态的redis进程,然后再提供服务。

[root@host50 ~]# vim /etc/redis/6379.conf

  70 bind 127.0.0.1           //IP地址的配置位于配置文件的第70行

  93 port 6379                  //端口的配置位于配置文件的第93行

137 daemonize yes          //端口的配置位于配置文件的第137行

172 logfile /var/log/redis_6379.log         //日志文件的配置位于配置文件的第172行

187 databases 16                                     //数据库个数的配置位于配置文件的第187行

264 dir /var/lib/redis/6379                      //数据库目录的配置位于配置文件的第264行

533 # maxclients 10000                          //并发连接数量的配置位于配置文件的第533行

内存管理

  • 内存清除策略

—— volatile-lru         //最近最少使用(针对设置了TTL的key,即设置了有效期的变量)

—— allkeys-lru          //删除最少使用的key(针对所有的key,即所有变量,包括设置与没设置有效期的)

—— allkeys-lfu          //从所有key中清除使用频率最少的key

—— volatile-lfu         //从所有配置了过期时间的key中清除使用频率最少的key 

—— volatile-random                  //在设置了TTL的key里随机移除

—— allkeys-random                   //随机移除key,所有的key里进行随机删除

—— volatile-ttl(minor TTL)    //移除最近过期的key        

—— noeviction                          //不删除,写满时报错

[root@host50 ~]# vim /etc/redis/6379.conf

部署Redis服务_第4张图片

//如图所示,配置文件中第565~572是redis服务提供的内存清除策略,在安装软件的过程中,这些内存清除策略的程序也就安装在系统上了,我们只需要修改配置文件调用即可。策略名称 -> 策略解释

  • 优化设置

—— maxmemory                     //最大内存

—— maxmemory-policy          //定义使用策略

—— maxmemory-samples      //选取key模板的个数(针对 lru 和 ttl 策略)

560 # maxmemory         //设置redis服务可以使用物理主机多少内存存储数据,必须要带单位。

591 # maxmemory-policy noeviction      //在配置文件中第591行,定义了默认使用的策略,默认使用策略是noeviction,即不删除,写满时报错。

602 # maxmemory-samples 5        //删除内存中变量时,参照的标准变量的个数,默认模板个数是5。只对最近最少使用和过期时间这两个策略的变量有效。

设置连接

  • 设置密码、ip地址、端口

—— redis服务默认是不需要使用密码登录的

注意:生产环境中redis服务器是内存存储服务器,redis服务器一般不设置连接密码,redis服务的安全应该由linux操作系统来完成,通过系统设置防火墙服务,来允许谁来访问本机的redis服务。

1、设置密码、ip地址、端口

[root@host50 ~]# vim /etc/redis/6379.conf

  70 bind 192.168.233.50       //修改配置文件第70行,修改允许连接redis服务的ip地址

  93 port 6350                       // 修改配置文件第93行,修改redis服务的端口号

501 requirepass 123456       //修改配置文件第501行,去掉注释并设置密码为123456

[root@host50 ~]# /etc/init.d/redis_6379 stop

[root@host50 ~]# /etc/init.d/redis_6379 start       //重启服务,使修改的配置生效

[root@host50 ~]# netstat -lntup | grep 6350      //查看监听端口号和允许连接的ip地址

tcp        0      0 192.168.233.50:6350     0.0.0.0:*               LISTEN      1046/redis-server 1

2、连接服务

    • 错误连接方式说明

[root@host50 ~]# redis-cli        //此命令连接时,默认的连接ip地址是127.0.0.1,默认的端口号是6379,由于修改了连接的ip地址和端口号,所以当不指定这两个参数时,连接请求被拒绝了。

Could not connect to Redis at 127.0.0.1:6379: Connection refused

Could not connect to Redis at 127.0.0.1:6379: Connection refused

not connected> exit

[root@host50 ~]# redis-cli -h 192.168.233.50 -p 6350       //-h指定连接的ip地址,-p指定连接的端口号,设置密码后不使用密码也能登录,但是登陆后不能进行任何操作。

192.168.233.50:6350> keys *       //由于没有使用密码登录,所以显示认证错误

(error) NOAUTH Authentication required.

    • 正确连接方式

—— 当修改了redis服务登录的密码、ip地址、端口中的任意一项,之后登录都需要指定修改后的登录的密码、ip地址、端口进行登录。

使用密码登录的方式一:

[root@host50 ~]# redis-cli -h 192.168.233.50 -p 6350       //进入redis服务后,使用密码登录

192.168.233.50:6350> auth 123456     //输入密码

OK

192.168.233.50:6350> exit

使用密码登录的方式二:

[root@host50 ~]# redis-cli -h 192.168.233.50 -p 6350 -a 123456     //使用选项-a指定密码登录,会警告你使用-a选项登录,密码会显示在命令行上不安全,并不是报错。

Warning: Using a password with '-a' option on the command line interface may not be safe.

192.168.233.50:6350>

注:当在配置文件中修改登录密码、ip地址、端口号中的任意一项之后,启动还是可以使用脚本启动服务,但是停止就不能使用脚本停止服务了,即不能使用 /etc/init.d/redis_6379 stop 这种方式停止服务,原因和解决方案如下:

[root@host50 ~]# /etc/init.d/redis_6379 stop

//如图所示,我们停止redis服务的ip地址是127.0.0.1、端口号是6379,由于我们修改了IP地址和端口号,所以使用脚本停止服务会失败。

停止服务的方法一:

192.168.233.50:6350> shutdown        //在redis服务的命令行里使用命令 shutdown 停止服务

停止服务的方法二:

[root@host50 ~]# redis-cli -h 192.168.233.50 -p 6350 shutdown      //停止服务,在操作系统命令行后面,加shutdown停止服务,注意需要指定修改后的密码、ip地址、端口。

服务管理脚本

  • 脚本常见配置(变量)

—— EXEC=/usr/local/bin/redis-server       //变量EXEC是启动服务的命令

—— CLIEXEC=/usr/local/bin/redis-cli        //变量CLIEXEC是用来连接服务的命令

—— PIDFILE=/var/run/redis_6379.pid       //变量PIDFILE是存放redis服务pid号的文件

—— CONF="/etc/redis/6379.conf"            //变量CONF是redis服务的主配置文件

—— REDISPORT="6379"                            //变量REDISPORT是redis服务的默认端口号

[root@host50 ~]# vim /etc/init.d/redis_6379

  • 修改redis服务管理脚本

—— ]# vim /etc/init.d/redis_6379

—— 当在配置文件中修改登录密码、ip地址、端口号中的任意一项之后,停止服务就不能使用脚本停止服务了。通过修改脚本,使得修改密码、ip地址、端口后,依旧可以使用脚本停止服务

[root@host50 ~]# vim /etc/init.d/redis_6379

43             $CLIEXEC -h 192.168.233.50 -p 6350 -a 123456 shutdown       //将配置文件中的第43行修改成这个样子,需要指定修改后密码、ip地址、端口,该哪一项配置就添加哪一项。

部署Redis服务_第5张图片

//红圈圈起来的地方是配置文件中需要修改的地方。

[root@host50 ~]# netstat -lntup | grep 6350

tcp        0      0 192.168.233.50:6350     0.0.0.0:*               LISTEN      3473/redis-server 1

[root@host50 ~]# /etc/init.d/redis_6379 stop        //使用脚本关闭服务,输出结果是警告使用-a选项输入密码不安全,不是报错。

Stopping ...

Warning: Using a password with '-a' option on the command line interface may not be safe.

Waiting for Redis to shutdown ...

Redis stopped

[root@host50 ~]# netstat -lntup | grep 6350      //查看监听端口,没有输出结果说明服务已停止

测试配置

  • 测试配置方法

—— 通过主机51连接redis服务器50,并插入数据

—— 查看redis服务器50数据是否插入成功

1、关闭主机50和51的防火墙和SELinux

[root@host50 ~]# systemctl stop firewalld

[root@host50 ~]# setenforce 0

[root@host51 ~]# systemctl stop firewalld

[root@host51 ~]# setenforce 0

2、客户端51连接redis服务器50

主机192.168.233.51:

[root@host51 ~]# redis-cli -h 192.168.233.50 -p 6350 -a 123456

192.168.233.50:6350> keys *

1) "x"

3、客户端51存入数据

主机192.168.233.51:

192.168.233.50:6350> set name bob

OK

192.168.233.50:6350> set age 19

OK

192.168.233.50:6350> set sex boy

OK

192.168.233.50:6350> keys *

1) "x"

2) "name"

3) "sex"

4) "age"

192.168.233.50:6350> exit

4、redis服务器50登录验证客户端51存入的数据

主机192.168.233.50

[root@host50 ~]# redis-cli -h 192.168.233.50 -p 6350 -a 123456

192.168.233.50:6350> keys *

1) "x"

2) "name"

3) "sex"

4) "age"

你可能感兴趣的:(Redis数据库,redis,数据库,nosql,linux)