一、全局命令

  1. 查看当前所有key
1
keys *
  1. 判断某个key是否存在(存在返回1,不存在返回0)
1
exists key
  1. 查看key是什么类型(key不存在返回none)
1
type key
  1. 删除key(返回成功删除key的个数)
1
del key
  1. 键重命名
1
2
rename key newkey
renamenx key newkey 只有newkey不存在时才会被覆盖
  1. 为指定的key设置过期时间
1
2
3
4
expire key 10		单位秒,过期后会自动删除
expireat key 10 单位秒,10秒后过期
pexpire key 1000 单位毫秒,超过过期时间后会自动删除
pexpireat key 1000 单位毫秒,1000毫秒后过期
  1. 查看还有多少秒过期,-1表示永不过期,-2表示已过期
1
ttl key
  1. 随机返回一个key
1
randomkey
  1. 迁移键
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(1)move key db (不建议再生产环境中使用)把指定的键从源数据库移动到目标数据库
(2)dump+restore
dump key
Restore key ttl value
Dump+restore可以实现在不同的redis实例之间进行数据迁移的功能,整个迁移的过程分为两步;
1)在源redis上,dump命令会将键值序列化,格式采用的是RDB格式
2)在目标redis上,restore命令将上面序列化的值进行复原,其中ttl参数代表过期时间,ttl=0代表没有过期时间
=======例=======
源redis
127.0.0.1:6379> get redis
"world"
127.0.0.1:6379> dump redis
"\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8"
目标redis
127.0.0.1:6379> get redis
(nil)
127.0.0.1:6379> restore redis 0 "\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8"
OK
127.0.0.1:6379> get redis
"world"
(3)migrate
migrate实际上是把dump、restore、del 3个命令进行组合,从而简化了操作步骤
源redis中执行
127.0.0.1:6379> migrate xxx.xxx.xxx.xxx 6379 flower 0 1000 replace
(将键flower迁移至目标xxx.xxx.xxx.xxx:6379的库0中,超时时间为1000毫秒,replace表示目标库如果存在键flower,则覆盖)
  1. 遍历key
1
2
3
4
(1)全量遍历键
keys pattern
(2)渐进式遍历
scan 可以有效的解决keys命令存在的阻塞问题,scan每次的额复杂度是O(1)

二、数据库管理

  1. 切换数据库(默认16个,根据编号0-15区分不同数据库,进入redis后默认是0库)
1
select 3
  1. 查看当前数据库的key的数量
1
dbsize
  1. 清空当前数据库
1
flushdb
  1. 清空所有数据库
1
flushall

三、针对key的操作

  1. 设置值
1
2
3
4
5
6
set key value [ex]  [px]  [nx|xx]
ex为键值设置秒级过期时间
px为键值设置毫秒级过期时间
nx键必须不存在,才可以设置成功,用于添加
xx与nx相反,键必须存在,才可以设置成功,用于更新
setnx、setex 与上面的nx、ex作用相同
  1. 获取值(不存在则返回nil)
1
get key 
  1. 批量设置值
1
2
mset key value [key value ......]
mset a 1 b 2 c 3 d 4
  1. 批量获取值
1
mget key [key ......]
  1. 计数
1
2
3
4
5
6
incr key
decr key /inceby key increment /decrby key increment
返回结果分为3中情况:
值不是整数,返回错误;
值是整数,返回自增后的结果;
键不存在,按照值为0自增,返回结果为1。
  1. 追加值
1
append key value 可以向字符串尾部追加值
  1. 字符串长度
1
strlen key	每个汉字占用3个字字节
  1. 设置并返回原值
1
getset key value
  1. 设置指定位置的字符
1
2
3
4
5
6
7
setrange key offeset value
127.0.0.1:6379> get liming
"class4"
127.0.0.1:6379> setrange liming 0 m
(integer) 6
127.0.0.1:6379> get liming
"mlass4"
  1. 获取部分字符串
1
2
getrange key start end 
start和end分别为开始和结束的偏移量,偏移量从0开始

四、Hash操作

  1. 设置值
1
2
hset key field value
hset user:1 name tom
  1. 获取值
1
2
3
4
5
6
7
hget key field
127.0.0.1:6379> hset user:1 name Tom
(integer) 1
127.0.0.1:6379> hget user:1 name
"Tom"
127.0.0.1:6379> hget user:1 age
(nil)
  1. 删除field
