2. API的理解和使用
本章内容介绍三个内容,分别为预备知识;5种的数据结构以及键管理、数据库管理。
2.1 预备知识
2.1.1 几个简单的全局命令
命令 | 用途 | 备注 |
---|---|---|
keys * | 查看所有键 | 生产环境下慎用,容易引起阻塞 |
dbsize | 键总数 | 返回的而是一个整数 |
exists key | 检查键是否存在 | 存在返回1,不存在返回0 |
del key [key ...] | 删除键 | del是通用命令,可以删除任意的数据结构的数据 |
expire key seconds | 键过期 | 可以用ttl命令返回剩余过期时间 |
type key | 键的数据结构类型 | 返回键的数据结构类型 |
2.1.2 数据结构和内部编码
type命令实际返回的就是当前键的数据结构类型,它们分别是:
string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集
合),但这些只是Redis对外的数据结构。实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现,这样Redis会在合适的场景选择合适的内部编码。
如果要做深层次的Redis性能调优的话,Redis数据结构的内部编码需要深入研究,可能一个轻微的调整会带来巨大的内存收益。
查看内部编码的命令为 object encoding,这里我就不把书上的内容写下来了,只要知道不同数据长度,Redis会选择不同的编码来实现数据结构,下图是书本的内部编码图。
Redis数据结构和内部编码
2.1.3 单线程架构
Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务,至于为什么单线程的效率还可以这么高,可以看我转载的一遍关于epoll的文章(点我).
Redis客户端和服务端的通信模型,如下图所示:
通常我们说的单线程模型是指第2步的执行命令那里,只有一个线程,不会存在多个命令同时被执行的情况,简化了很多开发上并发性的难题。但是这也注定了Redis不适合处理命令执行时间长的场景,这样会对其他的命令造成阻塞,这也是上面说的慎用keys *的原因。
网友评论