库指令
1. 切换库
select 库编号
2. 清空当前库
flushDB
3. 清空所有库
flushAll
操作Key指令
Redis是一个Key-Value内存型数据库,Value的类型很多(String,List,Set,ZSet,Hash),在学习Value之前,我们需要知道一些Key相关的API。
1. 删除Key
可以删除一个或多个Key
del key [key...]
2. Key是否存在
Key如果存在返回1,不存在返回0
exists key
可以同时判断多个Key,只要有一个Key存在,就返回1
exists key [key...]
3. Key设置到期时间
默认设置的Key都是永久存储,如果设置到期时间,在指定时间后Key就会自动删除。
设置的到期时间单位为:s
expire key seconds
4. Key设置到期时间(毫秒)
设置的到期时间单位为:ms
pexpire key millseconds
5. 查找Key
keys指令配合通配符来实现过滤。
查找所有Key(*可以匹配0个或多个字符)
keys *
查找 "hex","hax","hxx" 等(?只能严格匹配1个字符)
keys h?x
查找 "heax","haex","haax","heex" ([ae]中表示该位置的字符只能是a或者e)
keys h[ae][ae]x
6. 移动Key
将当前库中的Key移动到指定库中。
move key index
7. 查看Key到期时间
查看Key还有多长时间到期。
查看到期时间单位为:s
查看永久存储的Key返回-1,查看未存储的Key返回-2。
ttl key
8. 查看Key到期时间
查看到期时间单位为:ms
pttl key
9. 随机获取Key
从当前库中随机获取一个没有到期的Key。
randomkey
10. Key改名
只改Key,对应的Value不变。
rename key newKey
11. 查看Key类型
type key
返回none表示Key不存在,正常返回String,List,Set,ZSet,Hash。
String类型
1. 内存模型
2. 常用命令
| 命令 | 说明 | 示例 |
|---|---|---|
| set | 设置一对Key-Value | set key value |
| get | 通过Key获取对应Value | get key |
| mset | 设置多对(more)Key-Value | mset key1 value1 key2 value2 [key value ...] |
| mget | 通过多个Key获取多个对应的Value | mget key1 key2 [key ...] |
| getset | 获取Key的原始Value再赋新Value | getset key value |
| strlen | 通过Key查看对应Value的长度 | strlen key |
| append | 通过Key给对应Value追加内容 | append key content |
| getrange | 通过Key和Value的下标,截取部分Value(下标从0开始,左闭右闭) | getrange key startIndex endIndex |
| setex | 设置一对Key-Value,同时指定到期时间(单位:s) | setex key seconds value |
| psetex | 设置一对Key-Value,同时指定到期时间(单位:ms) | setex key millseconds value |
| setnx | 设置一对Key-Value,如果Key不存在(not)则设置成功,反之失败 | setnx key value |
| msetnx | 设置多对Key-Value,如果所有Key都不存在则设置成功,反之失败 | mset key value [key value ...] |
| decr | 通过Key对数字String的Value做减1 | decr key |
| decrby | 通过Key对数字String的Value做指定数减法 | decrby key decrement |
| incr | 通过Key对数字String的Value做加1 | incr key |
| incrby | 通过Key对数字String的Value做指定数加法 | incrby key increment |
| incrbyfloat | 通过Key对数字String的Value做指定浮点数加法(最多保留17位精度) | incrbyfloat key increment |
List类型命令
1. 特点
List中存储的Value有序,且可以出现重复。
List最左边是链表头,最右边是链表尾。
可以通过组合使用List提供的API,从逻辑上构建Stack和Queue。
2. 内存模型
3. 常用命令
| 命令 | 说明 | 示例 |
|---|---|---|
| lpush | 将若干个Value顺序放入List(从左往右放),Key不存在则创建List | lpush key value [value ...] |
| lpushx | 将Value从左边放入List,Key必须存在 | lpushx key value |
| rpush | 将若干个Value顺序放入List(从右往左放),Key不存在则创建List | rpush key value [value ...] |
| rpushx | 将Value从右边放入List,Key必须存在 | rpushx key value |
| lpop | 获取List表头的Value,并移除表头Value | lpop key |
| rpop | 获取List表尾的Value,并移除表尾Value | rpop key |
| lrange | 通过List的下标,获取部分List中的Value(表头Value下标为0) | lrange key startIndex stopIndex |
| llen | 查询List中Value的数量(从1开始计算) | llen key |
| lset | 通过下标修改Value(下标必须存在) | lset key index value |
| lindex | 通过下标获取Value | lindex key index |
| lrem | 删除指定数量的重复Value(从左往右删) | lrem key count value |
| ltrim | 通过List的下标,只保留指定部分Value,其他全部删除 | ltrim key startIndex stopIndex |
| linsert | 在List中匹配到指定的Value之前或者之后插入一个新Value(从左往右匹配) | linsert key BEFORE | AFTER target value |
Set类型命令
1. 特点
Set中存储的Value无序,不可以出现重复。
2. 内存模型
3. 常用命令
| 命令 | 说明 | 示例 |
|---|---|---|
| sadd | 将若干个Value放入Set中(重复的会覆盖),Key不存在则会创建Set | sadd key value [value ...] |
| smembers | 查看Set中所有Value | smembers key |
| scard | 返回Set中Value的数量 | scard key |
| spop | 随机返回Set中若干个Value并移除 | spop key count |
| smove | 将Value从一个Set中转移到另一个Set | smove source destination value |
| sismember | 判断Set中是否有该Value | sismember key value |
| srandmember | 随机返回Set中若干个Value | srandmember key [member] |
| sdiff | 查看第一个集合与其他集合做差集后的所有Value | sdiff key [key ...] |
| sinter | 查看第一个集合与其他集合做交集后的所有Value | sinter key [key ...] |
| sunion | 查看第一个集合与其他集合做并集后的所有Value(结果会去重) | sunion key [key ...] |
| srem | 删除Set中若干个Value | srem key value [value ...] |
ZSet类型命令
1. 特点
ZSet中存储的Value无序,不可以出现重复,但是可以根据某条件来对Value进行排序(可以看作可排序Set)。
ZSet排序的原理是:在Value存入ZSet时,ZSet会给该Value设置一个分数,排序时就会依照分数的大小来给Value进行排序,按照排序顺序给每一个Value分配一个下标。
2. 内存模型
3. 常用命令
| 命令 | 说明 | 示例 |
|---|---|---|
| zadd | 将若干个Value和对应的分数放入ZSet中(重复的会覆盖),Key不存在则会创建ZSet | zadd key score value [score value ...] |
| zcard | 查看ZSet中Value的数量 | zcard key |
| zrange | 通过ZSet的下标,升序获取部分ZSet中的Value(分数最低的Value下标为0),可以显示分数 | zrange key startIndex stopIndex [withscores] |
| zrevrange | 通过ZSet的下标,降序获取部分ZSet中的Value(分数最低的Value下标为0),可以显示分数 | zrevrange key startIndex stopIndex [withscores] |
| zrangebyscore | 通过ZSet的分数,升序获取部分ZSet中的Value,可以显示分数,可以分页 | zrangebyscore key min max [withscores] [limit offset count] |
| zrank | 查看ZSet中某一个Value的升序排名(从0开始) | zrank key value |
| zrevrank | 查看ZSet中某一个Value的降序排名(从0开始) | zrevrank key value |
| zscore | 查看ZSet中某一个Value的分数 | zscore key value |
| zrem | 删除ZSet中若干个Value | zrem key value [value ...] |
| zincrby | 给ZSet中某一个数值类型Value做指定数加法 | zincrby key increment value |
Hash类型命令
1. 特点
Hash类似于Java中Map结构,Map中的Field不能重复。
2. 内存模型
3. 常用命令
| 命令 | 说明 | 示例 |
|---|---|---|
| hset | 在Hash中添加一对Field-Value,Key不存在则会创建Hash(Field存在则会覆盖) | hset key field value |
| hget | 获取Hash中的某一个Value | hget key field |
| hgetall | 查看Hash中所有Field-Value | hgetall key |
| hdel | 删除Hash中若干对Field-Value | hdel key field [field ...] |
| hexists | 判断Hash中是否存在该Field | hexists key field |
| hkeys | 查看Hash中所有Field | hkeys key |
| hvals | 查看Hash中所有Value | hvals key |
| hmset | 在Hash中添加若干对Field-Value(Field存在则会覆盖) | hmset key filed value [field value ...] |
| hmget | 通过Field查看若干个Value | hmget key filed [field ...] |
| hsetnx | 在Hash中添加一对Field-Value,Key不存在则会创建Hash(Field存在则会添加失败) | hsetnx key field value |
| hincrby | 给Hash中数值类型Value做指定数加法 | hincrby key field increment |
| hincrbyfloat | 给Hash中数值类型Value做指定浮点数加法(最多保留17位精度) | hincrbyfloat key field increment |