1
2
hdel key field [field ......]
会删除一个或多个field,返回结果为成功删除fiel的个数
  1. 计算field的个数
1
hlen key
  1. 批量设置或获取field-value
1
2
Hmget key field [field ......]
Hmset key field value [field value]
  1. 判断field是否存在
1
hexists key field
  1. 获取所有field
1
2
3
4
5
6
hkeys key
127.0.0.1:6379> hkeys user:1
1) "name"
2) "age"
3) "grand"
4) "city"
  1. 获取所有value
1
2
3
4
5
6
hvals key
127.0.0.1:6379> hvals user:1
1) "Tom"
2) "20"
3) "3"
4) "beijing"
  1. 获取所有的field、value
1
hgetall key
  1. 计算value字符串的长度
1
hstrlen key field

五、列表List操作

1. 添加

  1. 从右边插入元素
1
rpush key value [value......]
  1. 从左边插入元素
1
lpush key value [value......]
  1. 向某个元素前或者后插入元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
linsert key before|after pivot value
linsert命令会从列表中找到等于pivot的元素,在其前或者后插入一个新的元素value

127.0.0.1:6379> rpush mylist a b c d e f b a
(integer) 8
127.0.0.1:6379> linsert mylist after f g
(integer) 9
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
8) "b"
9) "a"

2. 查找

  1. 获取指定范围内的元素列表
1
2
3
lrange key start end 索引下标从左到右分别是0到N-1,从右到左分别是-1到-N;end选项包含了自身
lrange key 0 -1 可以从左到右获取列表的所有元素
lrange mylist 1 3 获取列表中第2个到第4个元素
  1. 获取列表指定下标的元素
1
lindex key index
  1. 获取列表长度
1
llen key

3. 删除

  1. 从列表右侧弹出元素
1
rpop key
  1. 从列表左侧弹出元素
1
lpop key
  1. 删除指定元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
lrem key count value
Lrem命令会从列表中找到=value的元素进行删除,根据count的不同分为3种情况:
1)Count>0,从左到有,删除最多count个元素
2)Count<0,从右到左,删除最多count绝对值个元素
3)Count=0,删除所有

列表listaaa为a a a a java php b a b
127.0.0.1:6379> lrem listaaa 5 a
(integer) 5
127.0.0.1:6379> lrange listaaa 0 -1
1) "java"
2) "php"
3) "b"
4) "b"
127.0.0.1:6379> lrem listaaa 3 php
(integer) 1
127.0.0.1:6379> lrange listaaa 0 -1
1) "java"
2) "b"
3) "b"

4. 修改

1
2
lset key index newValue 修改指定索引下标的元素
Eg:lset listaaa 1 python

5. 阻塞操作

1
2
3
blpop key [key ...] timeout
brpop key [key ...] timeout
blpop和brpop是lpop、rpop的阻塞版本,除了弹出方式不同,使用方法基本相同,timeout阻塞时间
  1. 列表为空
1
2
brpop list:test 3 	3秒后返回
brpop list:test 0 一直处于阻塞中
  1. 列表不为空
1
2
3
4
5
brpop mylist 0 	立刻返回

127.0.0.1:6379> brpop mylist 0
1) "mylist"
2) "a"

六、Set操作(不可重复)

1. 集合内的操作

  1. 添加元素
1
sadd key element [element .....] 	返回结果为添加成功的元素个数
  1. 删除元素
1
srem key element [element .....] 	返回结果为删除成功的元素个数
  1. 计算元素个数
1
Scard key 	scard的时间复杂度为O(1),直接用redis内部的变量
  1. 判断元素是否在集合中
1
Sismember key element 	在集合中则返回1,否则返回0
  1. 随机从集合返回指定个数元素
1
Srandmember key [count] 	count可不写,默认为1
  1. 从集合随机弹出元素
1
Spop key [count] 	3.2版本开始支持[count]
  1. 获取所有元素
1
Smembers key 	它和lrange、hgetall都属于比较重的命令,有时候可以使用sscan来完成

2. 集合间的操作

  1. 求多个集合的交集
1
sinter key [ key ......]
  1. 求多个集合的并集
1
sunion key [key ......]
  1. 求多个集合的差集
