Redis内存数据库介绍

Redis概述

Remote Dictionary Server(远程字典服务器)

是一款开源高性能的(Key/Values)分布式内存数据库

也可以被视为一个缓存数据库

支持数据持久化(定期把内存里数据存储到硬盘)

支持多种数据类型:字符、列表、散列、集合

支持master-slave模式数据备份

默认监听端口是TCP/6379

中文网站www.redis.net.cn

  • Redis特点

在大数据、高并发场景下具有广泛的应用前景

  • 高性能:Redis的数据都存储在内存中,读写速度非常快。
  • 持久化:支持数据的持久化存储,可以通过RDB快照和AOF日志两种方式进行数据备份,保证数据的安全性和可靠性。
  • 支持多种数据类型:包括字符串、哈希、列表、集合,能够满足不同的业务需求。
  • 支持分布式部署:通过集群方式实现数据的高可用性、负载均衡等功能。
  • 丰富的功能:支持事务、发布订阅、Lua脚本、管道等功能,能够满足各种应用场景的需求
  • Redis作为分布式内存数据库

特点

  1. 分布式:Redis Cluster 支持分布式存储,通过槽位(Slot)机制将数据分布在多个节点上。
  2. 高性能:Redis 使用内存存储,提供高速的数据读写操作。
  3. 持久化:Redis 支持持久化功能,可以将内存中的数据保存到磁盘,以防止数据丢失。
  4. 数据一致性:通过主从复制和哨兵机制(Redis Sentinel),Redis 可以实现数据一致性和高可用性。

适用场景

  1. 需要高性能和高可用性的应用场景。
  2. 需要分布式存储和数据冗余的应用场景。
  3. 需要持久化数据的应用场景。

示例

  1. 在一个分布式系统中,Redis 可以用作主数据库,存储用户数据和系统状态。
  2. 在一个电子商务平台中,Redis 可以用作订单系统的主数据库,确保数据一致性和高可用性。
  • Redis 作为缓存数据库

特点

  1. 高性能:Redis 使用内存存储,提供高速的数据读写操作。
  2. 多数据结构:Redis 支持多种数据结构,包括字符串(Strings)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)、哈希(Hashes)等。
  3. 缓存:Redis 可以用作缓存层,存储热点数据,减少数据库的负载。

适用场景

  1. 需要高性能和低延迟的缓存层应用。
  2. 需要存储热点数据和频繁访问的数据的应用。
  3. 需要减少数据库负载的应用。

示例

  1. 在一个电子商务平台中,Redis 可以用作缓存层,存储用户登录状态和购物车数据,减少数据库的负载。
  2. 在一个社交平台中,Redis 可以用作缓存层,存储热门帖子和用户消息,提高数据访问速度。
  • Redis应用场景
  • 计数器和排行榜:Redis的AtomicIncrement命令可以实现高效的计数器,而有序集合可以轻松实现排行榜功能。
  • 分布式锁:Redis的SETNX命令和EXPIRE命令可以实现分布式锁,避免多个线程同时修改同一个资源。
  • 实时消息系统:Redis的发布/订阅模式和Stream数据结构可以实现高效的实时消息系统,适用于在线聊天、推送等场景。。
  • 日志收集:Redis的List数据结构可以轻松实现消息队列,用于日志收集等场景。
  • 会话管理:Redis的数据结构和高性能可以用于实现高效的Session管理,提高Web应用程序的性能

常用命令

命令

作用

info

获取Redis服务器的详细信息

set

存储一个key值

mset

存储多个key值

mget

获取多个key值

select

切换库

keys

显示key名

exists

测试key名是否存在

ttl

查看key生存时间

type

查看key类型

move

移动key到指定库

expire

设置key有效时间

del

删除指定的key

flushall

删除内存里所有key

flushdb

删除所在库的所有key

lpush

将一个或多个值插入列表

lrange

获取列表中指定范围内的元素

Redis槽位

