Redis教程入门到精通-互联网分布式技术教程(1)

123 阅读7分钟

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战

在本文中,您能了解NoSQL是什么,NoSQL和关系型数据库的对比优缺点。掌握Redis是什么、能干什么、如何用;掌握Redis在Windows和Linux下的安装配置、五大数据类型、常用操作命令、Redis持久化、主从复制、事务控制以及用Jedis操作进行Java开发等技术点!废话不多说进入正题!!!

 NoSQL简介

1. 数据库应用的演变历程

单机数据库时代、Memcached时代、读写分离时代、分表分库时代(集群)、nosql时代。

2. NoSQL数据库

NoSQL = Not Only SQL(不仅仅是SQL) ,泛指non-relational(非关系型数据库)。今天随着互联网web2.0网站的兴起,比如谷歌或Facebook每天为他们的用户收集万亿比特的数据,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展,就是一个数据量超大。传统的SQL语句库不再适应这些应用了。NoSQL数据库是为了解决大规模数据集合多重数据种类带来的挑战,特别是超大规模数据的存储。

NoSQL数据库的一个显著特点就是去掉了关系数据库的关系型特性,数据之间一旦没有关系,使得扩展性、读写性能都大大提高。

3. 当前NoSQL的使用

NoSQL和传统的关系型数据库不是排斥和取代的关系,在一个分布式应用中往往是结合使用的。复杂的互联网应用通常都是多数据源、多数据类型,应该根据数据的使用情况和特点,存放在合适的数据库中。

4. NoSQL数据模型

传统关系型数据库: 表。

t_student、t_address、t_course

NoSql数据库: 聚合结构。

{

 "student":{

   "id":1001,

   "name":"zhangsan",

   "addresses":{"province":"beijing","city":"daxingqu","street":"liangshuihe"},

   "courses":[

    {

      "id":01,

      "name":"java"

      },

{

      "id":02,

      "name":"mybatis"

      },

{

      "id":03,

      "name":"spring"

      }

    ]

  }

}

Redis

5. Redis简介

Remote Dictionary Server(远程字典服务器),是一个用C语言编写的、开源的、基于内存运行并支持持久化的、高性能的NoSQL数据库.也是当前热门的NoSQL数据库之一。

6. Redis的特点

  • 支持数据持久化

Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

  • 支持多种数据结构

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

  • 支持数据备份

Redis支持数据的备份,即master-slave模式的数据备份。

7. Linux上安装Redis

第一步:下载redis

image.png

第二步:使用Xftp工具上传redis-5.0.2.tar.gz到linux 系统。

image.png

第三步:解压redis-5.0.2.tar.gz到/opt目录

image.png

第四步:编译redis,进入解压目录,并且执行make命令:

image.png

报错:gcc命令未找到

image.png

第五步:安装gcc。

什么是 gcc ?

gcc是GNU compiler collection的缩写,它是Linux下一个编译器集合(相当于javac ),是c或c++程序的编译器。

怎么安装gcc ?

  • 方式一:在有外网的情况下,使用yum进行安装。执行命令:yum -y install gcc。
  • 方式二:在没有外网的情况下,从光盘里进行安装。

1、从终端进入目录:/run/media/root/CentOS 7 x86_64/Packages

image.png

2、依次执行命令:

  • rpm -ivh libmpc-1.0.1-3.el7.x86_64.rpm 回车
  • rpm -ivh cpp-4.8.5-11.el7.x86_64.rpm 回车
  • rpm -ivh kernel-headers-3.10.0-514.el7.x86_64.rpm 回车
  • rpm -ivh glibc-headers-2.17-157.el7.x86_64.rpm 回车
  • rpm -ivh glibc-devel-2.17-157.el7.x86_64.rpm回车
  • rpm -ivh libgomp-4.8.5-11.el7.x86_64.rpm回车
  • rpm -ivh gcc-4.8.5-11.el7.x86_64.rpm回车

image.png

3、执行gcc –v查看Linux内核版本

image.png

第六步:再次回到redis解压目录执行make命令进行编译

image.png

第七步:进行清理工作

