《Redis开发与运维》- API的使用-1-全局命令

Posted zczpeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Redis开发与运维》- API的使用-1-全局命令相关的知识,希望对你有一定的参考价值。

Redis API的使用

1. 全局命令

1.1查看所有键:keys *

1.2键总数:dbsize
【dbsize】命令在计算总数时不会遍历所有的键,而是直接获取Redis内置的键总数,所以dbsize的时间复杂度是O(1),而keys命令会遍历所有键,所以时间复杂度是O(n)。

1.3检查键是否存在 :exists key
【存在返回1,不存在返回0】

1.4删除键 :del key [key …]
【支持删除多个键】

1.5设置键过期:expire key seconds
【超过过期时间,会自动删除】
ttl命令会返回键的剩余过期时间,有三种返回值:
大于等于0的整数,键剩余的过期时间。
-1:键没设置过期时间。
-2:键不存在

1.6键的数据结构类型:type key
【如果键不存在,返回none】

2.数据结构和内部编码

type命令实际返回的是当前键的数据结构类型,分别是:
string,hash,list,set,zset 这五种数据结构,但是实际每种数据结构都有自己底层的内部编码实现,而且是多实现,Redis会在合适的场景选择合适的内部编码。如图:

可以通过 >object encoding key 命令查询内部编码
Redis这样设计有两个好处:
1:可以改进内部编码,而对外的数据结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数据结构和命令。如:Redis3.2版本提供了quicklist,结合了ziplist和linkedlist两者的有事,为列表类型提供了一种更为优秀的内部编码实现,而对外部用户来说基本感觉不到。
2:多种内部编码实现可以在不同场景下发挥各自的有事,例如ziplist比较节省内存,但是在列表元素比较多的情况下,性能会下降,这时候Redis会根据配置选项将列表类型的内部实现转换为linkedlist。

3.单线程架构

为什么单线程还能这么快?原因有三点:
1:纯内存访问。
2:非堵塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上redis自身的事件处理模型将epoll中的连接,读写,关闭都转化为事件,不在网络IO上浪费时间。
3:单线程避免了线程切换和竞态产生的消耗。

以上是关于《Redis开发与运维》- API的使用-1-全局命令的主要内容,如果未能解决你的问题,请参考以下文章

《Redis开发与运维》- API的使用-3-键管理

《Redis开发与运维》- API的使用-3-键管理

《Redis开发与运维》- API的使用-2-五种常用数据结构

《Redis开发与运维》- API的使用-2-五种常用数据结构

Redis 开发与运维客户端

Redis 开发与运维Redis 的噩梦:阻塞