在 Redis 中,槽位(Slot)是一个关键的逻辑概念,用于实现数据分片(Sharding)和分布式存储。槽位是 Redis Cluster(Redis 集群)中的核心概念,它将整个数据集划分为多个槽位,每个槽位负责管理一部分数据。通过槽位,Redis 可以实现数据的横向扩展和高可用性。

  • 槽位的基本概念
  • 槽位的数量:
  1. Redis Cluster 中有 16384 个槽位,编号从 0 到 16383
  2. 每个槽位负责管理一部分数据
  • 数据分片:
  1. 每个键值对(Key-Value Pair)都会被分配到一个槽位中
  2. 数据的分配是通过对键(Key)进行哈希计算(CRC16 算法),然后将哈希值对 16384 取模,得到的结果就是该键值对所属的槽位
  • 槽位分配:
  1. 在 Redis Cluster 中,每个节点(Node)负责管理一部分槽位
  2. 节点之间可以通过配置文件或命令行工具动态分配槽位

 专业术语

  • redis雪崩

在某个时间段内,Redis节点集群中大量的缓存数据同时过期或者失效,导致瞬间来了大量的请求,从而引发Redis服务性能异常下降甚至瘫痪的现象

  • redis击穿

在某个时间点上,针对某一个特定的key大量请求到来,而该key恰好又不存在或者已经失效,导致请求全部落到数据库上,从而引发数据库压力过大,性能异常降甚至瘫痪的现象

  • redis穿透

是指针对某个key的请求,在缓存和数据库中都不存在,导致每次请求都必须查询数据库,从而引发数据库压力过大,性能异常下降甚至瘫痪的现象

redis集群

Redis集群(Redis Cluster)是Redis提供的一种分布式数据存储解决方案,用来提高系统的扩展性、高可用性和性能。Redis集群通过数据分片(Sharding)和数据复制(Replication)机制,将数据分布在多个节点上,确保数据的高效存储和访问。

主从复制

Redis的主从复制是一种数据冗余机制,它允许将一台Redis服务器(主节点Master)的数据复制到其他Redis服务器(从节点Slave)。这种机制不仅提高了数据的可用性和容错性,还通过读写分离来提高性能。

  • 主从复制的基本概念
  • 主服务器(Master):负责处理写操作,并将这些操作同步给从服务器。
  • 从服务器(Slave):只读服务器,默认情况下不允许写操作。从服务器会定期从主服务器获取最新的数据更新,并保持与主服务器的数据一致。
  • 数据流向:数据的复制是单向的,只能由主服务器到从服务器。从服务器不能将数据写回主服务器
  • 工作原理
  1. 从节点向主节点发送sync命令,请求复制数据
  2. 主节点收到sync命令后,启动一次后台的子进程,该子进程在后台执行数据复制和传输的操作
  3. 主节点子进程将该节点在复制缓冲区中的数据记录到RDB快照中,并将快照和接下来所有的写操作日志写入到内存缓冲区中,随后将快照发送给从节点
  4. 从节点收到快照并载入数据到内存中,之后主节点子进程将内存缓冲区中的写操作日志发送给从节点,让从节点执行相同的操作,从而达到主从节点数据同步的目的
  • 相关命令

命令

功能

replicaof

指定主服务器ip地址和端口

info replication

查看主从复制信息

config rewrite

保存配置到/etc/redis.conf末尾

replicaof no one

恢复为master角色主机

  • 配置带验证的主从复制相关命令

命令

功能

config get requirepass

查看redis服务密码

config set requirepass

设置redis服务密码

auth

输入redis服务密码

config rewrite

保存密码到配置文件末尾

config set masterauth

指定连接master角色redis服务密码

config get masterauth

查看连接master角色redis服务密码

哨兵服务

Redis Sentinel 是 Redis 官方提供的高可用性解决方案,主要用于监控 Redis 主从复制集群中的各个节点的状态,并在主服务器宕机时自动进行主从切换,确保服务的连续性和数据的可用性

  • 哨兵的工作原理

哨兵的工作原理可以分为以下A B C D四个阶段

  1. 监控
  1. 连接建立:哨兵节点会与所有的主从节点建立网络连接,并定期发送心跳检测命令(如PING)。
  2. 状态监控:哨兵节点会定期检查主从节点的状态,记录其响应时间和状态信息。
  3. 信息共享:哨兵节点会将监控信息共享给其他哨兵节点,确保所有哨兵节点的状态一致。