1
sdiff key [key ......]	第一个key里面有的,第二个key里面没有的
  1. 将交集、并集、差集的结果保存
1
2
3
4
sinterstore destination key [ key ......]
sunionstore destination key [ key ......]
sdiffstore destination key [ key ......]
例如:sinterstore user:1_2:inter user:1 user:2 user:1_2:incr也是集合类型

七、ZADD操作(有序集合)

  1. 添加成员
1
zadd key score member[score member .....] 返回结果为添加成功的元素个数
  1. 计算成员个数
1
zcard key scard的时间复杂度为O(1),直接用redis内部的变量
  1. 计算某个成员分数
1
zsore key member
  1. 计算成员的排名
1
zrank key member
  1. 删除成员
1
zrem key member [member .......]
  1. 增加成员的分数
1
zincrby key increment member
  1. 返回指定排名范围的成员
1
2
zrange key start end [withscores] 		从低分到高分
zrevrange key start end [withscores] 从高分到低分
  1. 返回指定分数范围的成员
1
2
zrange key min max [withscores] [limit offset count ] 		按照分数从低分到高分
zrevrange key max min [withscores] [limit offset count ] 按照分数从高分到低分
  1. 返回指定分数范围的成员个数
1
zcount key min max
  1. 删除指定排名内的升序元素
1
zremrangebyrank key start end
  1. 删除指定分数范围的成员
1
zremrangebystore key min max

八、pub/sub(发布、订阅)

  1. 发布消息
1
2
publish channel message
publish channel:sports 'I want to go eatting'
  1. 订阅消息
1
2
subscribe channel [channel .....]
subscribe channel:sports
  1. 取消订阅
1
unsubscribe channel [channel .....]
  1. 按照模式订阅
1
psubscribe pattern [pattern ......]
  1. 按照模式取消订阅
1
unpsubscribe pattern [pattern ......]
  1. 查询订阅
1
2
3
4
5
6
7
8
9
10
(1)查看活跃的频道
pubsub channels
127.0.0.1:6379> pubsub channels
1) "channel:sports"
2) "__sentinel__:hello"
(2)查看频道订阅数
pubsub numsub [channel ......]
pubsub numsub channel:sports
(3)查看模式订阅数
pubsub numpat
  1. 说明:
    客户端在执行订阅命令之后进入了订阅状态,只能接收四个命令:subscribe、psubscribe、unsubscribe、punsubscribe;
    新开启的订阅客户端,无法收到该频道之前的消息,因为redis不会对发布的消息进行持久化。

九、Transaction(事务)

  1. 取消执行事务块内的所有命令
1
discard
  1. 执行事务块内的命令
1
exec
  1. 标记一个事务块的开始
1
multi
  1. 取消watch命令对所有key的监视
1
unwatch
  1. 监视一个或者多个key,如果事务执行之前,这个kye被其它命令所动,则事务被打断
1
watch key [key ...]

十、Connection(连接)

  1. 登录redis时输入密码
1
auth password
  1. 打印一个特定的信息message,测试时使用
1
echo message
  1. 测试与服务器的连接,如果正常则返回pong
1
ping
  1. 请求服务器关闭与当前客户端的连接
1
quit
  1. 切换到指定的数据库
1
select index

十一、Server(服务器)

  1. 后台异步保存数据到硬盘
1
bgsave
  1. 为连接设置、获取名字
1
client setname/client getname
  1. 关闭地址为 ip:port的客户端
1
client kill ip:port
  1. 以人类可读的方式,返回所有的连接客户端信息和统计数据
1
client list
  1. 取得运行redis服务器的配置参数
1
config get parameter
  1. 设置redis服务器的配置参数
1
config set parameter value
  1. 重置info命令的某些统计数据
1
config resetstat 
  1. 返回redis服务器的各种信息和统计数据
1
info [section]
  1. 返回最近一次redis成功将数据保存到磁盘时的时间
1
lastsave
  1. 实时打印出redis服务器接收到的指令
1
monitor
  1. 将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘
1
save
  1. 将当前服务器转变为指定服务器的从属服务器
1
slaveof host port
  1. Redis 用来记录查询执行时间的日志系统
1
slowlog subcommand [argument]

部分内容摘自https://segmentfault.com/a/1190000010999677