您的位置:首页 >聚焦 >

Redis7系列教程入门-认识Redis_环球热点

2023-03-03 19:34:26    来源:程序员客栈
大家好,我是二条。一位从事服务端研发的程序猿。从今天开始,我会不间断的开始给大家分享Redis7.0版本的知识。从2022年1月31开始,官方就发布了 Redis7.0-rc1,至今已经发布到 7.0.5 版本。很多的开发者,还对Redis认识停留在5.x的版本或者6.x的版本,对Redis7.0还缺乏较少的认识。本系列教程,将带领大家完整的学习Redis7.0相关的知识点。从环境的搭建、10大数据类型、事务、发布订阅、主从复制、哨兵、集群等等知识。本教程最大的特点是,不会单纯的总结一些枯燥乏味的理论知识,而是理论知识+基础时间+场景面试题分析,同时也会分享一些Redis相关技术栈等等内容。今天给大家分享的是Redis相关的基础认识,以及它适合在什么场景下使用,如何快速搭建Redis环境。记得文末有几道测试题哦。Redis是什么Redis是一款基于内存,采用 key => vlaue 方式存储的高性能内存型nosql数据库。Redis 提供数据结构,例如字符串、哈希、列表、集、带有范围查询的排序集、位图、超日志日志、地理空间索引和流。Redis 具有内置复制、Lua 脚本、LRU 逐出、事务和不同级别的磁盘持久性,并通过 Redis Sentinel 和 Redis 集群的自动分区提供高可用性。为什么会出现Redis这样一款内存型数据库呢。这就要从Redis的作者antirezs说起。2008年的时候有一个意大利西西里岛的小伙子,笔名antirez,创建了一个访客信息网站LLOOGG.COM。有的时候我们需要知道网站的访问情况,比如访客的IP、操作系统、浏览器、使用的搜索关键词、所在地区、访问的网页地址等等。在国内,有很多网站提供了这个功能,比如CNZZ,百度统计,国外也有谷歌的GoogleAnalytics。我们不用自己写代码去实现这个功能,只需要在全局的footer 里面嵌入一段JS 代码就行了,当页面被访问的时候,就会自动把访客的信息发送到这些网站统计的服务器,然后我们登录后台就可以查看数据了。LLOOGG.COM 提供的就是这种功能,它可以查看最多10000 条的最新浏览记录。这样的话,它需要为每一个网站创建一个列表(List),不同网站的访问记录进入到不同的列表。如果列表的长度超过了用户指定的长度,它需要把最早的记录删除(先进先出)。当LLOOGG.COM 的用户越来越多的时候,它需要维护的列表数量也越来越多,这种记录最新的请求和删除最早的请求的操作也越来越多。LLOOGG.COM 最初使用的数据库是MySQL,可想而知,因为每一次记录和删除都要读写磁盘,因为数据量和并发量太大,在这种情况下无论怎么去优化数据库都不管用了。考虑到最终限制数据库性能的瓶颈在于磁盘,所以antirez 打算放弃磁盘,自己去实现一个具有列表结构的数据库的原型,把数据放在内存而不是磁盘,这样可以大大地提升列表的push 和pop 的效率。antirez 发现这种思路确实能解决这个问题,所以用C 语言重写了这个内存数据库,并且加上了持久化的功能,09 年,Redis 横空出世了。从最开始只支持列表的数据库,到现在支持多种数据类型,并且提供了一系列的高级特性,Redis 已经成为一个在全世界被广泛使用的开源项目。Redis的全称是 REmote DIctionary Server。其默认的服务端口是 6379。关于Redis的端口号选择 6379,有这么一种说法。6379在是手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字。Alessia Merz 是一位意大利舞女、女演员。Redis 作者 Antirez(意大利人) 早年看电视节目,觉得 Merz 在节目中的一些话愚蠢可笑,Antirez 喜欢造“梗”用于平时和朋友们交流,于是造了一个词 "MERZ",形容愚蠢,与 "stupid" 含义相同。后来 Antirez 重新定义了 "MERZ" ,形容”具有很高的技术价值,包含技艺、耐心和劳动,但仍然保持简单本质“。到了给 Redis 选择一个数字作为默认端口号时,Antirez 没有多想,把 "MERZ" 在手机键盘上对应的数字 6379 拿来用了。如果你想关注更多Redis相关的内容,除了官网地址,还可以通过Redis作者的博客,GitHub地址。1、官方地址:https://redis.io/2、GitHub地址:https://github.com/antirez3、博客地址:http://antirez.com/latest/0Redis使用场景Redis是基于内存操作,具备高可用、高性能等特点,同时也提供了丰富的数据类型。一般可用于如下场景:1、数据缓存。项目早期一般都是将数据存储到MySQL、oracle等关系型数据库中,所有的数据读写都是基于磁盘操作。随着业务的不断扩大,通过传统的方式进行数据的读取,系统在读写方面都会遇到瓶颈。针对这一情况,将数据存放在内存中,所有的读操作都通过内存进行查询,提高了系统的数据查询能力。对于数据的读,在高并发的业务场景下,也可以将数据先写入内存中,在通过异步的方式持久化到磁盘中,提高了系统的并发能力。2、存储用户登录token。针对用户登录鉴权,一般可以基于cookie、jwt来实现。cookie是基于文件存储,并且cookie会涉及到跨域、分布式架构问题,jwt由于是基于客户端断存储方案,服务端无法直接控制登录token的状态。由于Redis是具备分布式部署架构,很好的解决了分布式架构token鉴权、用户登录状态等问题的控制。同时将登录token存放在Redis中,每次读取都采用内存读取,也提高了整个系统的性能。3、秒杀场景。对于秒杀业务场景,对于系统的并发能力都是非常高的。在该场景下,将商品数据存储到Redis中,提高了系统的查询能力,减少了MySQL的压力。将商品库存都存储到Redis中,因Redis采用的是单线程架构,也可以实现商品超卖问题。4、用户签到。可以使用 bitmap数据类型,将用户签到存储在Redis中,然后通过异步线程将数据存储到MySQL中。既节约了内存,也提供了系统的读写能力。5、消息队列。Redis提供 list数据类型,技能用来做消息队列,也能用来做栈等场景。在 Redis5.0 开始,也提供了一种 stream 数据类型,提高了消息队列的可靠性。6、社交场景。Redis提供了两种集合数据类型(set sortset),可以用在积分排行、好友推荐等场景。7、 就近推荐。Redis中是提供了一种 GEO的数据类型来进行位运算。可以根据用户当前的经纬度,来计算附近的酒店、商场等场所的搜索与推荐功能。8、分布式锁。当分布式架构中,需要对共享数据的读写操作(例如商品秒杀)。为了保证数据的一致性,一般是采用分布式锁实现,Redis能够非常简单的实现分布式锁功能。可以直接使用 setnx key value + expire time操作,为了实现原子性操作,也可以直接使用 lua实现。Redis有什么优势Redis作为一种内存型数据库,其读写性能都是非常高的。这里将Redis与memcached进行对比。1、线程模型。memcached采用的多线程模式,Redis采用的是单线程模式,虽然Redis6.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或者 ap-get这样的包管理工具。由于这种方式非常的简单,下面就单独演示源码编译安装。通过Redis官方的GitHub地址,下载Redis7.0.0版本。一般软件的版本都有奇数和偶数之分,我们在选择版本也会优选的选择偶数版本,因为偶数版本会相对奇数版本稳定一些。

