Redis有5种数据结构,它们是键值对中的值。
预备
全局命令
#查看所有键,时间复杂读O(n),线上环境禁止使用
keys *
#键总数,不会遍历所有键,直接获取redis内置的键总数变量
dbsize
#检查键是否存在
exists key
#删除键
del key [key ...]
#键过期
expire key seconds
#查看键过期时间:返回值大于0为剩余时间;-1没有设置过期时间;-2键不存在
ttl key
#键的类型
type key
#查看内部编码
object encoding key
单线程架构
单线程模型
- 每次客户端调用经历如下过程
- 发送命令
- 执行命令
- 返回结果
- 执行命令,一条命令令从客户端达到服务端不会立刻被执行,所有命令都会进入一个队列中,然后逐个被执行
- Redis使用了I/O多路复用技术来解决I/O的问题
为什么单线程还能这么快?为什么Redis使用单线程模型会达到每秒万级别的处理能力呢
- 第一,纯内存访问,内存响应时间为100纳秒
- 第二,非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上 Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不 在网络I/O上浪费过多的时间
- 第三,单线程避免了线程切换和竞态产生的消耗
单线程存在那些弊端?
对于每个命令的执行时间是有要求的。如果 某个命令执行过长,会造成其他命令的阻塞,对于Redis这种高性能的服务 来说是致命的,所以Redis是面向快速执行场景的数据库