# Redis CLI 常用命令速查

昨天正在与老婆愉快的过着周末，突然客户电话打来：

客户：“喂，那个谁啊，我这登录设备受限，需要手机验证码进行二次校验啊”
我：“那你收个验证码不就得了”
客户：“公司账号绑定的是那个某某的手机号，他联系不上了呀”
我：“莫慌，我查一下阿里云短信服务后台的记录”
。。。
一查，阿里云后台贴心的将短信验证码内容优雅的表达为了***，那好吧，联系客户更换绑定手机，客户果断决绝且表示着急使用，务必尽快解决。

虽然周末度假的心情不再美丽，但客户既然提出了问题还得解决。问了下公司开发同事，短信验证码发送之后会将验证码内容临时写到 Redis 中，而 Redis 又是跑在了一个 Docker 容器中。那这问题就简单起来了，让客户正常发送下验证码，我进Redis容器通过Redis CLI 查看下验证码内容发给客户就得了，问题迎刃而解，继续美丽的周末。

废话说完，下面简单整理下进入 Redis 容器并通过控制台客户端查询数据的过程， shut up and just show the code.


```sh
# 运行 Reids 容器
docker run -it --rm -p 6379:6379 --name redis redis:alpine redis-server --requirepass 123456

# 进入 Redis 容器
docker exec -it redis sh
```
通过上面指令先把模拟环境搞起来，随便运行个 Redis 容器，设置个 123456 的密码，完了进入容器内部。

下面我们通过控制台来连接Redis服务器。
```sh
# 连接 redis 服务器  -h -p -a 参数分别指定 主机、端口、密码，可按需填写或省略
redis-cli -h 127.0.0.1 -p 6379 -a 123456
```

#### Key
```sh
# 模糊搜索 key
keys pattern

# 判断 key 是否存在
exists key

# 返回 key所存值的类型
type key

# 删除制定 key
del key

# 设置 key 过期时间
expire key seconds
```

#### String
```sh
# 设置指定的key
set key value

# 获取指定key的值
get key

# 将给定 key 的值设为 value ，并返回 key 的旧值(old value)
getset key value

# 返回 key 中字符串值的子字符
getrange key start end

# 只有在 key 不存在时设置 key 的值
setnx key value

# 返回 key 所储存的字符串值的长度
strlen key

# 如果 key 已经存在并且是一个字符串， append命令将指定的value追加到该key原来值（value）的末尾
append key value
```

#### Hash
```sh
# 获取在哈希表中指定 key 的所有字段和值
hgetall key

#	获取存储在哈希表中指定字段的值
hget key field

# 将哈希表 key 中的字段 field 的值设为 value
hset key field value

# 获取所有哈希表中的字段
hkeys key

# 获取哈希表中所有值
hvals key

# 查看哈希表 key 中，指定的字段是否存在
hexists key field

# 删除一个或多个哈希表字段
hdel key field1 field2
```

#### List
```sh
# 	通过索引获取列表中的元素
lindex key index

# 获取列表长度
llen key

# 移出并获取列表的第一个元素
lpop key

# 移除列表的最后一个元素，返回值为移除的元素
rpop key

# 将一个或多个值插入到列表头部
lpush key value1 [value2]

# 获取列表指定范围内的元素
lrange key start stop

# 通过索引设置列表元素的值
lset key index value
```

####  Set
```sh
# 返回集合中的所有成员
smembers key

# 移除集合中一个或多个成员
srem key member1 [member2]

# 获取集合的成员数
scard key

# 判断 member 元素是否是集合 key 的成员
sismember key member

# 向集合添加一个或多个成员
sadd key member1 [member2]

# 返回集合之间的差集
sdiff key1 [key2]

# 返回给定集合的交集
sinter key1 [key2]

# 返回所有给定集合的并集
sunion key1 [key2]
```

#### Sorted Set
```sh
# 向有序集合添加一个或多个成员，或者更新已存在成员的分数
zadd key score1 member1 [score2 member2]

#  获取有序集合的成员数
zcard key

# 计算在有序集合中指定区间分数的成员数
zcount key min max

# 在有序集合中计算指定字典区间内成员数量
zlexcount key min max

# 在有序集合中计算指定字典区间内成员数量
zrange key start stop [WITHSCORES]

# 通过字典区间返回有序集合的成员
zrangebylex key min max [LIMIT offset count]

# 通过分数返回有序集合指定区间内的成员
zrangebyscore key min max [WITHSCORES] [LIMIT]

# 返回有序集合中指定成员的索引
zrank key member

# 移除有序集合中的一个或多个成员
zrem key member [member ...]

# 移除有序集合中给定的字典区间的所有成员
zremrangebylex key min max

# 移除有序集合中给定的排名区间的所有成员
zremrangebyrank key start stop

# 移除有序集合中给定的分数区间的所有成员
zremrangebyscore key min max

# 返回有序集中指定区间内的成员，通过索引，分数从高到低
zrevrange key start stop [WITHSCORES]

# 返回有序集中指定分数区间内的成员，分数从高到低排序
zrevrangebyscore key max min [WITHSCORES]

# 返回有序集合中指定成员的排名，有序集成员按分数值递减(从大到小)排序
zrevrank key member

# 返回有序集中，成员的分数值
zscore key member
```
