Redis开发与运维读书笔记之二——全局命令、数据结构和内部编码

作者: tcxurun 分类: 学习笔记 发布时间: 2020-03-08 12:32 ė 6 没有评论

2 API的理解和使用

Redis命令有上百个,理解Redis的一些机制,会发现这些命令有很强的通用性

有些数据结构和命令必须在特定场景使用,一旦使用不当可能对Redis本身或者应用造成致命伤害

全局命令:

keys * :查看所有键

dbsize: 键的总数

exists key: 检查键是否存在

del key:删除键,返回结果为成功删除键的个数

expire key seconds:键过期

ttl key:查看key的剩余过期时间,3种返回值,大于等于0的整数:键剩余的过期时间,-1:键没设置过期时间,-2,键不存在

type key:查看键的数据结构类型

数据结构和内部编码

type命令返回的就是键的数据结构类型,分别是string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)

每种数据结构内部都有多种内部编码实现,Redis会根据场景选择合适的内部编码:

stringrawintembstr

hashhashtableziplist

listlinkedlistziplist

sethashtableintset

zsetskiplistziplist

单线程架构

Redis使用单线程架构和I/O多路复用模型实现高性能的内存数据库服务。

Redis使用单线程来处理命令,所有命令到达服务端都会进入一个队列后被逐个执行。

Redis单线程模型可以达到每秒万级别的处理能力:

纯内存访问:内存响应时间大约为100纳秒

非阻塞I/O:使用epoll作为I/O多路复用技术的实现,加上Redis的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间

多线程避免了线程切换和竞态产生的消耗

单线程的好处:

可以简化数据结构和算法的实现

避免线程切换和竞态产生的消耗

单线程的问题

对每个命令的执行时间有要求,如果时间过长,会造成阻塞(这也是一般生产上禁止执行keys、hgetall等命令的原因)

本文出自天一直很蓝,转载时请注明出处及相应链接。

本文永久链接: http://www.tcxurun.cn/archives/547

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Ɣ回顶部