//下载cd~&&wgethttps://github.com/redis/redis/archive/7.0.0.tar.gz//解压tar-zxvf7.0.0.tar.gz

解压之后,我们可以查看一下源码中大致有哪些文件。

[root@VM-16-3-centosredis-7.0.0]#ll总用量252-rw-rw-r--1rootroot277444月27202200-RELEASENOTES-rw-rw-r--1rootroot514月272022BUGS-rw-rw-r--1rootroot50264月272022CONDUCT-rw-rw-r--1rootroot26344月272022CONTRIBUTING-rw-rw-r--1rootroot14874月272022COPYINGdrwxrwxr-x7rootroot40964月272022deps-rw-rw-r--1rootroot114月272022INSTALL-rw-rw-r--1rootroot1514月272022Makefile#编译文件-rw-rw-r--1rootroot68884月272022MANIFESTO-rw-rw-r--1rootroot224354月272022README.md-rw-rw-r--1rootroot1065474月272022redis.conf#默认配置文件-rwxrwxr-x1rootroot2794月272022runtest-rwxrwxr-x1rootroot2834月272022runtest-cluster#集群工具-rwxrwxr-x1rootroot15784月272022runtest-moduleapi-rwxrwxr-x1rootroot2854月272022runtest-sentinel-rw-rw-r--1rootroot16954月272022SECURITY.md-rw-rw-r--1rootroot139244月272022sentinel.conf#哨兵默认配置文件drwxrwxr-x4rootroot40964月272022src#源码文件drwxrwxr-x11rootroot40964月272022tests-rw-rw-r--1rootroot30554月272022TLS.mddrwxrwxr-x8rootroot40964月272022utils

