REDIS是什么意思:缓存数据库,提速工具
REDIS是什么意思,它是一款开源的内存型键值数据库,数据优先存放内存中,读写速度明显高于磁盘数据库,支持字符串、哈希、列表等多种数据结构,可用来做热点数据缓存、分布式锁、消息队列、计数器,适合并发访问量较高的Web后端、小程序服务;它不适合存储超大体量、极少访问且不能丢失的持久化业务数据,这类场景优先选用MySQL这类磁盘数据库。
REDIS核心存储机制
REDIS默认把数据放在内存,内存读写延迟通常在微秒级别,磁盘数据库读写一般是毫秒级别,这就是它提速的核心原因。内存断电会丢失数据,REDIS自带RDB和AOF两种持久化方案,RDB定时生成全量快照文件,AOF持续记录每一条写入命令,你可以搭配开启,降低数据丢失概率。持久化只是兜底方案,不要把REDIS当成主库承担核心业务数据存储。
键值是它最基础的组织形式,每一条数据由唯一key和value组成,value不再局限普通字符串。
REDIS支持的数据结构
- String:字符串,用于验证码、简单计数、配置信息
- Hash:哈希表,适合存放用户资料、商品基础属性
- List:列表,支持左右插入读取,可做简单消息队列
- Set:集合,自动去重,用于标签、好友交集计算
- SortedSet:有序集合,自带分数排序,用来做排行榜
REDIS常见部署模式对比
| 部署模式 | 适用场景 | 运维成本 | 扩容能力 |
|---|---|---|---|
| 单机 | 开发测试、低并发小项目 | 低 | 弱 |
| 主从复制 | 读写分离,提升读请求承载量 | 中等 | 一般 |
| 哨兵模式 | 需要自动故障转移,保证可用 | 中等 | 一般 |
| 集群 | 大数据量、高并发生产环境 | 较高 | 强 |
单机REDIS节点故障之后服务直接中断,生产环境很少直接单机上线,测试环境使用单机可以节省资源,快速验证缓存逻辑。
REDIS典型业务用法
热点数据缓存是使用最多的场景,商品详情页、首页推荐内容这类频繁查询、改动频率低的数据,第一次查询写入REDIS,后续请求直接读取缓存,减少MySQL查询压力。分布式锁依靠REDIS原子命令实现,多个服务实例争抢同一个资源时,只有拿到锁的实例执行任务,降低并发冲突。限流功能利用过期key计数,限制单个IP或者账号单位时间内请求次数,保护后端接口不被突增流量打垮。
控制过期时间。
REDIS使用的硬性边界
REDIS内存容量受服务器物理内存限制,单节点内存占满之后会触发淘汰策略,默认淘汰最近最少使用的key,你可以在配置文件修改淘汰规则。它不适合存储冷数据,冷数据长期占用内存,会挤占热点缓存空间,拖慢整体缓存命中率。它的事务支持比较弱,无法像关系型数据库一样提供强一致性事务,资金交易这类强一致性场景,不能只依靠REDIS完成校验。
缓存穿透、缓存击穿、缓存雪崩是开发时高频遇到的三类问题,缓存穿透指查询不存在的数据绕过缓存直达数据库,你可以缓存空值或者布隆过滤器拦截;缓存击穿是热点key过期瞬间大量请求打到数据库,给热点key设置永不过期或者互斥锁;缓存雪崩是大量key同一时间过期,批量请求压垮数据库,设置过期时间增加随机偏移量就能缓解。
选择REDIS,优先看并发读压力。
