Redis 实战:逐步指南,让你轻松在 Linux 上安装与部署

news2025/1/16 21:11:56

在这里插入图片描述
目录

  • 前言
  • 为什么会出现 Redis?
    • 磁盘、内存
    • 数据库
    • 缓存中间件
  • 安装
    • Redis5
    • Redis6
  • 使用
  • 总结

前言

Redis 中文网站:http://redis.cn/

Redis 是一个开源(BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件

它支持多种类型的数据结构,如字符串(strings)散列(hashes)列表(lists),集合(sets),有序集合(sorted sets)与范围查询,位图(bitmaps),基数计算算法(hyperloglogs) 地理空间(geospatial) 索引半径查询

Redis 内置了 复制(replication),LUA脚本(Lua scripting),LRU 驱动事件(LRU eviction),事务(transactions)和不同级别的磁盘持久化(persistence),并通过 Redis 哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)

为什么会出现 Redis?

磁盘、内存

磁盘在寻址上花费的时长是毫秒 ms 级别的,带宽是 G/M 级别

内存在寻址上花费的时长是纳秒 ns 级别的,带宽比较大,按 T 级别来算的

基于以上,内存在寻址上比磁盘快了 10W 倍

I/O buffer

成本问题:
1、磁盘、磁道、扇区,一个扇区:512 字节带来成本很大问题
2、操作系统索引以 4K 为单位,无论你读取多少数据,都至少是 4K 为单位从磁盘中拿

数据库

表数据量很大,会导致性能极速下降

若表中有索引,增删改很慢,查询速度缓慢会有以下两个维度影响
1、1 个或少量的查询语句依然很快,查询的数据量较少或频次很低
2、当查询的并发量大时会受到磁盘带宽影响,从而就会影响到查询的速度

数据库对比
官网:https://db-engines.com/en/ranking,可以在该网站上看看每年各个数据库之间的排名以及使用频率情况

在这里插入图片描述

基于企业级开发,经常会使用 MySQL 关系型数据库,它是基于磁盘的,若并发量或数据量上来时,它会极其影响 DML 语句操作速度;在这种情况发展到极端只有使用 SAP HANA 内存级别的关系型数据库才能扛住,原本在磁盘 2T 数据量而它的内存数据库中会被优化后压缩成 1T 多数据量进行处理,但这种内存级别数据库并不是一般的公司能用得起,一般公司都是想成本越低越好

基于此,也就有了一个折中的方案,数据持久化在库中,数据的可视化交由给缓存处理,最开始出现的缓存中间件 > Memcached

缓存中间件

一般都会用 Memcached、Redis 这两种缓存中间件来进行比较,它们都是基于 Key-Value 键值对方式存储的

MongoDB 就与它们区分开了,它是基于 Document 存储的,它主要用来作文章内容、文本存储的

Memcached、Redis

  1. Memcached Value 没有类型的概念,而 Redis Value 有多种数据类型,string(内置:bitmap、字符类型、数值类型)、hashes、lists、sets、sorted sets
  2. Memcached 不支持持久化,而 Redis 支持多种持久化方式,AOF、RDB、两者混合模式
  3. Memcached Value 支持 1MB 大小,而 Redis 支持 1GB 大小

安装

在上面简单介绍了 Redis 是什么,以及 Redis 由来,从不同层面上介绍 Redis 的好处,即使说 Redis 已经这么好用了,但它内部还不断在优化,比如:Redis6 在 Redis5 基础上引入了多线程模型,我们先来说说它在这方面优化后会带来哪些好处?

  1. 并发处理能力:Redis6 多线程模型在处理 I/O 操作时可以利用多个线程,提高了并发处理的能力;而 Redis 单线程模型下,在处理客户端请求时只使用了单线程,因此在并发处理能力上相对较低

Redis 多线程模型只涉及到 I/O 操作的处理,核心的数据处理仍然是单线程的

  1. 多核利用:Redis6 多线程模型下能更好地利用多核处理器性能;通过使用多个线程,可以同时处理多个客户端请求,提高系统的整体吞吐量;而 Redis 单线程模型下只能使用单个核心,无法充分利用多核处理器的优势
  2. 响应时间:由于 Redis6 多线程模型能够并发处理多个请求,因此在高并发的负载之下,它能够提供更低的响应时间;而 Redis 单线程模型下在高并发情况下可能会出现较高的响应时间,因为所有的客户端请求都必须在单个线程上依此之下

简单介绍过后,我们在本文中会同时告知如何在 Linux 机器上安装 Redis5、Redis6,因为在安装时,两者会出现不同的问题

提前准备一台本地虚拟机或云服务器,安装包所在目录:/home/software
虚拟机版本(cat /etc/redhat-release):CentOS Linux release 7.9.2009 (AltArch)

Redis 安装包下载地址
redis-5.0.8.tar.gz、redis-6.0.6.tar.gz

Redis5

安装 wget 命令 > yum install wget

1、下载 5.0.8 安装包:wget http://download.redis.io/releases/redis-5.0.8.tar.gz

2、解压安装包:tar xf redis-5.0.8.tar.gz(v 参数会触发 IO,故不写)

3、可仔细阅读 redis-5.0.8 目录下 > README.md 文件

在这里插入图片描述

4、编译安装>生成可执行程序:cd redis-5.0.8 && make install && cd src

1、安装时会提示编译失败:缺少 gcc 依赖,C 语言环境(GUN C 是 Linux 中规定的 C 语言标准)
yum-config-manager --save --setopt=mysql57-community.skip_if_unavailable=true
yum install gcc
2、然后再执行:make distclean 后再 make install && cd src
3、编译的最后会出现:cannot find -latomic 错误因为我使用 Mac M1 系统 > aarch64 架构,它会在 Makefile 文件中去校验,故编辑该文件,将这部分内容注释掉,若你非该架构,可无须关注这步操作
4、然后再执行:make distclean 后再 make install && cd src ,最终,安装成功了,生成了可执行的程序

在这里插入图片描述

在这里插入图片描述

make install 只会在你的系统中安装二进制文件,但不会配置 init 脚本和配置文件放在适当的位置上
1、一个物理机器中可以有多个 Redis 实例(进程)通过 port 区分
2、可执行程序只存在一份,但内存中未来的多个实例中需要各自的配置文件,持久化目录等
3、脚本会帮你启动、开机自启动!!

5、编译安装到指定位置:make PREFIX=/usr/local/redis5 install,将 redis-cli 更名为 redis5-cli,主要是为了作版本区分

在这里插入图片描述

6、配置系统变量:vim /etc/profile

REDIS5_HOME=/usr/local/redis5
PATH=$PATH:$REDIS5_HOME/bin

7、安装 Redis5,cd /home/software/redis-5.0.8/utils 后执行 ./install_server.sh,它会一步步提示你如何设置端口、配置文件、日志文件、数据文件

在这里插入图片描述
8、最后,查看 Redis5 当前占用进程

ps -ef | grep redis5

Redis6

安装 wget 命令 > yum install wget

1、下载 6.0.6 安装包:wget http://download.redis.io/releases/redis-6.0.6.tar.gz

2、解压安装包:tar xf redis-6.0.6.tar.gz(v 参数会触发 IO,故不写)

3、可仔细阅读 redis-6.0.6 目录下 > README.md 文件

4、编译安装>生成可执行程序:cd redis-6.0.6 && make install && cd src

5、编译安装到指定位置:make PREFIX=/usr/local/redis6 install,将 redis-cli 更名为 redis6-cli,主要是为了作版本区分

6、配置系统变量:vim /etc/profile

REDIS6_HOME=/usr/local/redis6
PATH=$PATH:$REDIS6_HOME/bin

7、安装 Redis6,cd /home/software/redis-6.0.6/utils 后执行 ./install_server.sh,在 Redis6 会报如下错误:This systems seems to use systemd. Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!

编辑 vi install_server.sh 文件,将如下内容进行注释后保存,再执行脚本:

在这里插入图片描述

它会一步步提示你如何设置端口、配置文件、日志文件、数据文件,以 Redis5 port:56379 为例,那么 Redis6 port 自然而然会设置为 66369 了,错误❌:端口数量是有限制的,最多 65535 个,如下报错所示:

在这里插入图片描述

因此,将 Redis6 端口设置为 60379,最终:Redis6 安装成功!!!

在这里插入图片描述

8、最后,查看 Redis6 当前占用进程

ps -ef | grep redis6

使用

到此为止,Redis5、Redis6 都已经在 Linux 上安装成功了!!!

查看 redis5-cli、redis6-cli 帮助文档:

redis5-cli --help

在这里插入图片描述

redis6-cli --help

在这里插入图片描述

下面来介绍一下常用的 Redis 客户端操作命令吧!

  1. 连接主机名:redis5-cli -h、redis6-cli -h(未指定时,默认为 127.0.0.1)
  2. 连接端口:redis5-cli -p 56379、redis6-cli -p 60379(未指定时,默认为 6379)
  3. 连接时认证密码登录或登录后通过 auth 命令:redis5-cli -a(连接密码,默认不会指定)
  4. 连接指定库:在 Redis 分为 16 个库,0~15 > redis5-cli -n、redis6-cli -n

若你不知道进入到 Redis 客户端以后,该如何操作 get、set 命令,又或者是不知道 Redis 中提供的多种数据类型如何应用,请看如下:

  1. 连接:redis6-cli -p 60379 以后,输入 help 命令,打印如下:

127.0.0.1:60379> help
redis-cli 6.0.6
To get help about Redis commands type:
“help @<group>” to get a list of commands in <group>
“help <command>” for help on <command>
“help <tab>” to get a list of possible help topics
“quit” to exit

  1. help @group:指的就是以数据类型分组的意思,当你 help @string 它就把 string 数据类型相关的操作命令以及描述给你展示出来
127.0.0.1:60379> help @string

  APPEND key value
  summary: Append a value to a key
  since: 2.0.0

  BITCOUNT key [start end]
  summary: Count set bits in a string
  since: 2.6.0

  BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
  summary: Perform arbitrary bitfield integer operations on strings
  since: 3.2.0

  BITOP operation destkey key [key ...]
  summary: Perform bitwise operations between strings
  since: 2.6.0

  BITPOS key bit [start] [end]
  summary: Find first bit set or clear in a string
  since: 2.8.7

  DECR key
  summary: Decrement the integer value of a key by one
  since: 1.0.0
