一、常用命令

1. 设置值

set key value [ex seconds]  [px milliseconds] [nx|xx]

set hello world 

#返回OK表示设置成功
参数:
  • [ex seconds] 为键设置秒级过期时间
  • [px milliseconds] 为键设置毫秒级过期时间
  • nx 键必须不存在,才可以设置成功,用于添加
  • xx 与nx相反,键必须存在,才可以设置成功,用于更新

除了set命令,redis还提供了:

  • setex key seconds value
  • setnx key value 该条命令可以实现分布式锁

2. 获取值

get key 
#如果获取的键不存在,则返回nil(空)

3. 批量设置值

mset key value [key value ...]
例如:
mset a 1 b 2 c 3 d 4

4. 批量获取值

mget key [key ...]

mget a b c d 
结果是按照传入键的顺序返回,如果有的键不存在,则返回nil

5.计数

incr key

incr命令用于对值做自增操作,返回结果分为三种情况:
1.值不是整数,返回错误
2.值是整数,返回自增后的结果
3.键不存在,按照值为0自增,返回结果为1

除了incr命令,redis提供了:
1.decr 自减
2.incrby 自增指定数字
3.decrby 自减指定数字
4.incrbyfloat 自增浮点数

二、不常用命令

1. 追加值

append key value 
可以向字符串尾部追加值

2. 字符串长度

strlen key
中文占用三个字节 strlen "你好"  会返回6

3. 设置并返回原值

getset key value

4.设置指定位置的字符

setrange key offset value

set hello world

setrange hello 0 a

那么world会变成aorld

4.获取部分字符串

getrange key start end
start 和 end 分别是开始和结束的偏移量,偏移量从0开始计算

二、命令的时间复杂度

命令 时间复杂度
set key value O(1)
get key O(1)
del key [key …] O(k) k是键的个数
mset key value [key value …] O(k) k是键的个数
mget key [key …] O(k) k是键的个数
incr O(1)
decr O(1)
incrby key increment O(1)
decrby key decrement O(1)
incrbyfloat key increment O(1)
append key value O(1)
strlen key O(1)
setrange key offset value O(1)
getrange key start end O(n) ,n是字符串长度,由于获取字符串非常快,所以如果字符串不是很长,可以视同为O(1)

三、内部编码

字符串类型的内部编码有三种,redis会根据当前值的类型和长度决定使用哪种内部编码实现:

  • int 8个字节的长整型
  • embstr <=39个字节的字符串
  • raw >39个字节的字符串

四、典型使用场景

1. 缓存功能

2. 计数

3. 共享Session

4. 限速