当前位置: 首页 > news >正文

Redis高性能数据库讲解与实战指南

一、Redis数据库

Redis是一种高性能的开源内存数据库,采用C语言进行编写,支持多种数据结构并具备持久能力,广泛应用与高并发、低延迟的数据处理场景。

1.Redis核心特性

高性能内存存储:基于内存的高效存储机制,提供毫秒级读写能力,完美支撑高并发实时应用场景。

丰富数据结构支持:支持字符串、哈希、列表、集合、有序集合等多样化数据结构,灵活适配各类业务场景需求。

可靠数据持久化:采用RDB快照与AOF日志双重持久化机制,全方位保障数据安全性与可靠性。

弹性高可用方案:支持主从复制、哨兵监控和集群分片等多种部署模式,轻松构建高可用分布式系统。

2.应用场景

缓存优化:通过缓存热点数据,有效降低数据库查询压力。

实时计算:支持计数器实现和榜单排名功能。

分布式锁:基于Redis的setnx和expire命令实现,确保多进程并发操作的安全性。

异步处理:借助发布订阅模式构建高效的消息队列系统。

3.Redis缓存三大问题
(1)Redis缓存雪崩

在特定时间段内,若Redis缓存中的大量数据同时失效或过期,会导致大量请求直接涌向数据库,造成数据库负载激增,进而引发Redis服务性能骤降甚至系统崩溃。

(2)Redis缓存击穿

当热点缓存数据在短时间内失效或缺失时,若恰逢大量请求涌入,这些请求会直接压向数据库,导致数据库负载激增、性能骤降甚至崩溃。

(3)Redis缓存穿透

当某个数据在缓存和数据库中都不存在时,每次请求都会直接访问数据库,导致缓存穿透现象。这种情况会显著增加数据库负载,造成性能急剧下降,甚至引发系统崩溃。

4.常用命令

mset:同时存储多个变量

mset 变量一 值 变量二 值 ...

mget:同时查看多个变量值

mget 变量一 变量二...

keys:查看变量,*匹配所有变量名,?匹配一个字符

keys *       #查看所有变量名
keys ?      #查看变量名一个字符
keys a*      #a开头的变量名
keys 变量名   #查看指定变量是否存在

select:切换库

select 库编号       #默认库编号0-15

move:移动变量到其他库里

move 变量 库编号

exists:检查变量是否存储,返回值1变量存储,返回0变量不存在

exists 变量名

expire:设置变量的过期时间,不设置变量永久不过期

ttl 变量名      #查看变量过期时间,-1表示永不过期,-2标识已经过期被删除
expire 变量名 数值      #设置变量多少秒过期

type:检查变量存储数据的类型

type 变量名

del:删除内存里的变量

del 变量一 变量二 ...

flushdb:删除当前所在库的所有数据

flushdb

Flushall:清空内存

flushall

二、部署Redis集群流程

1.准备集群环境

配置集群的主机服务器进行文件配置

#vim /etc/redis.conf     修改主配置文件
92     port  6379   //端口号
69 bind   ip  //IP地址
838 cluster-enabled  yes                                //启用集群功能  
846 cluster-config-file  nodes-6379.conf         //存储集群信息文件
852 cluster-node-timeout  5000  //集群中主机通信超时时间

重启服务

#systemctl restart redis
2.创建集群

任何一台redis服务器都可执行

#redis-cli --cluster create 主机1ip:6379 主机2ip:6379 .... --cluster-replicas 1

--cluster-replicas 1 参数为每个主节点配置1个从节点,这是实现Redis高可用的最低要求。在集群创建过程中,系统会自动分配主从角色:默认将主机列表中的前N台设为主节点,其余作为从节点。同时,系统会自动为主节点分配哈希槽,以此实现数据的分布式存储机制。

3.测试集群
(1)测试数据自动备份

Master服务器创建数据,使用Slave服务器查看数据

#redis-cli -c -h slave服务器ip -p 6379
keys *
(2)测试服务高可用

当主服务器(Master)下线时,对应的从服务器(Slave)将自动升级为主节点,接管原主节点的哈希槽分配,从而确保Redis服务的高可用性。