B.通知

  1. 故障检测:当哨兵节点检测到主节点不可达时,会将其标记为主观下线(Subjectively Down)。
  2. 通知其他哨兵:哨兵节点会向其他哨兵节点发送通知,要求他们也检查主节点的状态。

C.故障判定

  1. 客观下线:当足够多的哨兵节点(超过一半)认为主节点不可达时,哨兵节点会将主节点标记为客观下线(Objectively Down)。
  2. 领导者选举:哨兵节点会通过Raft协议选举出一个领导者哨兵节点,负责执行故障转移。

D.故障转移

  1. 选举新主节点:领导者哨兵节点会从从节点中选举出一个新的主节点。
  2. 更新配置:领导者哨兵节点会将所有从节点的配置更新为新的主节点。
  3. 通知客户端:哨兵节点会通知所有的客户端,更新主节点的地址。

  • 总结
  • Redis主从复制哨兵:主要用于提供高可用性和自动故障转移,适用于需要高可用性和读写分离的场景。
  • Redis集群:主要用于数据的分片和高可用性,提高系统的扩展性和可靠性,适用于需要处理大规模数据和高并发请求的场景。

 持久化

  • RDB(RedisDataBase)

RDB 持久化是通过创建数据库的快照来实现的。这种方式会在指定的时间间隔内生成数据集的时间点快照,并保存到磁盘上的 RDB 文件中

优点:

  • RDB持久化方式可以将当前Redis内存中的数据保存到硬盘上,防止数据丢失,保证数据的可靠性。
  • RDB持久化方式适用于数据量比较大,但是又需要快速备份和恢复数据的场景,因为RDB方式的二进制文件包含了Redis数据集合的全部信息,所以恢复数据非常快速。
  • RDB持久化方式可以在后台异步执行,在备份或者恢复过程中不会阻塞当前Redis服务的正常运行,提高了系统的可用性和性能

缺点:

  • RDB方式虽然可以保证数据的可靠性,并快速备份和恢复数据,但是在数据备份和恢复过程中,需要占用一定的系统资源,会影响当前Redis服务的性能。
  • RDB方式是将Redis的数据集合进行整体化备份,当Redis数据比较频繁时,可能会造成数据丢失。可以考虑使用AOF来补充数据备份策略
  • AOF

AOF 持久化是通过记录每次写操作来实现的,将所有对数据库进行修改的命令追加到一个日志文件中。

优点:

  • 可以最大程度的保证数据的完整性和持久性。因为AOF方式记录了每个写操作的详细日志,保证了即使服务器突然岩机,只要AOF文件没有损坏,数据也可以迅速恢复。
  • AOF更新数据的方式是追加(类似于写操作的日志),因此即使频繁的写入操作也不会影响到Redis的性能,而且当AOF文件变得太大时,可以通过重写AOF文件来删除其中的冗余信息,
  • AOF具有良好的可读性和可操作性,可以通过简单的文本文件操作对特定的键进行还原操作

缺点:

  • AOF文件体积通常要大于对应的RDB文件,因为AOF会记录每个写入操作,而频繁的写入操作会导致AOF文件迅速增大,占用磁盘空间。
  • AOF方式的持久化需要以追加的形式写入磁盘,频繁写入磁盘会对服务器的性能产生负面影响,因此AOF持久化的速度比RDB慢。
  • 适用场景

RDB

  1. 适用于数据量较大且变化较少的场景:由于RDB文件包含了某一时刻的所有数据,适用于数据量较大且变化较少的场景。
  2. 适用于快速恢复数据的场景:由于RDB文件的恢复速度较快,适用于需要快速恢复数据的场景。

AOF

  1. 适用于数据变化频繁且需要高安全性的场景:由于AOF文件记录了所有写操作,确保数据的最高安全性,适用于数据变化频繁且需要高安全性的场景。
  2. 适用于需要实时持久化的场景:由于AOF文件是只追加文件,写操作会实时记录到文件中,确保数据的实时持久化。

数据类型

Redis 常见的数据类型主要有以下五种:

  • 字符串类型
  • 列表类型
  • Hash类型
  • 无序集合类型
  • 有序集合类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值