Redis入门篇(一):初始Redis及其安装
初识Redis
Redis 是一个基于内存的键值存储NoSQL数据库。
内存存储
所有数据都存储在内存中,这使得读写操作非常快速。虽然 Redis 也支持数据持久化,将数据保存到磁盘,但其核心是内存数据库。
键值对(Key-Value)存储
数据以键值对的形式存储,键是字符串,值可以是多种数据结构,例如下面的这些数据类型:
- 字符串(Strings):普通的文本或二进制数据。
- 散列(Hashes):包含键值对的集合,适合存储对象。
- 列表(Lists):按插入顺序排序的字符串列表。
- 集合(Sets):无序且不重复的字符串集合。
- 有序集合(Sorted Sets):带有分数的字符串集合,按分数排序。
- 位图(Bitmaps)
- 基数统计(HyperLogLogs)
- 地理空间索引(Geospatial Indexes)
- 流(Streams)
NoSQL 数据库
NoSQL(Not Only SQL)数据库是一类不使用传统关系模型的数据库系统。与关系型数据库(如 MySQL、PostgreSQL)相比,NoSQL 数据库具有以下特点:
- 灵活的模式:不需要预定义数据模式,适合处理多变和非结构化数据。
- 高扩展性:通常设计为分布式系统,能够水平扩展。
- 高性能:专注于特定类型的数据存储和操作,性能优化较好。
SQL vs NoSQL
结构化和非结构化
- 传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束等等信息,插入的数据必须遵守这些约束
- NoSQL则对数据库格式没有严格约束,往往形式松散,自由,可以是键值型(Key-Value)也可以是文档型(Document),还可以是图格式(Graph)。
关联和非关联
- 传统数据库的表与表之间往往存在关联,例如外键,表的1-1、1-N和N-M关系。
- 非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合
查询方式
- 传统关系型数据库会基于Sql语句做查询,语法有统一标准,无论是MySQL、SQL Server还是其他数据库,基本的SQL语法相同,个别语法不同。
- 非关系型数据库有自己的独特语法,如Redis的GET、SET、LPUSH、RPOP……
事务
- 传统关系型数据库能满足事务ACID的原则,适用于对数据的安全性和一致性有较高要求。
- 非关系型数据库往往不支持事务,或者不能严格保证ACID的特性,只能实现基本的一致性。
存储方式
- 关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响
- 非关系型数据库,他们的操作更多的是依赖于内存来操作,内存的读写速度会非常快,性能自然会好一些
扩展性
- 关系型数据库集群模式一般是主从,主从数据一致,起到数据备份的作用,称为垂直扩展。
- 非关系型数据库可以将数据拆分,存储在不同机器上,可以保存海量数据,解决内存大小有限的问题。称为水平扩展。
再识Redis
Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数据库。
Redis 的特点和优势包括:
- 高速性能:由于所有数据都存储在内存中,读写操作非常快,通常用于需要快速访问数据的应用程序。
- 丰富的数据类型:支持多种数据类型,适用于不同的应用场景。
- 持久化:支持将数据从内存持久化到磁盘,有多种持久化策略,如RDB(快照)和AOF(追加文件)。
- 高可用性和分布式:通过Redis Sentinel和Redis Cluster实现高可用性和数据分片,保证系统的稳定性和扩展性。
- 简单易用:提供简单直观的命令行接口和多种编程语言的客户端库,方便开发人员集成和使用。
Redis 常用于以下场景:
- 缓存:减少数据库负载和提高应用程序响应速度。
- 会话存储:存储用户会话信息,实现快速读取和写入。
- 排行榜:利用有序集合实现排行榜功能。
- 发布/订阅:实现消息发布和订阅机制。
- 任务队列:使用列表或流来实现任务队列,处理异步任务。
安装Redis(Linux)
大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包,所以我们学习Linux系统下的Redis安装。
依赖库安装
Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:
1 | yum install -y gcc tcl |
上传压缩包并解压
到Redis官网下载后缀为gz结尾的安装包,通过任一shell软件将压缩包传到Linux系统当中,运行下列命令(替换版本号)进行解压缩:
1 | tar -xzf redis-x.x.x.tar.gz |
进入解压后的Redis目录,运行编译命令,如果没有出错,应该就安装成功了。
1 | make && make install |
默认的安装路径在/usr/local/bin
目录下
该目录已经默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:
- redis-cli:是redis提供的命令行客户端
- redis-server:是redis的服务端启动脚本
- redis-sentinel:是redis的哨兵启动脚本
启动方式
默认启动
指定配置启动
开机自启
默认启动
在任意目录输入redis-server
命令即可启动Redis,会看到Redis的图标。
这种启动属于前台启动
,会阻塞整个会话窗口,窗口关闭或者按下CTRL + C
则Redis停止。不推荐使用。
指定配置启动
如果要让Redis以后台方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包,名字叫redis.conf
我们先将这个配置文件备份一份:
1 | cp redis.conf redis.conf.bck |
然后修改redis.conf文件中的一些配置,用vi编辑器打开该文件:
1 | vi redis.conf |
用/
加上想要查找的字符,查找到对应行,输入i
进行修改,修改完成:wq
保存并退出,不小心修改错了则:q!
不保存退出
1 | # 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0 |
Redis的其它常见配置:
1 | # 监听的端口 |
启动Redis:
1 | 进入redis安装目录 |
停止服务:
1 | 利用redis-cli来执行 shutdown 命令,即可停止 Redis 服务, |
开机自启
我们也可以通过配置来实现开机自启。
首先,新建一个系统服务文件:
1 | vi /etc/systemd/system/redis.service |
内容如下:
1 | [Unit] |
然后重载系统服务:
1 | systemctl daemon-reload |
现在,我们可以用下面这组命令来操作redis了:
1 | # 启动 |
执行下面的命令,可以让redis开机自启:
1 | systemctl enable redis |
Redis客户端的使用
安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这需要用到Redis客户端,包括:
- 命令行客户端
- 图形化桌面客户端
- 编程客户端
Redis命令行客户端
Redis安装完成后就自带了命令行客户端:redis-cli
使用方式如下:
1 | redis-cli [options] [commonds] |
其中常见的options有:
-h 127.0.0.1
:指定要连接的redis节点的IP地址,默认是127.0.0.1-p 6379
:指定要连接的redis节点的端口,默认是6379-a 123321
:指定redis的访问密码
例如我们可以通过以下命令行连接上Redis
1 | redis-cli -a 123321 |
图形化桌面客户端
这里我推荐使用Navicat,当然也可以使用其他的客户端
个人觉得Navicat界面美观,在Navicat 17版本后可以连接Redis,可以实现一个软件连接多个不同类型的数据库,不需要为了多个数据库而在电脑上安装多个软件客户端,便捷高效
点击左上角的连接,选择Redis,填入对应的数据:
连接名称随意
主机为你安装了Redis的Linux系统的IP地址
由于没有设置用户名,所以选择通过Password进行验证,输入密码后点击连接即可
如果确认信息都对,但是连接不上,则需要在Linux将Redis使用端口放行,再次测试连接即可
1 | firewall-cmd --zone=public --add-port=6379/tcp --permanent |
编程IDE客户端
本章使用IntelliJ IDEA作为例子,说明如何在编程IDE中连接Redis
启动IntelliJ IDEA,打开任一项目
在右侧工具栏中选着Database,点击+号,选择Redis
在弹出的窗口中输入正确的参数,点击左下角Test Connection测试连接,出现Succeeded即为连接成功,同样的方法也可以连接MySQL等其他数据库,与在Navicat中查看无异
总结
至此,Redis入门篇(一)就结束了。通过本篇文章,我们初步了解了Redis作为一个基于内存的键值存储NoSQL数据库的特点和优势。Redis因其高速的读写性能、多样的数据类型支持和灵活的持久化方案,被广泛应用于需要快速数据访问的场景。此外,我们学习了Redis与传统关系型数据库的区别,掌握了基本的安装和配置方法,并了解了不同客户端(命令行客户端、图形化客户端和编程IDE客户端)的使用方式。通过这些内容,我们为进一步深入学习和使用Redis奠定了坚实的基础。