通用的命令
- keys 遍历所有的key ,生产环境尽量不要使用,可以在从节点使用,或用scan 来查询
- dbszie 计算key的总数,可以在生产环境使用,时间复杂度O(1)
- exists key 检查key 是否存在
- del key 删除Key
- expire key seconds 设置过期时间
- ttl key 查看key的过期时间
- persist key 去掉key的过期时间
- type key 查看key 的类型
数据结构和内部编码
单线程为什么这么快
- redis单线程为什么这么快 纯内存操作
- 非阻塞式IO
- 避免线程切换和竞争消耗
注:由于redis 是单线程,一次只运行一条命令,因此尽量不要操作慢命令keys.flushall,flusdb,mutil/exec等命令,会阻塞线程,使主线程等待
String
命令原型 | 时间复杂度 | 命令描述 | 返回值 |
APPEND | O(1) | 如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾。如果该Key不存在,APPEND命令将会创建一个新的Key/Value。 | 追加后Value的长度。 |
DECR | O(1) | 将指定Key的Value原子性的递减1。如果该Key不存在,其初始值为0,在decr之后其值为-1。如果Value的值不能转换为整型值,如Hello,该操作将执行失败 并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。 |
递减后的Value值。 |
INCR | O(1) | 将指定Key的Value原子性的递增1。如果该Key不存在,其初始值为0,在incr之后其值为1。如果Value的值不能转换为整型值,如Hello,该操作将执行失败 并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。 |
递增后的Value值。 |
DECRBY | O(1) | 将指定Key的Value原子性的减少decrement。如果该Key不存在,其初始值为0,在decrby之后其值为-decrement。如果Value的值不能转换为整型值, 如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。 |
减少后的Value值。 |
INCRBY | O(1) | 将指定Key的Value原子性的增加increment。如果该Key不存在,其初始值为0,在incrby之后其值为increment。如果Value的值不能转换为整型值,如Hello, 该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。 |
增加后的Value值。 |
GET | O(1) | 获取指定Key的Value。如果与该Key关联的Value不是string类型,Redis将返回错误信息,因为GET命令只能用于获取string Value。 | 与该Key相关的Value,如果该Key不存在,返回nil。 |
SET | O(1) | 设定该Key持有指定的字符串Value,如果该Key已经存在,则覆盖其原有值。 | 总是返回"OK"。 |
GETSET | O(1) | 原子性的设置该Key为指定的Value,同时返回该Key的原有值。和GET命令一样,该命令也只能处理string Value,否则Redis将给出相关的错误信息。 | 返回该Key的原有值,如果该Key之前并不存在,则返回nil。 |
STRLEN | O(1) | 返回指定Key的字符值长度,如果Value不是string类型,Redis将执行失败并给出相关的错误信息。 | 返回指定Key的Value字符长度,如果该Key不存在,返回0。 |
SETEX | O(1) | 原子性完成两个操作,一是设置该Key的值为指定字符串,同时设置该Key在Redis服务器中的存活时间(秒数)。该命令主要应用于Redis被当做Cache服务器使用时。 | |
SETNX | O(1) | 如果指定的Key不存在,则设定该Key持有指定字符串Value,此时其效果等价于SET命令。相反,如果该Key已经存在,该命令将不做任何操作并返回。 | 1表示设置成功,否则0。 |
SETRANGE | O(1) | 替换指定Key的部分字符串值。从offset开始,替换的长度为该命令第三个参数value的字符串长度,其中如果offset的值大于该Key的原有值Value的字符串长度, Redis将会在Value的后面补齐(offset - strlen(value))数量的0x00& |