Skip to content

Redis简介与安装

更新: 2025/2/24 字数: 0 字 时长: 0 分钟

Redis简介

**Redis是一种基于键值对[丰富的数据结构]、单线程+内存[高性能]、持久化、分布式、开源的非关系型(NoSQL)数据库。**同时Redis本身非常稳定,已经得到业界的广泛认可和使用。掌握Redis已经逐步成为开发和运维人员的必备技能之一。

数据结构

**Redis是一种基于键值对(key-value)格式来存储数据的,即一个键对应一个值,也正由于这种存储格式,可以让Redis拥有丰富的数据结构。**Redis中的值可以是由string(字符串)、hash(哈希)、 list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、 HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此 Redis可以满足很多的应用场景。

高性能

**Redis将所有数据都存放在内存中,内存响应时长大约为100纳秒,所以它的读写性能非常惊人,这也是Redis达到每秒万级别访问的重要基础。**官方给出的数字是读写性能可以达到10万/秒,当然这也取决于机器的性能。

Redis是用C语言实现的,一般来说C语言实现的程序“距离”操作系统更近,执行速度相对会更快。

**Redis使用了单线程架构,避免了线程切换产生的消耗以及线程竞争产生的问题。**流程可以简化成:发送命令、执行命令、返回结果。

QQ截图20200517143411

因为Redis是单线程来处理命令的,所以一条命令从客户端达到服务端不会立刻被执行,所有命令都会进入一个队列中,然后逐个被执行。所以就算多个客户端同时执行命令,其命令的执行顺序是不确定的,但可以确定的是不会有两条命令被同时执行。

QQ截图20200517143747

**Redis使用epoll作为I/O多路复用技术的实现,**再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间。

QQ截图20200517144301

持久化

通常看,将数据放在内存中是不安全的,一旦发生断电或者机器故障, 重要的数据可能就会丢失,因此Redis提供了两种持久化方式:RDB(快照)和 AOF(日志),将内存的数据保存到硬盘中,重启的时候可以再次加载进行使用,保证数据的可持久性。

QQ截图20200517002647

分布式

Redis提供了复制功能,实现了多个相同数据的Redis副本,复制功能是分布式Redis的基础。

Redis从2.8版本正式提供了高可用实现Redis Sentinel,它能够保证Redis节点的故障发现和故障自动转移。Redis从3.0版本正式提供了分布式实现Redis Cluster,它是Redis真正的分布式实现,提供了高可用、读写和容量的扩展性。

QQ截图20200517003251

简单稳定

Redis的简单主要表现在三个方面:

  1. Redis的源码很少,大概5万行左右,相对于很多NoSQL数据库来说代码量相对要少很多,也就意味着普通的开发和运维人员完全可以“吃透”它。
  2. Redis使用单线程模型,这样不仅使得Redis服务端处理模型变得简单,而且也使得客户端开发变得简单。
  3. Redis不需要依赖于操作系统中的类库,自己就实现了事件处理的相关功能。

使用场景

用作缓存: 合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。

消息队列系统:消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。

计数器应用: 例如视频播放数、网店浏览数,为了保证数据的实时性,每一次播放和浏览都要做加1的操作,如果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持计数功能而且计数的性能也非常好,可以说是计数器系统的重要选择。

合理运用

实际上和任何一门技术一样,每个技术都有自己的应用场景和边界,Redis并不是万金油,有很多适合它解决的问题,但是也有很多不合适它解决的问题。Redis使用单线程会有一个问题:对于每个命令的执行时间是有要求的。如果某个命令执行过长,会造成其他命令的阻塞,对于Redis这种高性能的服务来说是致命的,所以Redis是面向快速执行场景的数据库。

**站在数据规模的角度看,数据可以分为大规模数据和小规模数据。**我们知道Redis的数据是存放在内存中的,虽然现在内存已经足够便宜,但是如果数据量非常大,例如每天有几亿的用户行为数据,使用Redis来存储的话,基本上是个无底洞,经济成本相当的高。

**站在数据冷热的角度看,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数据。**例如对于视频网站来说,视频基本信息在业务线都是经常要操作的数据,而用户的观看记录不一定是经常需要访问的数据,单纯站在数据冷热的角度上看,视频信息属于热数据,用户观看记录属于冷数据。如果将这些冷数据放在Redis中,基本上是对于内存的一种浪费,但是对于一些热数据可以放在Redis中加速读写,也可以减轻后端存储的负载,可以说是事半功倍。

Web服务

一个分布式Web服务将用户的Session信息(例如用户登录信息)保存在各自服务器中,这样会造成一个问题,出于负载均衡的考虑,分布式服务会将用户的访问均衡到不同服务器上,用户刷新一次访问可能会发现需要重新登录,这个问题是用户无法容忍的。

QQ截图20200518002102

为了解决这个问题,可以使用Redis将用户的Session进行集中管理,在这种模式下只要保证Redis是高可用和扩展性的,每次用户更新或者查询登录信息都直接从Redis中集中获取。

QQ截图20200518002212

Redis安装

Redis的作者没有开发和维护针对Windows用户的Redis版本,但是Redis作为一款优秀的开源技术吸引到了微软公司的注意,微软公司的开源技术组在GitHub上维护一个Redis的分支:https://github.com/MicrosoftArchive/redis/tags

zip压缩包安装

下载zip压缩包

QQ截图20200517010207

打开解压文件

QQ截图20200517013318

解压到自定义的位置

QQ截图20200517013626

将解压路径手动添加到“环境变量”

QQ截图20200517014107

最后在命令行内进入redis解压目录,输入下面命令安装Redis服务,完成redis安装

Redis-server.exe --service-install redis.windows.conf --service-name Redis --loglevel verbose

查看Redis服务

redis-msi-8

mis文件安装

下载mis文件

A03EDBCB-8B3A-41F2-B6FC-A79759A45EF5

双击打开文件

redis-msi-1

勾选 I accept...,点击Next

redis-msi-2

填写安装路径,勾选 Add the... 将路径添加到环境变量中,点击Next

redis-msi-3

设置 Redis 的服务端口,默认为 6379,点击 Next

redis-msi-4

设置 Max Memory(指定 Redis 最大内存限制),然后 Next 进入安装

如果 Redis 作为临时缓存那就得看自己的需要设置了。

如果 Redis 作为数据库使用,就不要设置这个选项,因为数据库是不能容忍丢失数据的。

redis-msi-6

点击Install完成安装

redis-msi-7

查看Redis服务

redis-msi-8