百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

redis

mhr18 2025-04-27 14:52 19 浏览 0 评论

Redis 常见数据结构以及使用场景?

String – : 标题、内容等 SET key value GET key、DEL key

list 链表,易于数据元素的插入和删除,但链表的随机访问困难

Hash 是 key,field,value (数组+链表),适合存储对象 系统中对象数据的存储。

Set 是一种无序集合,不可重复

应用场景: 需要存放的数据不能重复以及需要获取多个数据源交集和并集等场景

zset score 需要对数据根据某个权重进行排序的场景。 ZADD key score value1

为什么使用 Redis快的原因

1速度快,因为数据存在内存中

2 使用I/O多路复用模型 非阻塞IO

3采用单线程模型 省去线程切换、锁竞争的开销

4高效的数据结构

5合理的数据编码


Redis 持久化机制 RDB 和AOF 区别?

附加问题:都开启优先加载AOF

RDB ---快照持久化机制, 速度快 占用空间小加载快 存储慢,恢复快

  • 适合快速备份和恢复大量数据。

缺点 不实时:无法做到数据实时持久化,会丢失最近一次快照后的数据。

  • 适用于对数据实时性要求不高、恢复速度要求高的场景,如定期备份和数据恢复。
  • 适用于读多写少的场景,如缓存系统。

AOF以日志方式 将每个写操作记录到文件中,

优点

  • 数据安全性高:可以实时保存数据,减少数据丢失风险。
  • 可读性:AOF是文本格式,便于读取和修改。

缺点

  • 文件体积大 ,恢复速度较慢。 写入效率稍低

适用场景

  • 适用于对数据安全性要求高的场景,如在线交易、实时监控等。
  • 适用于写操作频繁且不易产生较多读操作的场景,如订单处理、实时数据收集等。

可以使用RDB进行定期备份,同时使用AOF来确保数据的实时性和安全性。


Redis 可以用来做什么?

1分布式锁 分布式环境下防止资源竞争 当key不存在的时候加锁,并设置过期时间

1)setnx命令加锁

set if not exists 我们会用到Redis的命令setnx,setnx的含义就是只有锁不存在的情况下才会设置成功。

2)设置锁的有效时间,防止死锁 expire

2缓存对于查询频繁的数据使用缓存

3排行榜

4分布式计数器

5存取token进一步管理用户

6限流

7延迟阻塞队列zest redission

如何保存** Redis数据与DB一致?

o 方案 1:同步双写,即更新完 DB 后立即同步更新 redis

o 方案 2:异步监听,即通过 Canal 监听 MySQL 变化的表,同步更新数据到 Redis

o 方案 3:MQ 异步, 即更新完 数据库 后生产消息到 消息队列,消息队列消费者更新数据到Redi

延时双删:在更新MySQL数据前后,删除Redis中的缓存数据,从而减少数据不一致的窗口期。 Binlog订阅:实时订阅MySQL的Binlog日志,自动更新Redis,确保数据的近实时一致性。

Redis的缓存雪崩、缓存穿透、缓存击穿

雪崩 大量频繁请求 不存在的数据 布隆过滤器 优化过期时间、异步构建缓存

设置过期标识更新缓存:设置一个缓存过期的提前量,当这个提前量过期时会触发另外的线程

去更新实际的key的缓存

进行实时监控:当发现redis命中率急速降低时,可以排查访问对象,设置访问黑名单

击穿 数据库中有,如果同一时间访问量过大会使数据崩掉

1.预先设置热点数据,在redis高峰访问之前,把一些热点数据提前存入到redis里,延长过期时间。

2.实时调整:监控redis,实时调整热门数据的过期时常。

加分布式锁,一条数据访问数据库

缓存穿透:缓存和数据库中都没有的数据,可用户还是源源不断的发起请求,导致每次请求都会到数据库,从而压垮数据库。

不存在数据设置短过期时间

对于某个查询为空的数据,可以将这个空结果进行Redis缓存,但是设置很短的过期时间,比如30s,可以根据实际业务设定。注意一定不要影响正常业务

业务层校验

  用户发过来的请求,根据请求参数进行校验,对于明显错误的参数,直接拦截返回。

  比如,请求参数为主键自增id,那么对于请求小于0的id参数,明显不符合,可以直接返回错误请求。

