redis
2025-06-28 20:34:28 0 举报
AI智能生成
是
作者其他创作
大纲/内容
Redis7 核心数据结构
string
key-value形式的数据结构
分布式锁的基石
hash
一组key-value形式的数据结构
可以用来存储对象
相比与string更节省空间和cpui,所以在大量小型string时,redis会优化为 hash
list
可以用于队列或者栈
提供了阻塞获取元素的方式,可以当做简易mq
set
元素不重复的集合
抽奖小程序
共同关注,共同好友
zset
基于分值的set集合
排行榜
bitmap
位图
长度很大的位数组
日活
签到列表
hyperloglog
用于统计一个集合内的不重复元素
精准度低于set但是效率高于set
统计用户访问记录统计网址的 uv,unique visitor
stream
redis 简化版的mq
geo
经纬度数据
提供了点位范围查找,简易计算距离等
备份方式
rdb
优点
按照一定时间间隔来备份数据
备份全量数据,恢复快
只要版本相同,数据可直接复制迁移
缺点
定时备份, 所以会丢失备份间隔内数据
执行时机
主动 save 或 bgsave
主从数据同步时
触发被动同步
aof
优点
以日志的方式记录每一次操作,备份性能高
相对于rdb丢失数据少
缺点
恢复慢
写操作频繁时,效率低于rdb
混合持久化
rdb+aof
高并发分布式锁
实现方式
set
expire
lua
看门狗
实现过程
多个线程并发来获取锁时,只有一个线程能够获取到锁
未获取到锁的线程,会阻塞自旋来等待获取锁(阻塞一定时间后尝试获取锁),同时监听一个channel,等待锁释放的唤醒
获取到锁的线程,会同时启动一个看门狗线程,监控当前锁是否还未释放,如果是,续期锁,如果没有,退出。
获取到锁的线程执行完毕后,会释放锁,同时推送锁释放的消息到Channel中,唤醒阻塞中的其他并发线程来获取锁
有什么功能
redisson
实现了公平锁,联锁,读写锁
在集群环境下, 可能出现集群切换导致的锁丢失
watchdog 可能被意外释放
RedLock
Redis官方推出的解决分布式环境下锁的问题
主要是通过半数统一的方式,只有半数以上集群节点都保留锁,才视为加锁成功
效率更低,安全性更高
依赖服务器间时钟一致性
质疑极端情况下仍有可能锁失效,官方表示肯定
一些问题
bigkey
避免lua脚本执行耗费时间的命令
写饥饿问题
自研lua脚本
zookeeper
公平锁
数据库与缓存双写不一致问题
并发量小---定期重建
业务能容忍就不管
不能容忍就加锁,分布式读写锁
阿里开源的canal可以监听binlog,但是复杂性上来了
三个经典缓存问题
缓存穿透
缓存空对象
布隆过滤器
缓存击穿
分布式锁控制并发重建
每次访问,续期
缓存雪崩
key的过期时间设置不一样
依赖限流熔断降级
线程模型
单服务端,多客户端
单线程处理读写操作,多线程处理其他任务,如bgsave,异步删除,集群同步等
redis 服务端 基于 epoll 实现的多路复用io线程模型,使用一个线程处理多个 socket 请求
部署方式
主从集群
操作简单,数据安全性也不错
主可以读写,从只能读
没有故障切换,主从切换时可能导致数据覆盖丢失
复制延时,信号衰减
哨兵集群
增加了主从哨兵集群来监控集群节点
主从监控,消息通知,故障切换
主节点故障切换时,也需要客户端进行手动切换,无法自动重定向
集群
多台主从集群合在一起形成的集群架构
集群节点会自己监控master是否可用
通过gossip协议来进行节点间通信
只有master才会进行主从选举
增加了槽位的概念,将数据尽量均匀分布到不同集群节点,从而突破了Redis单节点内存上线的限制,实现了负载均衡和横向扩容
解决了三个问题
客户端频繁切换master时导致的连接问题,集群缓存了集群结构,可以自动路由
突破了单节点的缓存上线
主动升级
如何保证执行多命令的原子性
事务
pipeline,相对原子,还是会插队
lua 脚本
热点脚本可以加载到服务端
function
redis7.0开始,允许程序员将一些功能声明为一个特定的函数,提前加载到服务端。同时,函数之间可以相互调用
gossip
meet、fail、ping、pong
去中心化,互相通信,最终统一
集群的加入不会影响节点的负载,稍微影响节点的通信效率
端口是:redis 端口 + 10000
redis7.0扩展
rediscloud
redis 官网提供的云服务
redis josn
redis 提供的 原生json数据结构
支持json对象及json对象属性修改
二进制存储
树形结构存储,快速访问子元素
search and query
提供全文搜索,二级索引和复杂查询能力
同时支持多字段过滤
效率高于 scan,可以任务是es 的平替
使用需要创建索引
redis bloom filter
cuckoo filter
概率性数据结构
兼顾布隆过滤器高空间利用率的快速查询能力的同时,增加了对元素的删除
三要素
指纹
桶
布谷鸟哈希函数
复杂性更高
0 条评论
下一页