简介
Redis是一种基于键值对(key-value)的 NoSQL 数据库,与其他不同的是,Redis 中的值可以是由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理信息定位)等多种数据结构和算法组成,提供了快照、日志等存储,键过期、发布订阅、事务、流水线、Lua 脚本等附加功能。
Redis 特性
速度快
- 所有数据存放在内存中
- C 语言实现
- 单线程架构,避免竞争
- 源码质量高
基于键值对的数据结构服务器
- 全称:Remote Dictionary Server
- 5种数据结构:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)
- 字符串基础上演变出:Bitmaps(位图)、HyperLogLog(基数统计)
- 3.2加入:GEO(地理信息定位)
丰富的功能
- 过期键:实现缓存
- 发布订阅:消息系统
- Lua 脚本:创造新的命令
- 事务功能:一定程度上保证数据特性
- 流水线(Pipeline):减少网络开销
简单稳定
- 源码很少,开发、运维能够完全吃透
- 单线程模型,处理简单,开发简单
- 不依赖操作系统的类库
客户端语言多
- 提供简单的 TCP 通信协议
- 认可度高,覆盖主流语言
持久化
- RDB
- AOF
主从复制
- 多 Redis 副本
高可用和分布式
- Sentinel:故障发现、故障转移
- Redis Cluster:真正的分布式实现,高可用、读写和容量的扩展性
Redis 使用场景
Redis 可以做什么
- 缓存:减少数据源压力,灵活控制最大内存和淘汰策略
- 排行榜系统:基于列表和有序集合构建
- 计数器应用:播放数、浏览量等数据,保证实时性和高并发
- 社交网络:赞/踩、粉丝、共同好友、推送、下拉刷新等
- 消息队列:基于发布订阅和阻塞队列,实现业务解耦、削峰
Redis 不可以做什么
- 大数据量:成本高
- 冷数据使用:浪费