缓存降级是指 缓存过期、缓存击穿、缓存雪崩或缓存服务器挂掉的情况下,不去访问数据库,直接返回默认数据或访问服务的内存数据。

有些服务偶尔因为网络抖动或者服务正在上线而超时,可以自动降级

有些服务在一段时间内成功率有波动(如在 95~100%之间),可以自动降级或人工降级,并发送告警;

比如可用率低于 90%,或者数据库连接池被打爆了,或者访问量突然猛增到系统能承受的最大阀值,此时可以根据情况自动降级或者人工降级;

比如因为特殊原因数据错误了,此时需要紧急人工降级

布隆过滤器原理

作用 过滤非法key 布隆过滤器 底层用的是位数组,不仅节省空间,性能也嘎嘎猛,而且占用内存不会随着使用变大

Redis三种集群模式:主从模式、哨兵模式和Cluster模式

特性/配置

Redis 主从复制

Redis 哨兵

Redis 集群

主要目的

数据备份与读写分离

高可用性和故障自动切换

高并发和数据分散处理

架构

一个主节点和多个从节点

监控主从结构并自动切换

多个主节点,数据分片

数据复制

主节点到从节点

监控并管理主从复制

每个主节点管理自己的数据集

故障转移机制

手动或哨兵自动切换

自动故障转移

自动处理节点故障

可伸缩性

有限,依赖主节点

为主从结构增加高可用性

高,因为数据分布式处理

使用场景

数据备份和读扩展

关键应用的高可用性

大规模应用的高性能需求

设置复杂度

相对简单

中等,需配置哨兵

复杂,需规划数据分区

哨兵模式 哨兵 用于监控主节点的状态,当主节点宕机之后会进行投票重新选出主节点。

集群采用了多主多从,按照一定的规则进行分片,将数据分别存储,一定程度上解决了哨兵模式下单机存储有限的问题。

redis集群模式(主从、哨兵、cluster)及数据同步过程

数据同步过程分全量同步和增量同步两部分。

主从模式:部署多台redis,读写分离,主节点负责写,从节点负责读。 l

哨兵模式:基于主从模式,读写分离,加入了sentinel哨兵对master及master下面的slave进行监控,有故障是可自动替换master及故障恢复,

集群模式:Redis分布式存储,对key经过hash算法后存储到不同的master中,来解决扩容问题


哨兵和集群的区别

Redis哨兵模式采用主从架构,Redis集群采用分片架构

哨兵有一个主节点和多个从节点,主节责写,从节点负

Redis哨兵模式通过哨兵节点实现故障转移, 一旦发现了主节点宕机,新的主节点可以很快地被选举出来,保证高可用性;


Redis集群 要考虑数据的分布、节点的负载均衡和故障转移等问题。

Redis哨兵模式适用于简单的主从复制场景,对于少量的节点和数据负载是足够的;

而Redis集群适用于大规模的数据存储和高并发访问,可以实现数据的分片和水平扩展。

Redis集群cluster:增加删除(伸缩)节点操作步骤

1.增加master节点

1.命令:old_ip只要是集群中的任意一个ip即可

redis-cli -a [password] --cluster add-node [new_ip] [old_ip]

2.例子

redis-cli -a 123456 --cluster add-node 127.0.0.1:7004 127.0.0.1:7001

添加分配散列槽 redis-cli -a [password] --cluster reshard [new_ip]

2.增加slave节点

1,命令

redis-cli -a [password] --cluster add-node [old_host:old_port] -a [password] --cluster-slave [old_id]

2.最快捷的方式(当然你首先要查看主节点的id)

redis-cli -a 123456 --cluster add-node 127.0.0.1:7004 127.0.0.1:7001 -a 123456 --cluster-slave 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818

3.删除节点 redis-cli -a password -p 7004 cluster nodes redis-cli -a password --cluster reshard host:prot

相关推荐

【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...

Pure Storage推出统一数据管理云平台及新闪存阵列

PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...

对Java学习的10条建议(对java课程的建议)

不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...

SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!

官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...

JDK21有没有什么稳定、简单又强势的特性?

佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...

「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了

在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...

Java面试题及答案最全总结(2025版)

大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...

数据库日常运维工作内容(数据库日常运维 工作内容)

#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...

分布式之系统底层原理(上)(底层分布式技术)

作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...

oracle 死锁了怎么办?kill 进程 直接上干货

1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

取消回复欢迎 发表评论: