【Redis】Redis入门概述

😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!💪💪💪

在这里插入图片描述

文章目录

  • 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

根据官网定义:

image-20240510194641034

Redis 是一个内存数据存储,被数百万开发人员用作缓存、向量数据库、文档数据库、流引擎和消息代理。Redis 具有内置复制和不同级别的磁盘持久性。它支持复杂的数据类型(例如,字符串、哈希、列表、集合、排序集和 JSON),并在这些数据类型上定义了原子操作。

首先,我们可以注意到Redis是一个内存数据库,也就是说,它的数据都是直接加载到内存中的,所以可以直接在内存中完成查询,相比于MySQL需要从磁盘中读取数据到内存,再从内存中查询,Redis的效率明显是高的多的(如果你学习过计算机组成原理,那么你应该了解,从磁盘中读取数据所花费的时间是远远大于从内存中读取数据的时间的)。

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

再者,Redis是一个key-value类型的数据库

Key-value类型的数据库是一种数据库模型,其中数据以键值对的形式存储和检索。每个键都是唯一的,并且与一个特定的值相关联。这种模型类似于字典或者哈希表的结构,在大多数情况下,可以通过键快速地检索到相应的值。

key-value结构示意图如下:

image-20240510193727202

Redis相比于其他内存数据库优势在哪里?

Redis 与其他 key - value 缓存产品有以下几个特点:

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • Redis 还支持事务、Lua 脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式,内存淘汰机制、过期删除机制等等。

总结一下,Redis相比于其他内存数据库有以下几个优势:

  1. 持久化Memcached也是基于内存的数据库,但是由于Memcached没有持久化功能,所以在机器突然宕机以后,数据会直接丢失,而Redis就可以将数据落盘持久化。
  2. 多样化数据结构支持
  3. 操作原子性:这里先提一句,这是由于Redis是单进程的,所以不会导致竞争,也就不会出现多进程/多线程下的并发问题。
  4. 多种集群方案:这个也是Redis高可用和高并发的保证,未来会展开讲。
  5. 其他高级功能:事务、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的主要发展历史:

  1. 2009年5月 - Redis首次正式发布了0.8版本。
  2. 2010年 - Redis的第一个生产版本1.0发布,并被越来越多的互联网公司采用。
  3. 2011年 - Redis 2.0版本发布,支持虚拟内存,大大扩展了Redis的应用空间。
  4. 2012年 - Redis 2.6发布,新增很多新特性如Lua脚本支持。
  5. 2013年 - Redis 2.8发布,性能进一步优化,支持更大的集群模式。
  6. 2015年 - Redis 3.0发布,支持集群模式并提升写性能。Redis开始被更多大型互联网公司广泛使用。
  7. 2016年 - Redis 4.0发布,包括多种新数据结构和功能,如Streams等。
  8. 2020年 - Redis 6.0发布,支持多线程,I/O性能大幅提升。
  9. 2022年 - Redis 7.0发布,支持在线缩放容量,新增多模块等特性。

为什么要说Redis的发展史呢?因为Redis并不是一出生就是非常优秀的数据库,而是还在逐步发展的,有一些现在使用的很多的特性都是Redis后期才支持的,并且由于Redis7这个重量级版本又发布和修改了许多特性,导致面试时可能会出现多个版本实现不一样的问题,所以一定要对一些重要的特性在不同版本中的实现有深刻的认识。

本次,我将主要使用Redis7.2这个版本进行演示,在讲解某些特性时,也会对比Redis6这个版本进行讲解。

Redis7部分特性说明

  1. 在线数据集缩放(Online Data Set Resize)

    这是Redis 7.0最大的亮点之一。它允许在运行时动态调整Redis实例使用的内存空间大小,无需重启或导入导出数据。这极大提高了可用性和运维便利性。

  2. 新的I/O引擎

    Redis 7.0引入了全新的I/O引擎,使用多线程和网络批处理来提高网络I/O性能。

  3. 模块支持自动加载

    Redis模块现在可以在启动时自动加载,无需手动指定。

  4. 新的RediSearch模块2.x版本

    RediSearch是Redis的二级索引模块,2.x版本带来了更好的索引压缩、并行查询等能力。

  5. 分片集群支持在线数据迁移

    原生分片集群可在线进行数据迁移,提高可用性。

  6. 数据持久化引擎Redis-DL

    新的数据持久化引擎Redis-DL使用延迟日志功能,可显著降低Fork操作的时间开销。

  7. ACL命令行管理工具(redis-cli)

    更好的ACL命令行管理支持,包括用户账号管理等。

  8. 客户端抽象化层和新的Resp3协议

    为未来Redis协议升级做准备的架构改造。

  9. listpack

    listpack 是用来替代 ziplist 的新数据结构,在 7.0 版本已经没有 ziplist 的配置了(6.0版本仅部分数据类型作为过渡阶段在使用)。

  10. 多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

image-20240512182305962

一定要看清版本号再下载,选择自己要下的版本,本次选择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]

查看安装包:

image-20240512182803293

4.解压安装包

解压安装包:

tar -zxvf redis-7.2.4.tar.gz

查看安装包:

image-20240512183136865

5.在Redis目录下执行make

进入Redis目录:

image-20240512183435691

执行以下指令:

make && make install

image-20240512183752917

