详细Redis入门教程

article/2025/11/2 12:21:37

目录

1 Redis的前世今生

1.1 简介

1.2 应用场景

2 Redis下载及安装

2.1 下载及安装

3 Redis使用

3.1 数据类型

3.2 持久化

3.3 事务

3.4 脚本

语法

4 Redis集群

4.1 主从模式

4.2 Sentinel模式

1.哨兵模式集群架构

2.哨兵模式作用

3.哨兵模式工作过程

4.3 Cluster模式

1.Cluster数据分区

2.Cluster高可用

3.Cluster数据分片

4.4 集群模式对比

主从模式优缺点

哨兵模式优缺点


1 Redis的前世今生

1.1 简介

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的高性能的日志型、Key-Value数据库,并提供多种语言的API。Redis的出现补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

1.2 应用场景

常见的16种应用场景:

缓存、数据共享分布式、分布式锁、全局 ID、计数器、限流、位统计、购物车、用户消息时间线 timeline、消息队列、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜.

2 Redis下载及安装

2.1 下载及安装

Linux下载地址:Download | Redis,下载最新稳定版本。(Windowshttps://github.com/tporadowski/redis/releases。)

本教程使用的最新文档版本为 2.8.17,下载并安装:

# wget http://download.redis.io/releases/redis-6.0.8.tar.gz
# tar xzf redis-6.0.8.tar.gz
# cd redis-6.0.8
# make

执行完 make 命令后,redis-6.0.8 的 src 目录下会出现编译后的 redis 服务程序 redis-server,还有用于测试的客户端程序 redis-cli:

下面启动 redis 服务:

# cd src
# ./redis-server

注意这种方式启动 redis 使用的是默认配置。也可以通过启动参数告诉 redis 使用指定配置文件使用下面命令启动。

# cd src
# ./redis-server ../redis.conf

redis.conf 是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

启动 redis 服务进程后,就可以使用测试客户端程序 redis-cli 和 redis 服务交互了。 比如:

# cd src
# ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

3 Redis使用

3.1 数据类型

  1. string:最基本的数据类型,二进制安全的字符串,最大512M。
  2. list:按照添加顺序保持顺序的字符串列表。
  3. set:无序的字符串集合,不存在重复的元素。
  4. sorted set:已排序的字符串集合。
  5. hash:key-value对的一种集合。
  6. bitmap:更细化的一种操作,以bit为单位。
  7. hyperloglog:基于概率的数据结构。 # 2.8.9新增
  8. Geo:地理位置信息储存起来, 并对这些信息进行操作   # 3.2新增
  9. 流(Stream)# 5.0新增

3.2 持久化

redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。

  1. RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;
  2. AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。

其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。

如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样

3.3 事务

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  1. 批量操作在发送 EXEC 命令前被放入队列缓存。
  2. 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  3. 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

  1. 开始事务。
  2. 命令入队。
  3. 执行事务。

Redis 事务的相关命令:

序号命令及描述
1DISCARD
取消事务,放弃执行事务块内的所有命令。
2EXEC
执行所有事务块内的命令。
3MULTI
标记一个事务块的开始。
4UNWATCH
取消 WATCH 命令对所有 key 的监视。
5WATCH key [key ...]
监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

3.4 脚本

Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本已内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL

语法

Eval 命令的基本语法如下:

redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

Redis 脚本常用命令:

序号命令及描述
1EVAL script numkeys key [key ...] arg [arg ...]
执行 Lua 脚本。
2EVALSHA sha1 numkeys key [key ...] arg [arg ...]
执行 Lua 脚本。
3SCRIPT EXISTS script [script ...]
查看指定的脚本是否已经被保存在缓存当中。
4SCRIPT FLUSH
从脚本缓存中移除所有脚本。
5SCRIPT KILL
杀死当前正在运行的 Lua 脚本。
6SCRIPT LOAD script
将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。

4 Redis集群

4.1 主从模式

1.主从复制概念
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

2.主从复制流程
若启动一个Slave机器进程,则它会向Master机器发送一个"sync_command"命令,请求同步连接。

无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照(RDB)保存到
数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。

后台进程完成缓存操作之后,Master机器就会向Slave机器发送数据文件,Slave端机器将数据
文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。

Master机器收到slave端机器的连接后,将其完整的数据文件发送给Slave端机几器,如果Mater同时收到多个slave发来的,同步请求则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。

4.2 Sentinel模式

1.哨兵模式集群架构

是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 Master 并将所有 Slave 连接到新的 Master。所以整个运行哨兵的集群的数量不得少于3个节点。哨兵是Redis集群架构中非常重要的一个组件,哨兵的出现主要是解决了主从复制出现故障时需要人为干预的问题。

2.哨兵模式作用

集群监控:负责监控Redismaster和slave进程是否正常工作。

消息通知:如果某个Redis实例有故障,那么哨兵负责发送消息作为报敬通知给管理员。

故障转移:如果masternode挂掉了,会自动转移到slave node上。

配置中心:如果故障转移发生了,通知client客户端新的master地址。

3.哨兵模式工作过程

(1)三个哨兵之间建立命令连接,周期性检测队友状态。

(2)哨兵会向master节点(已在配置文件中)发送两条连接,分别是命令连接和订阅连接(为了周期性获取master节点的数据)。

(3)哨兵想master周期性发送info命令,master(活着的情况下)会返回redis-cil inforeplication master 节点的信息+从节点位置。

(4)哨兵通过master返回的信息,再会向slaves 节点发送info命令,slaves返回数据,从而哨兵集群就可以获取到redis所有集群信息。

(5)哨兵会向服务器发送命令连接,建立自己的hello频道,哨兵会向这个hello频道建立订阅,用于哨兵之间的消息共享。

4.3 Cluster模式

redis的哨兵模式基本已经可以实现高可用、读写分离,但是在这种模式每台redis服务器都存储相同的数据,很浪费内存资源,所以在redis3.0上加入了Cluster群集模式,实现了redis的分布式存储,也就是说每台redis节点存储着不同的内容根据官方推荐,集群部署至少要3台以上的master节点,最好使用3主3从六个节点的模式。

1.Cluster数据分区

数据分区(或称数据分片)是集群最核心的功能,集群将数据分散到多个节点,一方面突破了 Redis 单机内存大小的限制,存储容量大大增加,另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力,Redis 单机内存大小受限问题,在介绍持久化和主从复制时都有提及。

2.Cluster高可用

集群支持主从复制和主节点的自动故障转移(与哨兵类似),当任意节点发送故障时,集群仍然可以对外提供服务。

3.Cluster数据分片

Redis 集群引入了哈希槽的概念,有 16384 个哈希槽(编号 0~16383)。集群的每个节点负责一部分哈希槽,每个 Key 通过 CRC16 校验后对 16384 取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

以 3 个节点组成的集群为例:
节点 A 包含 0~5469 号的哈希槽
节点 B 包含 5461~10922 号的哈希槽
节点 C 包含 10923~16383 号的哈希槽

4.4 集群模式对比

主从模式优缺点
优点: 
主从结构具有读写分离,提高效率、数据备份,提供多个副本等优点。

不足: 最大的不足就是主从模式不具备自动容错和恢复功能,主节点故障,集群则无法进行工作,可用性比较低,从节点升主节点需要人工手动干预。

哨兵模式优缺点
优点: 
哨兵模式是基于主从模式的,解决可主从模式中master故障不可以自动切换故障的问题。

不足: (1)是一种中心化的集群实现方案:始终只有一个Redis主机来接收和处理写请求,写操作受单机瓶颈影响。

         (2)集群里所有节点保存的都是全量数据,浪费内存空间,没有真正实现分布式存储。数据量过大时,主从同步严重影响master的性能。

         (3)Redis主机宕机后,哨兵模式正在投票选举的情况之外,因为投票选举结束之前,谁也不知道主机和从机是谁,此时Redis也会开启保护机制,禁止写操作,直到选举出了新的Redis主机

Redis Cluster模式优缺点

优点: 数据依照slot存储分布在多个节点,节点间数据共享,能够动态调整数据分布;可扩展性;无中心架构;高可用性;能够降低运维成本,有效提高系统的可用性以及扩展性。

不足: 数据通过异步复制,不保证数据的强一致性;Client 实现复杂;节点会因为某些原因发生阻塞被判断下线;多个业务使用同一套集群的时候,不能够依据统计区分冷热数据,资源隔离性较差,非常容易出现互相影响;Slave 在集群中充当“冷备”,不能缓解读压力;Key批量操作限制;Key事务操作支持有限;Key不可以将一个很大的键值对象如 hash、list 等映射到不同的节点;不支持多数据库空间;复制结构只支持一层;避免产生hot-key,导致主库节点成为系统的短板;避免产生 big-key,导致网卡撑爆、慢查询等;重试时间应该大于cluster-node-time时间;


http://chatgpt.dhexx.cn/article/wBqyhV9K.shtml

相关文章

Redis详解

转载:Redis 详解_罗志宏的博客-CSDN博客_redis详解 1. 什么是 Redis   Redis 是一个基于内存的高性能 key-value 数据库。是完全开源免费的,用C语言编写的,遵守BSD协议。 Redis 特点: Redis 是基于内存操作的,吞吐量…

Redis入门一:Redis实战读书笔记

Redis提供5种不同类型的数据结构,并存储键与5种不同类型的值之间的映射,各式各样的问题都可以自然地映射到这些数据结构上。通过复制、持久化和客户端分片等特性,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展…

Redis数据库介绍

1 Redis简介 Redis,全称远程字典服务(REmote DIctionary Server),是一个开源、基于内存、高性能、可数据持久化的key-value存储系统,遵守BSD协议,可用作数据库、缓存和消息中间件。 在Redis中文官网上是这…

redis详解(全)

学前小故事 数据库和缓存保证一致性小故事 windows && linux 安装redis redis 持久化 redis API 学前小故事 [我是redis] 你好,我是Redis,一个叫Antirez的男人把我带到了这个世界上。 说起我的诞生,跟关系数据库MySQL还挺有渊…

Redis 详解

文章目录 Redisredis 简介1. Redis 中的事务1.1 什么是事务?1.2 Redis 中的事务是怎么实现的?1.3 Redis 事务为什么不支持回滚?1.3.1 语法错误情况下的事务回滚状态1.3.2 类型错误情况下的事务回滚状态1.3.3 Redis事务不回滚总结 2. Redis 中…

Redis该怎么学?其实很简单,这份学习路线+资料+书单我全部贡献出来了!

前言 这绝对不是一篇水文,进来的兄弟们千万不要白嫖,真香警告⚠️。(点赞!!!) 这篇文章很早前就打算写了,特地留到现在是因为我想把Redis系列的文章全部更完,能让需要的…

Redis入门官方文档

Redis资料 Redis官网:http://redis.io/ Redis官方文档:http://redis.io/documentation Redis教程:http://www.w3cschool.cn/redis/redis-intro.html Redis下载:http://redis.io/download redis英文文档 https://redis.io/topics/data-types redis中文文档 http://www.red…

Redis内存数据库必读的4本书

Redis从一个不为人熟知、只有少量应用的崭新数据库,逐渐变成了内存数据库领域的事实标准。时至今日,经过大量的实践应用,Redis简洁高效、安全稳定的特性已经深入人心。 无论是国内还是国外,从五百强公司到小型初创公司都在使用Re…

【好书推荐】Redis入门必备 | 《Redis实战》

一、Redis入门必备 你好,我是小雨青年,一名程序员。 今天为你推荐的书籍是《Redis实战》。 Redis作为一个内存数据库服务器,本书提供了大量讲解和用例。 本书的大部分用例是用Python编写的,希望你有一些Python语言基础。 本书…

Day768.大佬推荐的经典的Redis学习资料 -Redis 核心技术与实战

大佬推荐的经典的Redis学习资料 Hi,我是阿昌,今天学习记录的是关于经典的Redis学习资料。 一、经典书籍 在学习 Redis 时,最常见的需求有三个方面。 日常使用操作:比如常见命令和配置,集群搭建等;关键技…

qt QSettings

qt QSettings 用法总结 用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位置,一些别的设置,还有一个经常用的,就是recent files,等等这些都可以通过Qsettings来实现。 …

QT中使用QSettings保存应用程序配置信息

一、问题描述 今天遇到一个问题,就是想实现一个软件,我上一次开启软件时候配置的IP地址以及,打开的文件路径,能够在我下一次打开软件时候自动写入上一次配置的信息,不需要再重新设置配置了。 二、解决方法 使用QT中的…

QSettings用法(例子)

用户通常打开程序,希望每次打开程序都能记住跨会话设置,比如(窗口的大小位置,选项等); 窗口打开如果没有记住上次打开的记录,每次关闭它都会重复在同样位置同样大小,好比如手机格式化&#xff…

Qt使用QSettings读写ini文件

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 QSettings 简介 QSettings 类提供了ini文件读写,注册表读写的功能 QSettings::Format有两种: QSettings::NativeFormat 在…

QSettings读写ini文件

QSettings简介 QSettings类提供了持久的独立于平台的应用程序设置。 用户通常希望应用程序能够跨会话记住它的设置(窗口大小和位置,选项等)。在Windows上,这些信息通常存储在系统注册表中,在macOS和iOS上则存储在属性列表文件中。在Unix系统…

Qt中使用QSettings读取配置文件注意事项

QSetting使用中的注意事项 QSetting为Windows、Linux和MacOS系统提供了统一的配置文件/注册表读取方式。 (引用QtHelp的一句话:The QSettings class provides persistent platform-independent application settings.) 但是在读取配置文件时…

QT 程序参数保存-QSettings类

背景: 程序需要设置参数保存在本地,下次一次打开时参数为上次设置的值,不会被重新初始化。 QSettings类 实现步骤 1 新建paraConfig类 1.1 paraConfig方法中传入文件名参数fileName 1.2 在程序目录下新建一个CFG文件夹,&…

QT中QSettings的使用

首先包含头文件 #include<QSettings>QSettings的使用 QSettings m_iniFile("test.ini", QSettings::IniFormat);m_iniFile.beginGroup("USERCONFIG");m_iniFile.setValue("userName", ui->Edt_user->text());m_iniFile.setValue(&q…

Qt如何用QSettings读写ini配置文件

一、ini文件的格式 ini文件的格式如下&#xff0c;主要是由节、键、值来组成。 [section1] age23 namlcm sexman[section2] age75 namelucimer sexman……………… [sectionN] // 节名 键 值 ……………… 键 值二、ini配置文件的写入 ini文件的读取和写入都是…