1.1 盛赞 Redis
NoSQL 数据库
值:
- string
- hash
- list
- set
- zset
- bitmaps
- hyperloglog
- geo
特点:
- 读写性能高
- 持久化
- 键过期
- 发布订阅
- 事务
- 流水线
- lua
1.2 Redis 特性
1. 速度快
官方给出的数字是读写性能 10万/s
快的原因:
- 数据在内存中
谷歌在2009年给出的各层级硬件执行速度:
- 使用 C 实现
- 单线程架构, 避免竞争
- 作者对 redis 的精打细磨
2. 基于键值对的数据结构服务器
k-v 在各语言中有类似的功能, 如 Go 中的 map
Redis 的全称是: REmote Dictionary Server.
5种数据结构:
- 字符串
- bitmaps
- hyperloglog
- 哈希
- 列表
- 集合
- 有序集合
LBS (Location Based Service, 基于位置服务):
- GEO (地理信息定位)
3. 丰富的功能
额外功能:
- 键过期, 实现缓存
- 发布订阅, 消息系统
- lua: 创造新的 redis 命令
- 简单事务, 一定程度的事务特性
- 流水线 (pipeline), 将一批命令一次性传到 redis, 减少网络开销
4. 简单稳定
- 源码少
早期2万行左右, 3.0版本由于添加了集群特性, 增至5万左右.
- 使用单线程模型
- 不需要依赖操作系统类库 (自己实现事件处理)
5. 客户端语言多
6. 持久化
两种持久化方式:
- RDB
- AOF
7. 主从复制
复制功能是分布式 Redis 的基础.
8. 高可用和分布式
从2.8版本提供了高可用实现 Redis Sentinel, 它能够保证 Redis 节点的故障发现和故障自动转移.
3.0版本正式提供了分布式实现 Redis Cluster, 提供了高可用, 读写和容量的扩展性.
1.3 Redis 使用场景
1.3.1 Redis 可以做什么
- 缓存
- 排行榜系统
- 列表
- 有序集合
- 计数器应用
- 性能好
- 社交网络
- 消息队列系统
- 业务解耦
- 非实时业务削峰
- 发布订阅
- 阻塞队列
1.3.2 Redis 不可以做什么
数据规模的角度:
- Redis 使用内存存储数据, 当数据规模很大时, 经济成本很高
数据冷热的角度:
- 存储冷数据是对内存的浪费
1.4 用好 Redis 的建议
1. 切勿当作黑盒使用, 开发与运维同样重要
- 如果不了解Redis的单线程模型,有些开发者会在有上千万个键的 Redis 上执行 keys* 操作
- 如果不了解持久化的相关原理, 会在一个写操作量很大的 Redis 上配置自动保存 RDB
- 从实际经验来看, 运维足够规模的 Redis 会对用好 Redis 更加有帮助
2. 阅读源码
- 加深对 Redis 的理解, 提高自身编码水平
- 对 Redis 做定制化
1.5 正确安装并启动 Redis
1.5.1 安装 Redis
1. 在 Linux 上安装 Redis
1.5.2 配置, 启动, 操作, 关闭 Redis
以 redis 开头的可执行文件称为 Redis Shell.
1. 启动 Redis
三种方法启动 Redis:
- 默认配置
$ redis-server
- 运行启动
$ redis-server --configKey1 configValue1 --configKey2 configValue2
指定端口启动:
$ redis-server --port 6380
- 配置文件启动
配置文件路径: /opt/redis/redis.conf
$ redis-server /opt/redis/redis.conf
重要配置:
2. Redis 命令行客户端
两种连接 Redis 服务器方式:
- 交互式
$ redis-cli -h {host} -p {port}
- 命令式
$ redis-cli -h ip {host} -p {port} {command}
“ip” 可能是写错了.
3. 停止 Redis 服务
$ redis-cli shutdown
$ redis-cli shutdown nosave|save # 是否生成持久化文件
1.6 Redis 重大版本
版本号第二位:
- 奇数: 非稳定
- 偶数: 稳定
- 奇数版本是下一个偶数版本的开发版
1. Redis 2.6
2. Redis 2.8
3. Redis 3.0
4. Redis 3.2
5. Redis 4.0
1.7 本章重点回顾
- Redis的8个特性: 速度快、基于键值对的数据结构服务器、功能丰富、简单稳定、客户端语言多、持久化、主从复制、支持高可用和分布式。
- Redis 并不是万金油, 有些场景不适合使用 Redis 进行开发。
- 开发运维结合以及阅读源码是用好 Redis 的重要方法。
- 生产环境中使用配置文件启动 Redis。
- 生产环境选取稳定版本的 Redis。
- Redis3.0 是重要的里程碑, 发布了 Redis 官方的分布式实现 Redis Cluster。