👨🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习
🌌上期文章:首期文章
📚订阅专栏:Redis速成
希望文章对你们有所帮助
在此之前,我做过的项目里面也用到了Redis,但是其实我用的版本是Windows版本的,只学了一点皮毛,会拿来用而已,但是企业级开发大多都是用的Linux版本的Redis,所以我要把之前项目中Redis的用法给改掉,也顺便速成一下Redis的原理,毕竟还要在毕业后的暑假实习,Redis这种最基础的得扎实点。
Redis基础篇1
- 初识Redis
- 认识NoSQL
- 认识Redis
- Redis的安装及启动的三种方式
- Linux系统与虚拟机准备
- FinalShell软件准备与远程连接
- Redis安装
- 安装Redis依赖
- 上传安装包并解压
- 进入Redis并运行编译命令
- Redis的启动
- 默认启动
- 指定配置启动
- 开机自启
- Redis客户端
- Redis命令行客户端
- Redis的图形化界面客户端(非必要)
初识Redis
认识NoSQL
Redis中的数据库与我们之前常用的MySQL这种关系型数据库是不太一样的,我们可以将NoSQL与SQL进行简单的对比:
1、结构化存储与非结构化存储
(1)SQL是结构化型的存储方式
id | name | age |
---|---|---|
1 | 张三 | 18 |
2 | 李四 | 20 |
(2)NoSQL是非结构化型的存储方式
key | value |
---|---|
id | 1 |
name | 张三 |
age | 18 |
或者是Document类型的:
{id:2 name:“李四” age:20}
亦或是Graph类型的等等。。。
可以看出NoSQL的存储方式非常的不统一。
2、关系型数据库与非关系型数据库
(1)SQL通过外键来建立表之间的关系
例如以下两表:
id | name | age |
---|---|---|
1 | 张三 | 18 |
2 | 李四 | 20 |
和
id | title | price |
---|---|---|
10 | 库里10 | 1999 |
20 | 詹姆斯13 | 1999 |
我们可以开另一张结构化表来将两表联系起来:
id | uesr_id | item_id |
---|---|---|
1 | 1 | 10 |
2 | 1 | 20 |
(2)NoSQL是非关系型的
将上述表达的方式按照document格式来存储,即:
{id: 1name: "张三"orders: [{id: 1,item: {id: 10, title: "库里10", price: 1999}},{id: 2,item: {id: 20, title: "詹姆斯13", price: 1999}}]
}
这样的方式明显是更为复杂的,数据库本身不会帮忙维护各种各样的关系的。
3、查询方式的不同
(1)SQL查询语法固定,那么可以用相同的语句进行查询,更为方便
(2)NoSQL查询语法不固定(Redis、MongoDB、elasticsearch的查询方式都不一样)
4、事务上的差异
(1)SQL是满足ACID特性的
(2)NoSQL要么是无事务的,要么就只能满足基本的一致性,而不满足ACID特性(NoSQL满足base特性)
总结:
SQL | NoSQL | |
---|---|---|
数据结构 | 结构化 | 非结构化 |
数据关联 | 关联的 | 非关联的 |
查询方式 | SQL查询 | 非SQL |
事务特性 | ACID | BASE |
存储方式 | 磁盘 | 内存(说明查询性能高) |
拓展性 | 垂直 | 水平(考虑数据拆分的需求) |
使用场景 | 数据结构固定;相关业务对数据安全性、一致性要求较高 | 数据结构不固定;对一致性、安全性要求不高;对查询性能要求高 |
认识Redis
Redis称为远程词典服务器,是一个基于内存的键值型NoSQL数据库。
特征:
(1)键值型:对value支持不同数据结构,功能丰富
(2)单线程:每个命令具备原子性
(3)低延迟,速度快(基于内存(最重要原因)、IO多路复用、良好的编码)
(4)支持数据持久化(定期存储到磁盘去)
(5)支持主从集群、分片集群
(6)支持多语言客户端
Redis的安装及启动的三种方式
Linux系统与虚拟机准备
首先我们要准备好相应的环境,大家如果早就有相关环境了就可以跳过了,对于Linux相信大家应该还是会知道一些基础知识的,这就够了,完全不会的最好自行去速成一下。
我们需要有Linux操作系统以及虚拟机,我这里用的虚拟机是VMware15,这个虚拟机随便用哪个肯定都没啥影响的,Linux操作系统建议使用比较常见的centOS07(大家也可以用Ubuntu,但是命令跟centOS还是有点不一样的,比如软件下载命令等),可以在官网中下载,这里有下载的一个网盘链接:
centOS7安装——云盘链接
建议用会员号下载,有4.3G的大小。
接着直接打开虚拟机并创建新的虚拟机,并把之前下载的ios文件安装进去,打开即可(如果大家用的是更高版本的虚拟机,也选择简易安装):
简单配置一下信息,密码设置简单一点就好了,我设置为123456:
设置一下存放位置:
设置磁盘大小,改大一点,我这里改成了40:
接着就创建完成了,等待ios的建议安装完成,到这个页面以后可能要等个十几分钟:
FinalShell软件准备与远程连接
我们在这里要安装好这个软件,并使用这个软件连接Linux操作系统,这样会给我们的开发提供很大的便捷,例如我们可以很方便的使用FinalShell来将文件上传到Linux的某个目录中,FinalShell安装地址:
FinalShell安装地址
直接一直next,中途改一下路径,然后安装一下就好了。
接着我们进行远程连接,我们先在Linux中输入ifconfig,接着复制ip地址:
复制完后去FinalShell中建立SSH连接(如果后序步骤在上传文件的时候失败,请将这里的用户名改为root):
最后双击后再点击:接受并保存,成功连接:
之后有关于Linux的操作就可以在这里进行了,更为方便简洁。
Redis安装
安装Redis依赖
因为Redis是基于C语言编写的,所以要先安装Redis所需要的gcc依赖:
上传安装包并解压
首先我们要下载好Redis安装包,大家可以自行去官网下载,这里提供一个Redis-6.2.6的网盘下载链接:
Redis-6.2.6网盘链接下载
将下载后的安装包放到/usr/local/src目录:
进入这个目录并输入:tar -zxvf redis-6.2.6.tar.gz,即可进行解压
进入Redis并运行编译命令
cd redis-6.2.6
make && make install
运行结束就安装完成了,可以在目录**/usr/local/bin**中查看:
这个目录是默认配置到环境变量的,所以在任意目录都可以运行目录,其中:
redis-cli:redis提供的命令行客户端
redis-server:redis的服务端启动脚本
redis-sentinel:redis的哨兵启动脚本
Redis的启动
默认启动
在任意目录输入redis-server就可以启动Redis了:
redis-server
这属于前台启动,这种方式会阻塞整个窗口,按住ctrl+c才能停止,并不友好。
指定配置启动
让Redis在后台启动,就需要修改一下Redis配置文件,redis-6.2.6中的redis.conf文件即是配置文件。
1、我们把配置文件备份一下,防止配置出错导致的崩溃:
cp redis.conf redis.conf.bck
2、修改redis.conf文件中的一些配置:
vi redis.conf
我们要修改的主要内容如下:
# 监听地址默认为127.0.0.1,导致只能本地访问,修改位0.0.0.0就可以在任意IP访问
bind 0.0.0.0
# 守护进程设置为yes即可后台运行
daemonize yes
# 设置密码,访问Redis必须输入该密码
requirepass 123456
其他:
# 监听端口
port 6379
# 工作目录,默认为当前目录,也就是redis-server时的命令,日志、持久化等文件会保存在这个目录
dir .
# 数据库的数量,设置为1(默认是16,编号0-15)
databases 1
# 设置redis能够使用的最大内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志,我们可以指定日志文件名
logfile "redis.log"
上面的内容只需要进入redis.conf以后,利用查找的方式定位以后修改就很快了。
3、启动Redis:
先进入Redis的安装目录,再启动Redis
cd /usr/local/src/redis-6.2.6
redis-server redis.conf
4、查看Redis是否运行,我们只需要查看进程管理器:
ps -ef | grep redis
5、停止Redis:
停止需要利用kill命令,指定进程号来杀死进程
kill -9 122712
开机自启
上述的方式都还是比较麻烦的,我们可以通过配置来实现开机自启动。
1、我们新建一个系统服务文件:
vi /etc/systemd/system/redis.service
2、内容如下:
[Unit]
Description=redis-server
After=network.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true[Install]
WantedBy=multi-user.target
3、重载系统服务:
systemctl daemon-reload
现在我们的Redis成功被我们的系统管理了。
4、启动与Redis状态查看:
# 启动
systemctl start redis
# Redis状态查看
systemctl status redis
可以看到已经是有效运行了的。
其他命令:
# 停止Redis
systemctl stop redis
# 重启Redis
systemctl restart redis
5、开机自启
systemctl enable redis
这样我们就实现了开机自启。
Redis客户端
安装完Redis,我们就可以进行Redis的操作,从而实现CRUD了,这里就需要用到Redis客户端,包括:
1、命令行客户端
2、图形化界面客户端
3、编程客户端(后序讲)
Redis命令行客户端
Redis安装完成后就自带了命令行客户端redis-cli,使用方式:
redis-cli [options] [commonds]
常见的options:
-h 127.0.0.1:指定要连接的Redis节点的IP地址,默认为127.0.0.1
-p 6379:指定要连接的Redis节点的端口,默认为6379
-a 123456:指定Redis的访问密码
其中commonds就是Redis的操作命令,如:
ping:与Redis服务器做心跳测试,服务器正常会返回pong
如果不指定commond,则会进入redis-cli的交互控制台。
这里做个实验,将Redis与我们的虚拟机进行连接。
1、首先得到这台虚拟机的IP地址:
ifconfig
2、接下来就直接利用命令连接到虚拟机即可:
像打乒乓球一样,ping-pong。
之所以会报warning,是因为-a方式不是太安全,我们也可以先不指定密码,然后利用AUTH来指定用户名和密码(这里没有用户名只有密码):
接下来就可以对Redis进行各种增删改查了。
Redis的图形化界面客户端(非必要)
GitHub上有人编写了这个图形化界面客户端RedisDesktopManager,但是提供的只是RedisDesktopManager的源码,并没有安装包。
而另有一个大神提供了这个源码编译运行后的安装包,源码更新那么这个安装包也会更新:
Redis图形化界面客户端——安装包
安装很简单,打开就是这样:
填写相关信息,进行连接:
如果无法连接那就是Redis的防火墙没关,用这条指令关一下:
systemctl stop firewalld.service
但是这也只是个图形化界面,跟之前学习mysql的时候用到的图形化界面Navicat、sqlyog一个意思,并不是必要的。