#systemctl stop redis       #master服务器关闭redis服务
#redis-cli --cluster info 服务器ip:6379      #选择一台服务器查看集群信息

三、Redis主从

Redis主从复制机制通过将主节点数据自动同步到一个或多个从节点,实现了数据备份与读写分离。这种架构设计不仅提升了Redis服务的可用性和可靠性,还具备出色的扩展能力。主从结构有一主一从、一主多从、主从从。

1.配置Redis主从
(1)所有服务器都要修改配置文件
#vim /etc/redis.conf
69 bind 192.168.88.61  设置服务使用的Ip地址
92 port 6379  使用默认端口即可

连接服务查看角色

#redis-cli -h 服务器ip -p 6379
info replication      默认为主服务器
(2)配置Slave服务器

连接服务,指定主服务器ip和端口号并永久保存配置

#redis-cli -h 服务器ip -p 6379
replicaof Master服务器ip 6379      绑定主服务器
config rewrite       永久保存配置
(3)恢复为独立的数据库服务器
replicaof no one

四、哨兵服务

Redis哨兵(Sentinel)是Redis集群的高可用性解决方案,它通过实时监控主从节点状态来确保服务稳定性。哨兵会持续发送心跳检测来确认节点存活状态。一旦检测到主节点故障,哨兵系统会立即启动故障转移流程:首先通过内部投票机制选出新的主节点,然后自动更新所有从节点的配置信息。这套机制完全自动化运行,最大程度地保证了服务不中断。

1.搭建哨兵服务器

安装哨兵服务,修改配置文件,然后启动服务器

#rpm -y install redis
#vim /etc/redis-sentinel.conf
15 bind ip  指定哨兵服务使用ip地址
21 port 26379  指定哨兵服务监听端口
26 daemonize yes  服务守护进程方式运行服务
84 sentinel monitor 名称 主服务器ip地址 6379 票数   
#systemctl  start redis-sentinel 启动哨兵服务

五、持久化

1.RDB

数据持久化的默认方式采用定时机制,按预设间隔生成内存数据的二进制快照文件,实现全量备份以保存特定时刻的数据状态。该方案尤其适合数据量大但需要快速备份恢复的场景,备份和恢复过程均不会阻塞Redis服务的正常运行,是进行全量备份的理想选择。

备份数据:

#cp /数据库目录/dump.rdb /备份目录/dump.rdb

恢复数据:

#cp /备份目录/dump.rdb /数据库目录
2.AOF

将写操作命令记录到日志文件中,通过重放日志命令实现数据恢复。这种方式在最大程度上确保了数据的完整性和持久性。AOF采用追加方式更新数据,即使频繁执行写入操作也不会影响Redis的性能,同时兼具良好的可读性和易操作性。适用于增量备份。

(1)启用AOF
config set appendonly yes      启用
config rewrite       保存到配置文件
(2)备份AOF文件
cp /var/lib/redis/appendonly.aof /opt/    拷贝到/opt/目录
(3)恢复数据
cp /opt/appendonly.aof /var/lib/redis/

六、数据类型

1.字符类型

存储变量时,设置变量有效期

set 变量名 数据 ex 数值    变量多少秒过期
set 变量名 数据 px 数值    变量多少毫秒过期

incr:递增数字,当操作键不存在时默认键值为0

incr 变量名

incrby:增加指定整数

incrby 变量名 整数    

decr:递减数字,每次-1

decr 变量名

decrby:递减指定整数

decrby 变量名 整数

append:字符串追加

append 变量名 "字符串"

strlen:获取字符串长度

strlen 变量名

getrange:获取变量部分数据

getrange 变量名 数1 数2      数为正,则输出从数1字符到数2字符的字符数为负,则输出倒数|数1|到|数2|的字符
2.列表类型

lpush:向列表左边增加元素,返回值表示增加元素后列表的长度。

lpush 变量名 元素1 元素2 ...

lrange:取出列表中所有元素

lrange 变量名 0 -1

llen:统计元素个数

llen 变量名

