常用命令
-
keys [pattern] 获取键值
keys * 获取所有的键值 keys na* 获取na开头的键
-
dbsize : 获取键的个数
-
del: 删除键值对
-
exists key :判断键值存不存在 存在返回1 不存在返回0
-
expire: 设置键值的过期时间
-
type : 获取键值对的数据类型
-
ttl key : 获取键值对的剩余过期时间
下表是这几个函数的时间复杂度
命令 | 时间复杂度 |
---|---|
keys | O(N) |
dbsize | O(1) |
del | O(1) |
exists | O(1) |
expire | O(1) |
type | O(1) |
String类型的常用命令
-
getset
key newvalue : 给已存在的key设置新的value并返回旧的value -
append
key value : 将value追加到旧的value后面 -
strlen
key : 返回字符串的长度(注意中文) -
incrbyfloat
key value : 将指定的key值和value相加。注意对应key的value要为数值型,若为字符型将报错
-
getrange
key begin end: 获取key对应的value 输出从begin下标到end之间的数据
-
setrange
key index value : 将键值对应的下标index位的数据替换成value
-
mget
key1 key2 key3 :批量获取键值 -
与之对应的是 mset 一次设置多个键值对
-
set
key value: 不管key存在不存在 都设置 -
setnx
key value :key不存在才设置(需要注意的是这是一个原子性的命令 还有相似的命令msetnx
) -
set key value
xx
: key存在才设置 -
incr
key: 将制定的key自增 1 若key不存在,则自增后get(key)等于 1 -
decr
key: 作用和incr
相反
在记住以上命令的使用的时候,需要知道value的微观
实际数据类型为string和int和row三种。
当我们存入 字符串的时候,其数据类型是string类型,但当我们存入数值的时候,其真实的类型就变成了int类型。其实想想很简单,若真是字符型,那么incr命令还怎么自增呢?
查看真实数据类型的命令 :object encoding key
另外当字符型的数据长度大于44个字节(3.2版本之前为39)的时候,其真实的类型就变成了row类型。因为 embstr编码专门用来保存短字符串的,通过一次内存分配函数来分配一块连续的空间,一次包含redisObejct和sdshdr两个结构;而raw会调用两次内存分配
哈希类型
所有的哈希类型的数据都是以h开头
- hget key field : 获取hash key 对应的field的value
- hset key field value : 设置hash key 对应的field的value
- hdel key field : 删除hash key 对应的field的value
- hgetall key field : 获取所有的键值对(注意redis单线程,避免数据过多造成阻塞)
- string中的方法 hash中基本也有 使用方法类似
list数据类型
- linsert key before|after value newValue #在指定对应的元素前或者元素后插入数据
- lpush key value1 value2 value3 # 将元素从左到右插入列表(其实直观看就是从右向左)
- rpush key value1 value2 value3 # 将元素从右到左插入列表(其实直观看就是从左向右)
- lrange key start end # 获取从第start位开始end位结束的元素 当start为0 end为-1时表示 获取所有元素
- lpop key # 从列表左侧删除一个元素
- rpop key # 从列表右侧删除一个元素
- lrem key count value #根据count的值,从列表中删除所有value相同的项
- count >0 从左向右,删除最多count个value相同的值
- count < 0 从右向左,删除最多 |count| 个value相同的值
- count = 0 删除所有value相同的项
- ltrim key start end # 按照索引范围剪切列表集合
- lset key index newValue # 给指定索引设置新的值