redis相关知识记录

redis基本数据类型

Redis⽀持五种主要数据结构:字符串(Strings)、列表(Lists)、哈希表(Hashes)、集合(Sets)和有序集合(Sorted Sets)。这些数据结构为开发者提供了灵活的数据操作⽅式,满⾜了不同场景下的数据存储需求。
• 字符串(Strings):最基本的数据类型,可以包含任何数据,如数字、字符串、⼆进制数据等。在Redis中,字符串是⼆进制安全的,这意味着它们可以有任何⻓度,并且不会因为包含空字符⽽被截断。
• 列表(Lists):简单的字符串列表,按照插⼊顺序排序。你可以添加⼀个元素到头部(左边)或者尾部(右边)。
• 哈希表(Hashes):是键值对的集合,是字符串类型的字段和值的映射表。适合存储对象。
• 集合(Sets):是字符串类型的⽆序集合。它是通过哈希表实现的,可以做到添加、删除、查找的时间复杂度都是O(1)。
• 有序集合(Sorted Sets):和Sets相似,但每个字符串元素都会关联⼀个浮点数类型的分数。元素的分数⽤来排序,如果两个成员有相同的分数,那么他们的排名按照字典序计算

Redis的持久化机制

RDB(Redis DataBase) :存的是数据的2进制文件,恢复快。备份间隔最少也要5分钟,也就是最少丢失5分钟数据。

AOF(Append Of File) :存的是指令文件,恢复慢(需要一条一条执行指令),最多丢失一秒的数据。文件体积较大、性能较差

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

下图是生成的对应的文件。

缓存雪崩

缓存中的大量key同时失效,导致大量的流量请求到达db中,导致db负载压力过大

解决方式:让key不在同一时间失效,分散开来

缓存穿透

大量的请求同时访问一个根本不存在的key,导致大量流量走到db。

解决方式:设置为null或者使用布隆过滤器判断是否存在该key

缓存击穿

大量的请求同时访问一个过期的key,导致大量流量走到db。

解决方法:加分布式锁

当redis作为db的热点数据时先写DB?还是先写redis?

情景一:先写redis或先写db,不适用场景为当我们项目中有大量的写流量的时候

情景二:先删redis或先删db,不适用的场景为当redis中的数据没有过期时间的时候

情景三:延迟双删,不使用的场景为像秒杀系统这种频繁去修改数据和要求数据强一致的场景

情景四:异步同步,根据mysql的binglog发送消息,在消费消息的时候更新redis,不适用的场景为redis没有过过期时间

分布式锁

为甚要用分布式锁?

普通的锁只能锁单台机器,无法解决在多台机器对于共享资源的并发问题。

如何建立一个分布式锁?

setnx,并设置过期时间,看门狗自动续约。

redis架构

集群模式

新增节点:一致性hash

数据分布不均匀:虚拟节点

主从模式

全量复制:

相关推荐
虹科网络安全9 小时前
Redis Radar:在统一视图中掌握 Redis 部署、健康与容量
经验分享·redis·艾体宝·艾体宝it·艾体宝redis
大大大大晴天10 小时前
每天认识一个组件:Redis
redis
虹科网络安全20 小时前
Search on Flex:用分层存储承载更大规模的 Redis 搜索索引
经验分享·redis·艾体宝·艾体宝it
青瓦梦滋21 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
Joy T1 天前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
IT规划师1 天前
Redis 数据类型全解 - Stream 深度:Pending 回收、重试死信与消息队列选型(十一)
redis·.net
虹科网络安全1 天前
RDI 多数据源管道:把分散的数据汇入统一 Redis 数据层
经验分享·redis·艾体宝·艾体宝it·艾体宝redis
我不会起名字3221 天前
Redis 从 0 到 1(三十七·收官):36 篇浓缩成 1 张知识地图 + 50 项生产 Checklist
redis·go·知识体系·checklist·收官