什么是Redis?使用场景有哪些? Redis7.0安装指南
2022年1月31日起,官方已经发布了文件Redis7.0-rc1
,目前已经发布到7.0.5版本。许多开发人员仍然只知道Redis 5.x或6.x版本,还不了解Redis 7.0。本系列教程将帮助您全面学习Redis7.0相关的知识点。环境搭建、10种主要数据类型、事件、发布排序、主从复制、哨兵、集群等信息。本教程最大的特点是不仅总结了枯燥的理论知识,而是理论知识+基础知识时间+情景面试问题分析。还分享了一些Redis相关的技术栈等内容
。
今天给大家分享一下Redis的基本知识,适合在哪些场景下使用,以及如何快速搭建Redis环境。什么是Redis? Redis 提供字符串、哈希、列表、数组、带范围查询的排序数组、位图、超级日志、地理空间索引和流等数据结构。 Redis 具有内置复制、Lua 脚本、LRU 驱逐、事件和各种级别的磁盘持久性,并通过 Redis Sentinel 和 Redis 集群的自动分区提供高可用性。
为什么会出现Redis这样的内存数据库?这要从 Redis 的作者 antirezs 说起。
2008年,一位来自意大利西西里岛的年轻人,名叫antirez,创建了游客信息网站LLOOGG.COM。有时我们需要了解网站的访问权限,例如访问者的IP地址、操作系统、浏览器、使用的搜索词、地区、访问的网站地址等。国内有很多网站提供此功能,例如CNZZ 、国外的百度统计和谷歌的Google Analytics。我们不需要自己编写任何代码来实现这个功能。我们需要做的就是在全局页脚中嵌入一些 JS 代码。当页面打开时,访问者的信息会自动发送到这些网站统计服务器,之后我们登录到后台系统。您可以查看信息。
LLOOGG.COM 提供此功能,因为它最多可以查看 10,000 条最近的浏览记录。这种情况下,需要为每个网站创建一个列表,不同网站的访问记录记入不同的列表中。如果列表长度超过用户定义的长度,则必须删除最旧的记录(先进先出)。
随着LLOOGG.COM用户数量的增加,其维护的列表数量也随之增加,保存的新请求和删除的最旧请求的数量也会增加。 LLOOGG.COM最初使用的数据库是MySQL。正如您可以想象的那样,每次条目和删除都需要对磁盘进行读写。因为数据量和并发量太大,这种情况下无论怎么优化数据库都会很困难。它不再起作用了。
鉴于限制数据库性能的最后一个瓶颈是磁盘,antirez 将放弃磁盘并实现原型列表结构。将数据放在内存而不是磁盘中可以极大地改进列表推和拉。流行效率。 antirez意识到这个想法实际上可以解决这个问题,因此他用C重写了内存数据库并添加了持久化功能。 2009年,Redis诞生了。从最初仅支持列表的数据库,到现在支持多种数据类型并提供一系列高级功能,Redis 已经成为在全球范围内广泛使用的开源项目。
Redis的全称是远程词典服务器
。其默认服务端口为6379
。有一种说法是为Redis选择端口号6379。 6379是电话按键上MERZ号码对应的号码,MERZ取自意大利歌手Alessia Merz的名字。阿莱西娅·梅尔茨 (Alessia Merz) 是一位意大利舞者和演员。 Redis 作者 Antirez(意大利人)早年看过电视节目,发现节目中 Merz 的一些话既愚蠢又可笑。 Antirez 想要制作“模因”用于与朋友的日常交流,因此他想出了“MERZ”这个词来形容愚蠢。 “愚蠢”的意思是一样的。后来,Antirez重新定义了“MERZ”,将其描述为“技术上的高价值,包括技巧、耐心和工作,但仍保持简单的本质”。当需要选择一个数字作为 Redis 的默认端口号时,Antirez 没有多想,就使用了数字 6379,它对应于手机键盘上的“MERZ”数字。
如果你想关注更多Redis相关内容,你不仅可以使用官网地址,还可以使用Redis作者的博客和GitHub地址。
1。官方地址:https://redis.io/
2。 GitHub地址:https://github.com/antirez
3。博客地址:http://antirez.com/latest/0
Redis使用场景
Redis基于内存操作,具有高可用性和高性能。它还提供多种数据类型。一般来说,可以在以下几种情况下使用:
1。数据缓存。项目初期,数据通常存储在MySQL、Oracle等关系型数据库中,所有数据读写都是基于磁盘操作。随着业务的扩展,系统通过传统的数据读取方式遇到读写瓶颈。针对这种情况,将数据存储在内存中,所有的读操作都通过内存进行查询,提高了系统的数据检索能力。对于高并发业务场景下的数据读取,也可以先将数据写入内存,然后异步持久化到磁盘,提高系统的并发能力。
2。保存用户登录信息。用户登录认证通常可以基于cookie和jwt来实现。 Cookie是基于文件存储的,Cookie涉及到跨域和分布式架构问题。由于jwt是基于客户端存储的解决方案,服务器无法直接控制登录的状态。由于Redis具有分布式部署架构,因此可以很好地解决分布式架构的token认证、用户登录方式等问题。同时,登录信息存储在Redis中,每次读取都是从内存中进行,这也提高了整个系统的性能。
3。闪购场景。在闪购场景下,系统的并发能力非常高。在这种场景下,将产品数据存储在Redis中可以提高系统的查询能力,同时减轻MySQL的压力。将所有产品库存存储在 Redis 中。由于Redis采用单线程架构,因此也可以解决产品超卖的问题。
4。用户登录。您可以使用bitmap
数据类型存储用户登录到Redis,然后通过异步线程将数据保存到MySQL。它不仅节省内存,还提供系统读写能力。
5。消息队列。 Redis 提供 list
数据类型。该技能用在消息队列中,也可以用在堆栈等场景中。从Redis 5.0开始,还包含了流数据类型,提高了消息队列的可靠性。
6。社交场景。Redis提供了两种集合数据类型(集合排序),可以用于点单、好友推荐等场景。
7。附近推荐。 Redis 提供了用于位操作的数据类型 GEO
。可以根据用户当前的经纬度计算附近的酒店、商场等场所的搜索和推荐功能。
8。共享锁。在分布式架构中,需要对共享数据(例如产品闪购)进行读写操作。为了保证数据的一致性,通常会采用分布式锁。 Redis可以非常简单地实现分布式锁定操作。您可以直接使用setnx键值
+expiretime
函数。要实现原子操作,也可以直接使用lua
。
Redis 有哪些优势
作为内存数据库,Redis 拥有非常好的读写性能。这是 Redis 和 memcached 之间的比较。
1。螺纹图案。 Memcached实现多线程模式,而Redis实现单线程模式。虽然Redis 6.0版本及更高版本支持多线程,但这里的多线程仅用于处理网络IO。实际的数据操作仍然是单线程模式。 。单线程执行(减少上下文切换、锁争用等问题)。
2。韧性。对于内存数据库,所有数据都存储在内存中。当服务出现异常时,服务宕机导致数据丢失。 Redis支持将数据保存到磁盘。当服务故障重新启动时,数据会从磁盘重新加载到内存。 Redis 支持两种持久数据存储方法。一种是快照模式(RDB),另一种是日志模式(ROF)。
3。分散式架构。 Redis支持主从复制、哨兵、集群等高可用、高可靠的架构。它还具有较低的学习成本。
4。数据类型。 Redis 有五种基本数据类型以及其他几种数据类型; Memcached 只有简单的字符串类型。
环境搭建
以上已经对Redis的理解有了一个大概的介绍。接下来我们正式进入第一阶段的学习,搭建Redis环境。如果不想创建环境,也可以使用官方提供的Web界面cli工具,但有一定的局限性。
Redis支持Linux、Mac和Windows环境,但官网不建议在Windows上使用Redis,因此无法充分发挥Redis的优势。在本教程中,所有功能都是针对Mac环境构建的。 Linux环境和Mac环境几乎是一样的,我们并不太关注两者的区别。
Mac 操作系统具有 brew
软件包管理工具,Linux 具有 yum
或 。由于这种方法非常简单,下面分别介绍源码的编译和安装。
通过Redis官方GitHub地址下载Redis7.0.0版本。软件通常有奇数版本和偶数版本。在选择版本时,我们也更喜欢偶数版本,因为偶数版本比奇数版本更稳定。
// 下载 cd ~ && wget https://github.com/redis/redis/archive/7.0.0.tar.gz // 解压 tar -zxvf 7.0.0.tar.gz
解压后,我们可以查看源码中大概有哪些文件。
[root@VM-16-3-centos redis-7.0.0]# ll 总用量 252 -rw-rw-r-- 1 root root 27744 4月 27 2022 00-RELEASENOTES -rw-rw-r-- 1 root root 51 4月 27 2022 BUGS -rw-rw-r-- 1 root root 5026 4月 27 2022 CONDUCT -rw-rw-r-- 1 root root 2634 4月 27 2022 CONTRIBUTING -rw-rw-r-- 1 root root 1487 4月 27 2022 COPYING drwxrwxr-x 7 root root 4096 4月 27 2022 deps -rw-rw-r-- 1 root root 11 4月 27 2022 INSTALL -rw-rw-r-- 1 root root 151 4月 27 2022 Makefile # 编译文件 -rw-rw-r-- 1 root root 6888 4月 27 2022 MANIFESTO -rw-rw-r-- 1 root root 22435 4月 27 2022 README.md -rw-rw-r-- 1 root root 106547 4月 27 2022 redis.conf # 默认配置文件 -rwxrwxr-x 1 root root 279 4月 27 2022 runtest -rwxrwxr-x 1 root root 283 4月 27 2022 runtest-cluster # 集群工具 -rwxrwxr-x 1 root root 1578 4月 27 2022 runtest-moduleapi -rwxrwxr-x 1 root root 285 4月 27 2022 runtest-sentinel -rw-rw-r-- 1 root root 1695 4月 27 2022 SECURITY.md -rw-rw-r-- 1 root root 13924 4月 27 2022 sentinel.conf # 哨兵默认配置文件 drwxrwxr-x 4 root root 4096 4月 27 2022 src #源码文件 drwxrwxr-x 11 root root 4096 4月 27 2022 tests -rw-rw-r-- 1 root root 3055 4月 27 2022 TLS.md drwxrwxr-x 8 root root 4096 4月 27 2022 utils
接下来,在源代码路径下运行安装。
make && make install
等待几分钟后,会出现如下界面,表示Redis已经安装成功。
Hint: It's a good idea to run 'make test' ;) INSTALL redis-server INSTALL redis-benchmark INSTALL redis-cli
Redis相关的客户端工具和服务端工具默认安装在/usr/local/bin
目录下。
[root@VM-16-3-centos bin]# cd /usr/local/bin [root@VM-16-3-centos bin]# ll 总用量 27896 -rwxr-xr-x 1 root root 383 12月 10 2019 chardetect -rwxr-xr-x 1 root root 389 12月 10 2019 cloud-init -rwxr-xr-x 1 root root 1781 12月 10 2019 cloud-init-per -rwxr-xr-x 1 root root 399 12月 10 2019 easy_install -rwxr-xr-x 1 root root 407 12月 10 2019 easy_install-3.6 -rwxr-xr-x 1 root root 1005 12月 10 2019 jsondiff -rwxr-xr-x 1 root root 3663 12月 10 2019 jsonpatch -rwxr-xr-x 1 root root 1839 12月 10 2019 jsonpointer -rwxr-xr-x 1 root root 392 12月 10 2019 jsonschema -rwxr-xr-x 1 root root 6976488 2月 26 15:48 redis-benchmark lrwxrwxrwx 1 root root 12 2月 26 15:48 redis-check-aof -> redis-server lrwxrwxrwx 1 root root 12 2月 26 15:48 redis-check-rdb -> redis-server -rwxr-xr-x 1 root root 7234616 2月 26 15:48 redis-cli lrwxrwxrwx 1 root root 12 2月 26 15:48 redis-sentinel -> redis-server -rwxr-xr-x 1 root root 14307984 2月 26 15:48 redis-server
1。 redis-server:Redis服务器工具,启动Redis服务时需要使用该工具。
2。 redis-cli:Redis 客户端工具。使用命令访问Redis时需要用到该工具。
3。 redis-check-rdb:永久RDB文件检测。当RDB文件出现问题时,可以使用该工具进行检测并恢复。
4。 redis-check-aof:永久 AOF 文件检测。当AOF文件出现问题时,可以使用该工具进行检测并恢复。
5。 redis-sentinel:Redis哨兵工具。使用哨兵模式时,需要使用该工具来启动哨兵。
6。 redis-benchmark:Redis压缩工具,可用于模拟Redis性能。
安装成功后,我们还可以查看当前安装的Redis版本。
[root@VM-16-3-centos bin]# redis-server -v Redis server v=7.0.0 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=34dee89a8e7e24d2
启动服务
服务启动时,我们可以指定配置文件,也可以不指定。如果不指定配置,则使用redis-server
时使用默认配置文件。
1。无需配置文件即可启动。只需使用 redis-server
命令即可。如果看到如下界面,则说明Redis服务已经正常启动。但也有一个问题。 Redis 服务在前台运行。当我们关闭 shell 窗口时,服务就会终止。因此,建议使用指定的配置文件。
[root@VM-16-3-centos bin]# redis-server _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 7.0.0 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 615368 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | https://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 615368:M 26 Feb 2023 16:02:04.530 * Ready to accept connections
2。首先配置一个配置文件。 Redis源码目录下有一个文件redis.conf
。您可以直接编辑该文件,也可以将文件复制到特定目录稍后再编辑。在文件中找到配置项daemonize
,并将其值更改为yes
。
daemonize yes
接下来运行redis-server ./redis.conf
时,界面可能没有输出信息。我们可以使用 redis-cli
命令来测试连接。
[root@VM-16-3-centos redis-7.0.0]# redis-cli 127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379>
通过上图的介绍,我们可以看到Redis可以正常链接。谨此,Redis 环境安装、基本测试和连接已完成。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。