😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!💪💪💪
文章目录
- Redis入门概述
- 一、什么是Redis?
- 认识Redis
- Redis相比于其他内存数据库优势在哪里?
- 为什么Redis可用作为MySQL的缓存?
- Redis发展史
- Redis7部分特性说明
- 二、Redis安装配置
- 1.首先,要确保Linux环境下具备GCC编译环境。
- 2.版本选择
- 3.安装包下载
- 4.解压安装包
- 5.在Redis目录下执行make
- 6.查看安装情况
- 7.redis.conf
- 8.启动服务
- 9.连接服务
- 10.hello world
- 11.Redis客户端退出
- 12.Redis服务器关闭
- 总结
Redis入门概述
一、什么是Redis?
认识Redis
首先,我们先来了解什么是Redis
。
根据官网定义:
Redis 是一个内存数据存储,被数百万开发人员用作缓存、向量数据库、文档数据库、流引擎和消息代理。Redis 具有内置复制和不同级别的磁盘持久性。它支持复杂的数据类型(例如,字符串、哈希、列表、集合、排序集和 JSON),并在这些数据类型上定义了原子操作。
首先,我们可以注意到Redis是一个内存数据库
,也就是说,它的数据都是直接加载到内存中的,所以可以直接在内存中完成查询,相比于MySQL需要从磁盘中读取数据到内存,再从内存中查询,Redis的效率明显是高的多的(如果你学习过计算机组成原理,那么你应该了解,从磁盘中读取数据所花费的时间是远远大于从内存中读取数据的时间的)。
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的
key-value
数据库。
再者,Redis是一个key-value类型的数据库
。
Key-value
类型的数据库是一种数据库模型,其中数据以键值对的形式存储和检索。每个键都是唯一的,并且与一个特定的值相关联。这种模型类似于字典或者哈希表的结构,在大多数情况下,可以通过键快速地检索到相应的值。
key-value
结构示意图如下:
Redis相比于其他内存数据库优势在哪里?
Redis 与其他 key - value 缓存产品有以下几个特点:
- Redis支持
数据的持久化
,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。- Redis不仅仅支持简单的key-value类型的数据,同时还提供
list,set,zset,hash
等数据结构的存储。- Redis的所有操作都是
原子性
的,同时Redis还支持对几个操作全并后的原子性执行。- Redis 还支持事务、Lua 脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式,内存淘汰机制、过期删除机制等等。
总结一下,Redis相比于其他内存数据库有以下几个优势:
- 持久化:
Memcached
也是基于内存的数据库,但是由于Memcached
没有持久化功能,所以在机器突然宕机以后,数据会直接丢失,而Redis就可以将数据落盘持久化。 - 多样化数据结构支持。
- 操作原子性:这里先提一句,这是由于Redis是单进程的,所以不会导致竞争,也就不会出现多进程/多线程下的并发问题。
- 多种集群方案:这个也是Redis高可用和高并发的保证,未来会展开讲。
- 其他高级功能:事务、Lua 脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式,内存淘汰机制、过期删除机制。
为什么Redis可用作为MySQL的缓存?
那么Redis到底有多快呢?
Redis能读的速度是110000次/s,写的速度是81000次/s 。
可见,Redis可以的QPS(Queries Per Second,也即每秒查询数)可以打达到惊人的10w次,而相比之下,MySQL一秒钟1w次都已经到极限了。
由于Redis的高可用
和高性能
特性,所以它可用作为MySQL的缓存,帮助MySQL实现高并发。
Redis发展史
Redis是一种开源的内存数据库,最初由意大利程序员Salvatore Sanfilippo于2009年开发。以下是Redis的主要发展历史:
- 2009年5月 - Redis首次正式发布了0.8版本。
- 2010年 - Redis的第一个生产版本1.0发布,并被越来越多的互联网公司采用。
- 2011年 - Redis 2.0版本发布,支持虚拟内存,大大扩展了Redis的应用空间。
- 2012年 - Redis 2.6发布,新增很多新特性如Lua脚本支持。
- 2013年 - Redis 2.8发布,性能进一步优化,支持更大的集群模式。
- 2015年 - Redis 3.0发布,支持集群模式并提升写性能。Redis开始被更多大型互联网公司广泛使用。
- 2016年 - Redis 4.0发布,包括多种新数据结构和功能,如Streams等。
- 2020年 - Redis 6.0发布,支持多线程,I/O性能大幅提升。
- 2022年 - Redis 7.0发布,支持在线缩放容量,新增多模块等特性。
为什么要说Redis的发展史呢?因为Redis并不是一出生就是非常优秀的数据库,而是还在逐步发展的,有一些现在使用的很多的特性都是Redis后期才支持的,并且由于Redis7
这个重量级版本又发布和修改了许多特性,导致面试时可能会出现多个版本实现不一样的问题,所以一定要对一些重要的特性在不同版本中的实现有深刻的认识。
本次,我将主要使用Redis7.2
这个版本进行演示,在讲解某些特性时,也会对比Redis6
这个版本进行讲解。
Redis7部分特性说明
-
在线数据集缩放(Online Data Set Resize)
这是Redis 7.0最大的亮点之一。它允许在运行时动态调整Redis实例使用的内存空间大小,无需重启或导入导出数据。这极大提高了可用性和运维便利性。
-
新的I/O引擎
Redis 7.0引入了全新的I/O引擎,使用多线程和网络批处理来提高网络I/O性能。
-
模块支持自动加载
Redis模块现在可以在启动时自动加载,无需手动指定。
-
新的RediSearch模块2.x版本
RediSearch是Redis的二级索引模块,2.x版本带来了更好的索引压缩、并行查询等能力。
-
分片集群支持在线数据迁移
原生分片集群可在线进行数据迁移,提高可用性。
-
数据持久化引擎Redis-DL
新的数据持久化引擎Redis-DL使用延迟日志功能,可显著降低Fork操作的时间开销。
-
ACL命令行管理工具(redis-cli)
更好的ACL命令行管理支持,包括用户账号管理等。
-
客户端抽象化层和新的Resp3协议
为未来Redis协议升级做准备的架构改造。
-
listpack
listpack 是用来替代 ziplist 的新数据结构,在 7.0 版本已经没有 ziplist 的配置了(6.0版本仅部分数据类型作为过渡阶段在使用)。
-
多AOF文件支持
7.0 版本中一个比较大的变化就是 aof 文件由一个变成了多个,主要分为两种类型:基本文件(base files)、增量文件(incr files),请注意这些文件名称是复数形式说明每一类文件不仅仅只有一个。在此之外还引入了一个清单文件(manifest) 用于跟踪文件以及文件的创建和应用顺序(恢复)。
二、Redis安装配置
由于Redis在Windows系统上无法发挥出最好的性能,所以推荐在Linux环境下安装。本文只教学Linux下Redis的安装,Windows环境的小伙伴可以自行查询安装方法。
本次演示的具体系统为CentOS7
。
1.首先,要确保Linux环境下具备GCC编译环境。
先查看自己GCC的版本:
[baichen@VM-8-16-centos ~]$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-9/root/usr --mandir=/opt/rh/devtoolset-9/root/usr/share/man --infodir=/opt/rh/devtoolset-9/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --with-default-libstdcxx-abi=gcc4-compatible --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-9.3.1-20200408/obj-x86_64-redhat-linux/isl-install --disable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC)
这里我的GCC版本为9.3.1
,算是版本较高的GCC了,CentOS7默认带的GCC的版本为4.8
。
如果上面命令报错,说明没有GCC环境,现在就要进行安装:
yum -y install gcc-c++
执行以后,再执行gcc -v
,就可以看到自己安装的GCC版本了。
2.版本选择
先查看自己Redis的版本:
[baichen@VM-8-16-centos ~]$ redis-server -v
Redis server v=7.2.4 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=bdbd6e3b8277bd54
如果上面命令执行失败,说明你的环境中还没有安装Redis。
由于6.0.8
以下的版本都有安全问题,所以建议至少安装6.0.8
以上版本的Redis,强烈建议安装7
以上的版本,因为7以上的版本更新了很多的特性。
3.安装包下载
- 本地下载安装包
下载地址:Redis
一定要看清版本号再下载,选择自己要下的版本,本次选择7.2.4
这个版本。
注意:如果你是本地下载的安装包并且你的电脑不是Linux环境,要自行将安装包导入你的Linux虚拟机或者云服务器。
- wget远程获取安装包
使用以下命令直接在Linux中下载安装包:
[baichen@VM-8-16-centos third_party]$ wget https://download.redis.io/releases/redis-7.2.4.tar.gz
--2024-05-12 18:27:06-- https://download.redis.io/releases/redis-7.2.4.tar.gz
Resolving download.redis.io (download.redis.io)... 45.60.125.1
Connecting to download.redis.io (download.redis.io)|45.60.125.1|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3386861 (3.2M) [application/octet-stream]
Saving to: ‘redis-7.2.4.tar.gz’100%[========================================================================================================================================================================>] 3,386,861 6.44MB/s in 0.5s 2024-05-12 18:27:07 (6.44 MB/s) - ‘redis-7.2.4.tar.gz’ saved [3386861/3386861]
查看安装包:
4.解压安装包
解压安装包:
tar -zxvf redis-7.2.4.tar.gz
查看安装包:
5.在Redis目录下执行make
进入Redis目录:
执行以下指令:
make && make install
出现上面的提示就是安装完成了。
6.查看安装情况
执行redis-server -v
,命令可以验证是否安装成功。
进入Redis的默认安装路径/usr/local/bin
,查看Redis相关的几个文件:
[baichen@VM-8-16-centos third_party]$ cd /usr/local/bin
[baichen@VM-8-16-centos bin]$ ll
total 42628
-rwxr-xr-x 1 root root 9918216 Apr 9 22:31 redis-benchmark
lrwxrwxrwx 1 root root 12 Apr 9 22:31 redis-check-aof -> redis-server
lrwxrwxrwx 1 root root 12 Apr 9 22:31 redis-check-rdb -> redis-server
-rwxr-xr-x 1 root root 10714376 Apr 9 22:31 redis-cli
lrwxrwxrwx 1 root root 12 Apr 9 22:31 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 22008600 Apr 9 22:31 redis-server
- redis-benchmark:这是一个Redis性能测试工具,它模拟了N个客户端同时发送M个请求。你可以使用默认的测试集,也可以提供自定义的测试集。
- redis-check-aof:这是一个用于检查和修复Redis的AOF(Append Only File)文件的工具。如果日志以某种原因(如磁盘已满或其他原因)结束于半写入的命令,
redis-check-aof
工具能够轻松修复它。- redis-check-rdb:这是一个用于检查Redis的RDB(Redis Database)文件完整性的工具。
- redis-cli:这是Redis的命令行接口,它在交互模式下具有基本的行编辑功能,提供了一种熟悉的输入体验。你可以直接从命令行终端运行Redis命令,或者使用交互模式。
- redis-sentinel:Redis Sentinel为Redis提供了高可用性。Sentinel可以监控Redis主服务器和从服务器,进行自动故障转移,以及在主服务器不可用时通知应用程序。它还可以充当配置提供者,客户端可以连接到Sentinel以请求负责给定服务的当前Redis主服务器的地址。
- redis-server:这是Redis服务器的主要可执行文件,它用于启动Redis服务器实例。
7.redis.conf
再次回到redis-7.2.4
这个文件夹下:
找到redis.conf
这个文件,将其拷贝到自己的一个文件夹下,随便哪个文件夹都可以,将其命名为myredis7.conf
,不要直接修改原redis.conf
。
修改myredis.conf
中的几个配置:
- 默认daemonize no:改为 daemonize yes
- 默认protected-mode yes:改为 protected-mode no
- 默认bind 127.0.0.1:改为 直接注释掉(默认bind 127.0.0.1只能本机访问)或改成本机IP地址,否则影响远程IP连接
- 添加redis密码:改为 requirepass 你自己设置的密码
8.启动服务
执行以下命令,启动Redis服务:
redis-server ./myredis7.conf
查看启动情况:
[baichen@VM-8-16-centos myredis]$ ps -ef | grep redis | grep -v grep
baichen 9277 1 0 19:23 ? 00:00:00 redis-server *:6379
可以看到Redis的默认端口为6379
。
9.连接服务
执行以下命令,连接Redis:
redis-cli -h 127.0.0.1 -p 6379 -a 111111
# -h xxx.xxx.xxx.xxx 指定连接的Redis服务器IP
# -p xxxx —— 指定连接的Redis服务器端口
# -a xxxx —— 上面myredis7.conf中requirepass字段指定的密码
-h 127.0.0.1 -p 6379
是默认参数,可以省略。
查看连接情况:
[baichen@VM-8-16-centos myredis]$ redis-cli -a 111111
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> ping
PONG
也可以先不带密码,进入客户端后再验证身份登录,这样会更加安全一些:
[baichen@VM-8-16-centos myredis]$ redis-cli
127.0.0.1:6379> auth 111111
OK
127.0.0.1:6379> ping
PONG
10.hello world
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
如果上面的操作都没有出问题,说明你的Redis安装启动得很成功,可以开始进一步的Redis学习了。
11.Redis客户端退出
直接quit
即可:
127.0.0.1:6379> quit
12.Redis服务器关闭
直接shutdown
即可:
127.0.0.1:6379> shutdown
也可以在Bash中通过命令行关闭:
redis-cli -a 111111 shutdown
再执行ps
指令查看服务器进程:
[baichen@VM-8-16-centos myredis]$ ps -ef | grep redis | grep -v grep
[baichen@VM-8-16-centos myredis]$
可以发现服务器已经关闭了。
总结
在这篇博客中,我们深入探讨了Redis,一种强大的内存数据库。以下是我们所涵盖的主要内容:
一、认识Redis
在第一部分,我们介绍了Redis是什么以及它与其他内存数据库的区别。Redis作为一个内存数据库,其主要优势在于其快速的读写速度、丰富的数据结构支持以及灵活的持久化选项等。
为什么Redis可用作为MySQL的缓存? 我们进一步探讨了为什么Redis是一个理想的MySQL缓存解决方案。其主要优点包括高速的读写操作、灵活的数据结构以及与MySQL的良好集成性,这使得它成为提高性能和扩展性的理想选择。
Redis发展史 我们回顾了Redis的发展历程,从最初的开发到成为现今广受欢迎的数据库。
Redis7部分特性说明 我们提及了Redis的一些重要特性,这些特性使得Redis在实际应用中更加强大和灵活。
二、Redis安装配置
在第二部分,我们详细介绍了在Linux环境下安装和配置Redis的步骤:
- 确保系统具备GCC编译环境。
- 选择合适的版本。
- 下载安装包。
- 解压安装包。
- 运行make命令进行编译。
- 查看安装情况。
- 配置redis.conf文件。
- 启动Redis服务。
- 连接到Redis服务。
- 运行hello world示例。
- 退出Redis客户端。
- 关闭Redis服务器。
如果讲解有不对之处还请指正,我会尽快修改,多谢大家的包容。
如果大家喜欢这个系列,还请大家多多支持啦😋!
如果这篇文章有帮到你,还请给我一个大拇指
👍和小星星
⭐️支持一下白晨吧!喜欢白晨【Redis】系列的话,不如关注
👀白晨,以便看到最新更新哟!!!