1.1 盛赞 Redis

NoSQL 数据库

值:

  • string
  • hash
  • list
  • set
  • zset
  • bitmaps
  • hyperloglog
  • geo

特点:

  • 读写性能高
  • 持久化
  • 键过期
  • 发布订阅
  • 事务
  • 流水线
  • lua

1.2 Redis 特性

1. 速度快

官方给出的数字是读写性能 10万/s

快的原因:

  • 数据在内存中

谷歌在2009年给出的各层级硬件执行速度:

image.png

  • 使用 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

image.png

7. 主从复制

复制功能是分布式 Redis 的基础.

image.png

8. 高可用和分布式

从2.8版本提供了高可用实现 Redis Sentinel, 它能够保证 Redis 节点的故障发现和故障自动转移.

3.0版本正式提供了分布式实现 Redis Cluster, 提供了高可用, 读写和容量的扩展性.

1.3 Redis 使用场景

1.3.1 Redis 可以做什么

  1. 缓存
  2. 排行榜系统
    1. 列表
    2. 有序集合
  3. 计数器应用
    1. 性能好
  4. 社交网络
  5. 消息队列系统
    1. 业务解耦
    2. 非实时业务削峰
    3. 发布订阅
    4. 阻塞队列

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

image.png

1.5.2 配置, 启动, 操作, 关闭 Redis

以 redis 开头的可执行文件称为 Redis Shell.

image.png

1. 启动 Redis

三种方法启动 Redis:

  1. 默认配置
  1. $ redis-server
  1. 运行启动
  1. $ redis-server --configKey1 configValue1 --configKey2 configValue2

指定端口启动:

  1. $ redis-server --port 6380
  1. 配置文件启动

配置文件路径: /opt/redis/redis.conf

  1. $ redis-server /opt/redis/redis.conf

重要配置:

image.png

2. Redis 命令行客户端

两种连接 Redis 服务器方式:

  1. 交互式
  1. $ redis-cli -h {host} -p {port}

image.png

  1. 命令式
  1. $ redis-cli -h ip {host} -p {port} {command}

“ip” 可能是写错了.

image.png

3. 停止 Redis 服务

  1. $ redis-cli shutdown
  2. $ 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 本章重点回顾

  1. Redis的8个特性: 速度快、基于键值对的数据结构服务器、功能丰富、简单稳定、客户端语言多、持久化、主从复制、支持高可用和分布式。
  2. Redis 并不是万金油, 有些场景不适合使用 Redis 进行开发。
  3. 开发运维结合以及阅读源码是用好 Redis 的重要方法。
  4. 生产环境中使用配置文件启动 Redis。
  5. 生产环境选取稳定版本的 Redis。
  6. Redis3.0 是重要的里程碑, 发布了 Redis 官方的分布式实现 Redis Cluster。