# ....... 更多内容
  1. help `command:指的就是具体的某一个具体的命令是要如何操作的,比如说怎么设置位图 > setbit
127.0.0.1:60379> help setbit 

  SETBIT key offset value
  summary: Sets or clears the bit at offset in the string value stored at key
  since: 2.2.0
  group: string

这下有了帮助文档,你该知道如何去巧妙应用好 Redis 了吧!!!

Redis 数据类型以 group 分组存在,每种数据结构下的不同操作都是一条 command 命令

总结

该篇博文是 Redis 专栏的开篇,不作过多的实践以及应用场景的描述,主要是介绍了 Redis 前生今世,为什么要出现 Redis?Redis6 比 Redis5 扩充了多线程模型好处在哪里,在生产环境中我们如何自己去安装 Redis5、Redis6;最后,简单介绍了一些连接 Redis 客户端时使用的命令以及在操作 Redis 客户端命令时如何使用帮助文档让我们快速掌握 Redis 命令操作!

有小伙伴可能会说到为什么不使用容器化部署的方式来构建 Redis,当然,使用容器化部署方便了我们不需要太多去专注这方面的知识;但是 Redis 单独使用服务器部署,它的好处就是降低了其他微服务对其使用及性能的影响,而且单独使用服务部署更方便我们可以掌握 Redis 内存以及其他持久化配置相关的东西,也不会因为 Redis 内存限制的大小影响到其他微服务的运行✅
内存不作任何设置时,它会动态的去进行扩容或压缩,这对我们的 Redis 服务极其不可靠
实属个人见解,有不同见地的小伙伴,可以在底下留言,大家一起讨论,互相进步哈!!

后续 Redis 专栏,会有更多理论+实战+图文的博文出来,敬请期待!!!

如果觉得博文不错,关注我 vnjohn,后续会有更多实战、源码、架构干货分享!

推荐专栏:Spring、MySQL,订阅一波不再迷路

大家的「关注❤️ + 点赞👍 + 收藏⭐」就是我创作的最大动力!谢谢大家的支持,我们下文见!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【编译、链接、装载十二】动态链接2

【编译、链接、装载十二】动态链接2 四、延迟绑定&#xff08;PLT&#xff09;五、动态链接相关结构1 “.interp”段2 “.dynamic”段3 .动态符号表——dynsym、动态符号字符串表——.dynstr4、动态链接重定位表 六、动态链接的步骤和实现1、动态链接器自举2、装载共享对象3、重…

2.10 高性能异步IO机制:io_uring

一、io_uring的引入 为了方便说明io_uring的作用&#xff0c;先举一个通俗点的例子 1、通过异步提高读写的效率 假设有一批数量很大的货&#xff0c;需要分批次运到厂里处理。这个时候就有两种方式&#xff1a; 1&#xff09;同步方式&#xff1a;运送一批到厂里&#xff0c…

TypeScript ~ TS 掌握编译文件配置项 ④

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

初识EasyX图形库

EasyX图形库 1. EasyX是什么&#xff1f;2. 入手EasyX3. EasyX函数介绍创建和关闭绘图窗口操作initgraphclosegraph 设置绘图背景setbkcolorcleardevice 画图形circlefillcirclerectanglefillrectangle 图形颜色及样式设置setfillcolorsetlinecolorsetbkcolorsetbkmodesetlines…

计算物理专题:有限差分法解决本征值问题

计算物理专题&#xff1a;有限差分法解决本征值问题 定态薛定谔方程差分形式 一维定态薛定谔方程 谐振子 解法代码 import numpy as np def householder(symmetric_matrix):M symmetric_matrixassert np.allclose(M,M.T),"matrix is not symmetric"N len(M)for …

chatgpt赋能python:用Python分析电影评分数据

用Python分析电影评分数据 Python是一种流行的数据分析和可视化工具&#xff0c;它可以让我们更深入地了解电影的评分数据。在本文中&#xff0c;我们将使用Python来分析一些电影评分数据&#xff0c;并试图找出一些有趣的模式和趋势。 数据来源 我们将使用公共数据集IMDb电…

第4章 网络层

1‌、下列关于路由算法描述错误的是&#xff08; &#xff09; A. 链路状态算法是一种全局路由算法&#xff0c;每个路由器需要维护全局状态信息B. OSPF 是一种域内路由协议&#xff0c;核心是基于 Dijkstra 最低费用路径算法C. RIP 是一种域内路由算法&#xff0c;核心是基…

采用SqlSugar的DBFirst相关功能创建数据库表对应的实体类

.NET Core官方教程中推荐使用的EF Core数据库ORM框架虽然能用&#xff0c;但是用起来并不是太方便&#xff08;或者是不习惯&#xff0c;之前用的最多的还是linq&#xff09;。之前下载的开源博客项目中使用的SqlSugar&#xff0c;后者是由果糖大数据科技团队维护和更新 &#…

基于WebAssembly构建Web端音视频通话引擎

Web技术在发展&#xff0c;音视频通话需求在演进&#xff0c;怎么去实现新的Web技术点在实际应用中的值&#xff0c;以及给我们带来更大的收益是需要我们去探索和实践的。LiveVideoStackCon 2022北京站邀请到田建华为我们从实践中来介绍WebAssembly、WebCodecs、WebTransport等…

【裸机开发】IRQ 中断服务函数(一) —— 汇编初始化

IRQ 和前面的Reset 函数不大一样&#xff0c;当一个IRQ中断产生时&#xff0c;我们也不知道这个IRQ中断来自哪个外设&#xff0c;因此&#xff0c;需要先获取到中断ID&#xff0c;随后才会跳转到真正的中断服务函数执行处理逻辑。 整个 IRQ 中断处理可以看做是包含了两个部分&…

MySQL 自增主键一定是连续的吗?

众所周知&#xff0c;自增主键可以让聚集索引尽量地保持递增顺序插入&#xff0c;避免了随机查询&#xff0c;从而提高了查询效率 但实际上&#xff0c;MySQL 的自增主键并不能保证一定是连续递增的。 下面举个例子来看下&#xff0c;如下所示创建一张表&#xff1a; 自增值保…

ORCA优化器浅析——GP数据库调用优化器流程

首先我们需要看CGPOptimizer类(src/include/gpopt/CGPOptimizer.h)为Greenplum数据库提供ORCA优化器export出来的函数的封装。Greenplum数据库主流程调用extern "C"中提供的函数&#xff0c;比如初始化ORCA优化器的函数InitGPOPT&#xff0c;优化查询树的函数GPOPTOp…

springboot+jsp农产品商城宣传网站设计与实现oo6e3

在该在线助农系统设计与实现中&#xff0c;idea能给用户提供更多的方便&#xff0c;其特点一是方便学习&#xff0c;方便快捷&#xff1b;二是有非常大的信息储存量&#xff0c;主要功能是用在对数据库中查询和编程。其功能有比较灵活的数据应用&#xff0c;只需利用小部分代码…

【Leetcode60天带刷】day30回溯算法——332.重新安排行程 , 51. N皇后 ,37. 解数独

​ 题目&#xff1a; 332. 重新安排行程 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;…

【从零开始学习JAVA | 第十四篇】继承

目录 前言&#xff1a; 引入&#xff1a; 继承&#xff1a; 小拓展&#xff1a; 优点&#xff1a; 成员方法的继承问题&#xff1a; 总结&#xff1a; 前言&#xff1a; 继承是面向对象三大特性之一&#xff0c;它是在封装之后我们讲解的一个重要的性质&#xff0c;继承…

在github上创建个人主页的方法【2023更新版】

01-进入github的网站&#xff0c;链接 https://github.com/ &#xff0c;然后注册&#xff0c;登陆&#xff0c;注意登陆时设置的用户名(username)就是将来你个人主页的三级域名&#xff0c;所以这里一定要慎重填写username。如下图所示&#xff1a; 02-注册完成后进入个人主…

2024考研408-计算机组成原理第四章-指令系统

文章目录 前言一、指令系统现代计算机的结构1.1、指令格式1.1.1、指令的定义1.1.2、指令格式1.1.3、指令—按照地址码数量分类①零地址指令②一地址指令&#xff08;1个操作数、2个操作数情况&#xff09;③二地址指令④三地址指令⑤四地址指令 1.1.4、指令-按照指令长度分类1.…

【计算机组成原理】Yy-z02模型机的硬布线控制器设计

目录 一、Yy-z02模型机的系统结构 二、Yy-z02模型机的数据通路 三、Yy-z02模型机的指令执行 四、Yy-z02模型机的硬布线控制器 一、Yy-z02模型机的系统结构 指令系统的实现 <--- 构造它的硬件系统 硬件系统构造过程&#xff1a; 分析指令格式和各指令的功能确定部件连…

金蝶软件遭遇.locked勒索病毒攻击:如何保护与解救您的数据?

引言&#xff1a; 近期&#xff0c;部分运行金蝶云星空软件的服务器遭受了一场勒索病毒的网络安全攻击&#xff0c;其重要数据遭到了.locked勒索病毒的加密。作为一个知名的企业级ERP软件及财务软件&#xff0c;金蝶软件的数据安全事关客户和企业的利益。91数据恢复在本文将深…

【王道·操作系统】第四章 文件管理【未完】

一、初识文件管理 文件&#xff1a;一组有意义的信息/数据集合文件属性&#xff1a; 文件名&#xff1a;创建文件的用户决定&#xff0c;主要是为了方便用户找到文件&#xff0c;同一目录下不允许有重名文件标识符&#xff1a;一个系统内的各文件标识符唯一&#xff0c;对用户来…