Skip to the content.

初识 Redis

redis目前有十种数据类型, 常见的有五种: String, List, Hash, Set, Zset

单击查看 redis 所有命令

redis 存储数据都是用 key - value 的形式存储的, 而 redis 所说的数据类型都是在说 value, key 永远都是 String

redis 是典型的 C/S 设计程序, 客户端每敲一个命令, 都会进行一次网络传输. 所以, redis 有很多命令支持同时操作多个 key

redis 的单线程指的是: 所有的命令请求是在一个线程中进行处理的. 所以, 要尽量避免使用时间复杂度较高的命令, 如 KEYS *

redis 有很多时间复杂度为 O(N) 的命令, 但 N 有时指数据库中 key 的数量, 有时指命令后跟的参数 key 的数量, 后者常可视为 O(1)

redis 的 key 的删除策略有哪些?

redis 内部编码

redis 的每种数据类型都有自己的内部编码, 而且是多种, redis 会根据 value 的规模、类型自行挑选内部编码进行底层实现. 内部编码对于用户而言是透明的, 用户只能感知到上层的五种数据结构, 而无法感知到内部编码. 可通过 object encoding 命令查看 key 的内部编码.

String

内部编码

内部编码 解释
int 64 位的整数 (相当于 C++ 中的 long long)
embstr 压缩字符串, 适用于表示比较短的字符串
raw 普通字符串, 适用于表示比较长的字符串 (相当于 C++ 中的 std::string)

**NOTE: **浮点数不是以 int 的形式存储的, 而浮点数一般又不会太长, 所以浮点数一般是以 embstr 编码存储, 除非浮点数特别长用 raw 编码

应用场景

List

内部编码

内部编码 解释
ziplist 当 value 个数较少或长度较小时, 使用该编码
linklist 当上面条件不满足时, 使用该编码
quicklist Redis 3.2 引入, 替代了 ziplist 和 linklist. 它相当于 ziplist 和 linklist 的结合版

应用场景

Hash

内部编码

内部编码 解释
ziplist 当 value 个数较少或长度较小时, 使用该编码
hashtable 当上面条件不满足时, 使用该编码

应用场景

Set

内部编码

内部编码 解释
intset 当 value 是整数, 并且个数较少时, 使用该编码
hashtable 当上面条件不满足时, 使用该编码

应用场景

Zset

内部编码

内部编码 解释
ziplist 当 value 个数较少或长度较小时, 使用该编码
skiplist 当上面条件不满足时, 使用该编码

应用场景

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。