出现上面的提示就是安装完成了。

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这个文件夹下:

image-20240512184629345

找到redis.conf这个文件,将其拷贝到自己的一个文件夹下,随便哪个文件夹都可以,将其命名为myredis7.conf,不要直接修改原redis.conf

修改myredis.conf中的几个配置:

  1. 默认daemonize no:改为 daemonize yes

image-20240512191450889

  1. 默认protected-mode yes:改为 protected-mode no

image-20240512191603613

  1. 默认bind 127.0.0.1:改为 直接注释掉(默认bind 127.0.0.1只能本机访问)或改成本机IP地址,否则影响远程IP连接

image-20240512191800198

  1. 添加redis密码:改为 requirepass 你自己设置的密码

image-20240512191904124

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的步骤:

  1. 确保系统具备GCC编译环境。
  2. 选择合适的版本。
  3. 下载安装包。
  4. 解压安装包。
  5. 运行make命令进行编译。
  6. 查看安装情况。
  7. 配置redis.conf文件。
  8. 启动Redis服务。
  9. 连接到Redis服务。
  10. 运行hello world示例。
  11. 退出Redis客户端。
  12. 关闭Redis服务器。

如果讲解有不对之处还请指正,我会尽快修改,多谢大家的包容。

如果大家喜欢这个系列,还请大家多多支持啦😋!

如果这篇文章有帮到你,还请给我一个大拇指 👍和小星星 ⭐️支持一下白晨吧!喜欢白晨【Redis】系列的话,不如关注👀白晨,以便看到最新更新哟!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/697383.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 第三十章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

基于LeNet5实现手写数字识别,可视化卷积层。

LeNet5 CNN卷积网络的发展史 1. LetNet5(1998) 2. AlexNet(2012) 3. ZFNet(2013) 4. VGGNet(2014) 5. GoogLeNet(2014) 6. ResNet(2015) 7. DenseNet(2017) 8. EfficientNet(2019) 9. Vision Transformers(2020) 10. 自适应卷积网络(2021) 上面列出了发展到现在CNN的一些经典…

【超详细】跑通YOLOv8之深度学习环境配置3-YOLOv8安装

环境配置3下载安装内容如下: 1、配置清华等镜像源 2、创建环境 3、下载安装Pytorch 4、下载安装YOLOv8运行环境 版本:Python3.8(要求>3.8),torch1.12.0cu113(要求>1.8) 1、配置清华等镜…

光数据传送器|光通讯传感器极速版OPT系列尺寸与安装步骤

光数据传送器|光通讯传感器极速版OPT系列是利用可见光及不可见光作为信息载体,无需光纤、网线等有线介质,在空中直接进行信息传输的无线方式通信。驱动光源以可见光及不可见光的高速明暗变化来传输数字信号,以极高光频率双向发射接收光信号&a…

Java Web开篇

Java Web开篇 大纲 整个内容梳理 具体案例 整个内容梳理 这是前端和后端组成的系统的框架结构

C#语言进阶

一、简单数据结构类 1. ArrayList ArrayList是一个 C# 为我们封装好的类,它的本质是一个 object 类型的数组。ArrayList类帮助我们实现了很多方法,比如数组的增删查改 1.1 声明 using System.Collections;ArrayList array new ArrayList(); 1.2 增…

任务通知理论和使用

文章目录 一、任务通知是什么?1.1任务通知的优势1.2任务通知的限制1.3通知状态和通知值 二、任务通知的使用2.1任务通知使用_轻量级信号量2.2任务通知使用_轻量级队列2.3任务通知使用_轻量级事件组 一、任务通知是什么? 我们使用队列、信号量、事件组等…

AI如何改变PPT制作流程?推荐四款ai生成ppt工具

提起PPT,大家的第一反应就是痛苦。经常接触PPT的学生党和打工人,光看到这3个字母,就已经开始头痛了: 1、PPT内容框架与文案挑战重重,任务艰巨,耗费大量精力。 2、PPT的排版技能要求高,并非易事…

centos7中如何全局搜索一下nginx的配置文件?

在CentOS 7中搜索Nginx的配置文件,你可以使用一些常用的命令行工具,比如find、grep等。这些工具可以帮助你在文件系统中查找文件,也可以用来查找Docker容器内部的文件,只要你知道如何访问容器的文件系统。 1. 搜索系统中的Nginx配…

深度剖析深度神经网络(DNN):原理、实现与应用

目录 引言 一、DNN基本原理 二、DNN核心算法原理 三、DNN具体操作步骤 四、代码演示 引言 在人工智能和机器学习的浪潮中,深度神经网络(Deep Neural Network,简称DNN)已经成为了一种非常重要的工具。DNN模仿人脑神经网络的结…

C语言leetcode刷题笔记3

C语言leetcode刷题笔记3 第8题:876.链表的中间结点遍历数节点个数快慢指针 第9题:874.比较含退格的字符串第10题:155.最小栈法1:getMin内部实现查找法2:getmin直接返回值补充:栈的使用例子优化:…

Leetcode2079. 给植物浇水

Every day a Leetcode 题目来源:2079. 给植物浇水 解法1:模拟 sum 记录总步数,初始化为 0。water 表示当前水量,初始化为 capacity。 遍历 plants 数组,设下标为 i 的植物需要的水量 plant plants[i]。 如果 wat…