接下来,在源码路径下执行安装操作。


(资料图片)

make&&makeinstall

在经过几分钟的等待,出现如下的界面,就表示Redis已经被成功的安装。

Hint:It"sagoodideatorun"maketest";)INSTALLredis-serverINSTALLredis-benchmarkINSTALLredis-cli

默认情况下,Redis相关的客户端工具、服务端工具都会被安装在 /usr/local/bin目录下面。

[root@VM-16-3-centosbin]#cd/usr/local/bin[root@VM-16-3-centosbin]#ll总用量27896-rwxr-xr-x1rootroot38312月102019chardetect-rwxr-xr-x1rootroot38912月102019cloud-init-rwxr-xr-x1rootroot178112月102019cloud-init-per-rwxr-xr-x1rootroot39912月102019easy_install-rwxr-xr-x1rootroot40712月102019easy_install-3.6-rwxr-xr-x1rootroot100512月102019jsondiff-rwxr-xr-x1rootroot366312月102019jsonpatch-rwxr-xr-x1rootroot183912月102019jsonpointer-rwxr-xr-x1rootroot39212月102019jsonschema-rwxr-xr-x1rootroot69764882月2615:48redis-benchmarklrwxrwxrwx1rootroot122月2615:48redis-check-aof->redis-serverlrwxrwxrwx1rootroot122月2615:48redis-check-rdb->redis-server-rwxr-xr-x1rootroot72346162月2615:48redis-clilrwxrwxrwx1rootroot122月2615:48redis-sentinel->redis-server-rwxr-xr-x1rootroot143079842月2615:48redis-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-centosbin]#redis-server-vRedisserverv=7.0.0sha=00000000:0malloc=jemalloc-5.2.1bits=64build=34dee89a8e7e24d2

启动服务启动服务时,我们可以指定配置文件,也可以不指定配置文件。如果不指定配置,使用 redis-server时会使用默认的配置文件。1、不使用配置文件启动。直接使用 redis-server命令即可,看到如下的界面表示Redis服务已经正常启动。但这样也存在一个问题,Redis服务时处于前台运行的,当我们将该shell窗口关闭后,服务就会被停止。因此推荐使用指定配置文件的方式。

[root@VM-16-3-centosbin]#redis-server_.__.-``__""-.__.-```.`_.""-._Redis7.0.0(00000000/0)64bit.-``.-```.```\/_.,_""-._(",.-`|`,)Runninginstandalonemode|`-._`-...-`__...-.``-._|"`_.-"|Port:6379|`-._`._/_.-"|PID:615368`-._`-._`-./_.-"_.-"|`-._`-._`-.__.-"_.-"_.-"||`-._`-.__.-"_.-"|https://redis.io`-._`-._`-.__.-"_.-"_.-"|`-._`-._`-.__.-"_.-"_.-"||`-._`-.__.-"_.-"|`-._`-._`-.__.-"_.-"_.-"`-._`-.__.-"_.-"`-.__.-"`-.__.-"615368:M26Feb202316:02:04.530*Readytoacceptconnections

2、指定配置文件启动。在Redis的源码目录中存在一个 redis.conf文件。可以直接在该文件修改,也可以将文件复制到指定目录,在对其修改。找到文件中的 daemonize配置项,将其值改为 yes。

daemonizeyes

接下来,在执行 redis-server ./redis.conf,执行完之后,可能界面没有任何输出信息。我们可以使用 redis-cli命令进行连接测试。

[root@VM-16-3-centosredis-7.0.0]#redis-cli127.0.0.1:6379>keys*(emptyarray)127.0.0.1:6379>

通过上图的演示,我们可以看到Redis已经能够被正常链接,此致Redis的环境安装、基础测试和连接就全部完成了。教程回顾

看完上面的内容,做几个简单的测试吧,以便回顾一下知识内容。

1、 Redis是什么?

2、 项目当中,使用MySQL作为数据库存储,为什么还要使用Redis?

3、 Redis有哪些使用场景?

4、 Redis默认的端口是什么?

5、 Redis相对memcached而言,有什么优势?

关键词: 数据类型 配置文件 可以使用

相关阅读