lindex:通过下标输出单个元素 第1个元素下标用0表示 ,最后一个元素下标用-1表示

lindex 变量名 下标

lset修改元素

lset 变量名 下标 修改后元素

删除元素

lpop 变量名    删除头部元素
rpop 变量名    删除尾部元素

rpush:尾部追加元素

rpush 变量名 元素 追加元素

lindex:插入元素

linsert 变量名 before 元素 插入元素       在指定元素前插入元素
linsert 变量名 after 元素 插入元素        在指定元素后插入元素
3.散列类型

赋值与取值

hset 变量名 key value     创建变量
hget 变量名 key           查看key列的值

设置多个字段

hmset 变量名 key1 value1 key2 value2
hmget 变量名 key1 key2      查看key1,key2的值

获取所有列名及对应的值

hgetall 变量名

删除列

hdel 变量名 key

只获取列名

hkeys 变量名

只获取值

hvals 变量名

获取列数量

hlen 变量名
4.集合类型
(1)无序集合

无序集合中的每个元素都是不同的,且没有顺序

创建/追加/删除

sadd 变量名 元素1 元素2 ...     自动删除重复的值

查看成员

smembers 变量名

判断元素是否在集合中

sismember 变量名 元素     返回0表示不存在,返回1表示存在

输出成员个数

scard 变量名

合并两个集合元素,重复的元素只显示一次

sunion 变量1 变量2

输出两个集合中相同的元素

sinter 变量1 变量2

比较两个集合元素的不同

sdiff 变量1 变量2

随机取出变量元素,允许重复

srandmember 变量名 -数值

随机弹出一个元素

spop 变量名 
(2)有序集合

创建变量

zadd 变量名 数值1 元素1 数值2 元素2 ... 

统计元素个数

zcard 变量名
zrange 变量名 0 -1 withscores  输出成员名称及对应的值

获取某个元素的值

zscore 变量名 元素

获取指定范围的元素

zrangebyscore 变量名 数1 数2 withscores

增加某个元素的值

zincrby 变量名 数值 元素

获取指定数值范围内元素的个数

zcount 变量名 数值1 数值2

删除元素

zrem 变量名 元素
http://www.dtcms.com/a/355052.html

相关文章:

  • 文件系统挂载详细分析(《图解Linux内核》虚拟文件系统篇笔记三)
  • [机械结构设计-48]:机械工程师的岗位要求
  • ArkUI框架之promptAction弹窗
  • 安卓开发---BLE通信
  • 基于STM32单片机的车牌识别设计
  • clcd土地利用数据分类
  • Tree Shaking原理
  • SOME/IP-SD事件组订阅
  • 昆泰芯离轴应用技术与产业链协同助力机器人关节产业实现技术突破
  • TDengine 数据订阅支持 MQTT 协议用户手册
  • 本地消息表实现分布式事务保证最终一致性
  • Java框架搭建实用开发
  • DPIN亮相DePIN Expo 2025,定义“DePIN 2.0”企业级应用新范式
  • Linux中Java后端调用外部进程 未处理后台输出流 导致io阻塞问题解决方法
  • K8S架构与组件完全解析
  • Baselight 携手 Walrus 激活链上数据价值,打造无需许可的数据中
  • LeetCode热题100--98. 验证二叉搜索树--中等
  • QT 概述(背景介绍、搭建开发环境、Qt Creator、程序、项目文件解析、编程注意事项)
  • Fortran快速排序算法实现与优化
  • Web安全:深入理解User-Agent报头注入与防御
  • 从CTFshow-pwn入门-pwn43理解栈溢出到底跳转call还是plt
  • 网络安全测试(一)Kali Linux
  • PyTorch实战(3)——PyTorch vs. TensorFlow详解
  • 网络安全设备监控指标
  • jvm锁优化
  • MiniCPM-V 4.5 vs MiniCPM-V 2.6 深度对比分析
  • claude code helper for vscode
  • MTK Linux DRM分析(十七)- MTK KMS实现mtk_drm_fb.c
  • HTML贪吃蛇游戏实现
  • SQLSERVER触发器