image.png

第八步:再次执行make指令进行编译:

image.png

第九步:执行make install安装redis:

image.png

注意:在make执行之后再执行 make install,该操作则将 src下的许多可执行文件复制到/usr/local/bin 目录下,这样做可以在任意目录执行redis的软件的命令(例如启动,停止,客户端连接服务器等), make install 可以不用执行,看个人习惯。

查看make编译结果,cd src目录

image.png

image.png

第十步:启动Redis

启动方式:

① 前台启动 redis-server

image.png

②后台启动 redis-server &

image.png

③根据配置文件启动 启动命令 配置文件 &

image.png

注意:如果修改了redis的配置文件redis.conf,必须在启动时指定配置文件,否则修改无效!

第十一步:关闭Redis服务

关闭方式:

①使用redis客户端关闭,向服务器发出关闭命令

任意目录下执行 指令redis-cli shutdown

推荐使用这种方式, redis先完成数据操作,然后再关闭。

例如:

image.png

②kill pid 或者 kill -9 pid

这种不会考虑当前应用是否有数据正在执行操作,直接就关闭应用。

先使用 ps -ef | grep redis 查出进程号,在使用 kill pid

image.png

8. Redis客户端

Redis客户端是一个程序,通过网络连接到Redis服务器,从而实现跟 Redis服务器的交互。

Redis客户端发送命令,同时显示Redis服务器的处理结果。

redis-cli(Redis Command Line Interface)是Redis自带的基于命令行的Redis客户端,用于与服务端交互,我们可以使用该客户端来执行redis的各种命令。

1. 启动Redis客户端:

1) 直接连接redis (默认ip127.0.0.1,端口6379):redis-cli

在任意目录执行  redis-cli

此命令是连接本机127.0.0.1 ,端口6379的redis

image.png

2) 指定IP和端口连接redis:redis-cli –h 127.0.0.1 -p 6379

-h redis主机IP(可以指定任意的redis服务器)

-p端口号(不同的端口表示不同的redis应用)

在任意目录下执行  redis-cli -h 127.0.0.1 -p 6379

image.png

2. 退出Redis客户端:exit或者quit指令。

image.png

9. Redis基本知识

1) 测试Redis性能

image.png

image.png

2) Redis沟通命令,查看状态

redis >ping 返回PONG

解释:输入ping,redis给我们返回PONG,表示redis服务运行正常

image.png

3) 查看redis服务器的统计信息:info

语法:info

作用:以一种易于解释且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。section 用来返回指定部分的统计信息。 section的值:server , clients ,memory等等。不加section 返回全部统计信息

返回值:指定section的统计信息或全部信息

例1:统计server的信息

image.png

例2:统计全部信息

image.png

4) redis默认使用16个库

Redis默认使用16个库,从0到15。 对数据库个数的修改,在redis.conf文件中databases 16,理论上可以配置无限多个。

image.png

Redis的库和关系型数据库中的数据库实例类似,但又有一些不同,比如redis中各个库不能自定义命名,只能用序号表示,redis中各个库不是完全独立的,使用时最好一个应用使用一个redis实例,不建议一个redis实例中保存多个应用的数据。Redis实例本身所占存储空间其实是非常小的,因此不会造成存储空间的浪费。

5) 切换库命令:select db

默认使用第0个,如果要使用其他数据库,命令是 select index

image.png

6) 查看当前数据库中key的数目:dbsize

语法:dbsize

作用:返回当前数据库的 key 的数量。

返回值:数字,key的数量

image.png

7) 查看当前数据库中有哪些key:keys

image.png

8) 清空当前库:flushdb

image.png

9) 清空所有数据库:flushall

image.png

这也体现出redis中的库并不是完全无关的。

10) config get * 获得redis的所有配置值

  • 语法:config get parameter
  • 作用:获取运行中Redis服务器的配置参数, 获取全部配置可以使用*。参数信息来自redis.conf 文件的内容。 

例1:获取数据库个数 config get databases

image.png

例2:获取端口号config get port

image.png

006APoFYjw1fb3phuzit5g308c08cjvq.gif