一、通用命令
通用命令是指所有数据类型都能使用的命令,常见的有:
- KEYS:通过通配符进行模糊查询所有符合条件的 key;
- DEL:删除指定的 key;
- TTL:查看指定 key 的剩余有效期;
- EXPIRE:给指定的 key 设置有效期,有效期到期时该 key 会被自动删除;
- EXISTS:判断指定的 key 是否存在;
1、KEYS 命令
通过通配符进行模糊查询 key
127.0.0.1:6379> MSET firstname jack lastname steven age 24OK127.0.0.1:6379> KEYS *1) "lastname"2) "age"3) "firstname"127.0.0.1:6379> KEYS *name*1) "lastname"2) "firstname"127.0.0.1:6379> KEYS a??1) "age"127.0.0.1:6379>
2、DEL 命令
删除指定的 key
127.0.0.1:6379> MSET key1 value1 key2 value2 key3 value3OK127.0.0.1:6379> KEYS *1) "key1"2) "key3"3) "key2"127.0.0.1:6379> DEL key3(integer) 1127.0.0.1:6379> KEYS *1) "key1"2) "key2"127.0.0.1:6379> DEL key1 key2 key3(integer) 2127.0.0.1:6379> KEYS *(empty array)127.0.0.1:6379>
3、TTL 命令
查看指定 key 的剩余有效期
127.0.0.1:6379> SET key1 value1OK127.0.0.1:6379> TTL key1(integer) -1 # 代表永不过期127.0.0.1:6379> EXPIRE key1 10(integer) 1127.0.0.1:6379> ttl key1(integer) 10 # 代表 key 的剩余有效期,单位是 second127.0.0.1:6379> ttl key1(integer) -2 # 代表已经过期127.0.0.1:6379>
4、EXPIRE 命令
给指定的 key 设置有效期,有效期到期时该 key 会被自动删除
127.0.0.1:6379> SET key1 valueOK127.0.0.1:6379> TTL key1(integer) -1 # 代表永不过期127.0.0.1:6379> EXPIRE key1 10(integer) 1127.0.0.1:6379> TTL key1(integer) 10 # 代表 key 的剩余有效期,单位是 second127.0.0.1:6379> TTL key1(integer) -2 # 代表已经过期127.0.0.1:6379> KEYS *(empty array) # 由于 key1 已经过期了,所以查询不到127.0.0.1:6379> GET key1(nil) # 由于 key1 已经过期了,所以获取不到127.0.0.1:6379> TTL key1(integer) -2 # 但是通过 TTL 是能查询 key1 的状态127.0.0.1:6379>
5、EXISTS 命令
判断指定的 key 是否存在
127.0.0.1:6379> EXISTS key1(integer) 0 # 不存在返回 0127.0.0.1:6379> SET key1 value1OK127.0.0.1:6379> EXISTS key1(integer) 1 # 若存在返回 1127.0.0.1:6379> EXPIRE key1 10(integer) 1127.0.0.1:6379> TTL key1(integer) -2127.0.0.1:6379> EXISTS key1(integer) 0 # 已经过期,则返回 0127.0.0.1:6379>
二、String 常用命令
String 类型,也就是字符串类型,是 Redis 中最简单的存储类型。
根据字符串的格式不同,又可以分为3类:
- String:普通字符串;
- int:整数类型,可以做自增、自减操作;
- float:浮点类型,可以做自增、自减操作;
不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。
字符串类型的最大空间不能超过 512M。
String 的常见命令如下:
- SET key value:添加或者修改一个 String 类型的键值对;
- GET key:根据 key 获取 String 类型的 value;
- MSET key1 value1 key2 value2:批量添加多个 String 类型的键值对;
- MGET key1 key2:根据多个 key 获取多个 String 类型的 value;
- SETNX key value:添加一个 String 类型的键值对,前提是这个 key 不存在,否则不执行;
- SETEX key seconds value:添加一个 String类 型的键值对,并且指定有效期;
- INCR key:让一个 int 型的 key 自增 1;
- INCRBY key increment:让一个 int 型的 key 自增并指定步长;
- INCRBYFLOAT key increment:让一个 float 型的数字自增并指定步长;
1、SET 命令
添加或者修改一个 String 类型的键值对
127.0.0.1:6379> SET key1 value1OK127.0.0.1:6379> KEYS *1) "key1"127.0.0.1:6379>
2、GET 命令
根据 key 获取 String 类型的 value
127.0.0.1:6379> SET key1 value1OK127.0.0.1:6379> GET key1"value1"127.0.0.1:6379>
3、MSET 命令
批量添加多个 String 类型的键值对
127.0.0.1:6379> MSET key1 value1 key2 value2OK127.0.0.1:6379> KEYS *1) "key1"2) "key2"127.0.0.1:6379>
4、GSET 命令
根据多个 key 获取多个 String 类型的 value
127.0.0.1:6379> MSET key1 value1 key2 value2OK127.0.0.1:6379> KEYS *1) "key1"2) "key2"127.0.0.1:6379> MGET key1 key21) "value1"2) "value2"127.0.0.1:6379>
5、SETNX 命令
添加一个 String 类型的键值对,前提是这个 key 不存在,否则不执行
127.0.0.1:6379> KEYS *(empty array)127.0.0.1:6379> SETNX key1 value1(integer) 1127.0.0.1:6379> SETNX key1 value1(integer) 0127.0.0.1:6379>
6、SETEX 命令
添加一个 String类 型的键值对,并且指定有效期
127.0.0.1:6379> SETEX key1 10 value1OK127.0.0.1:6379> TTL key1(integer) 10127.0.0.1:6379> TTL key1(integer) -2127.0.0.1:6379>
7、lNCR 命令
让一个 int 型的 key 自增 1
127.0.0.1:6379> MSET key1 10 key2 10.1 key3 helloOK127.0.0.1:6379> mget key1 key2 key31) "10"2) "10.1"3) "hello"127.0.0.1:6379> INCR key1(integer) 11127.0.0.1:6379> INCR key2(error) ERR value is not an integer or out of range127.0.0.1:6379> INCR key3(error) ERR value is not an integer or out of range127.0.0.1:6379>
8、lNCRBY 命令
让一个 int 型的 key 自增并指定步长
127.0.0.1:6379> SET key1 10OK127.0.0.1:6379> INCRBY key1 2(integer) 12127.0.0.1:6379>
9、INCRBYFLOAT 命令
让一个 float 型的数字自增并指定步长
127.0.0.1:6379> SET key1 10.5OK127.0.0.1:6379> INCRBYFLOAT key1 1"11.5"127.0.0.1:6379>
三、Hash 常用命令
Hash 类型,也叫散列,其 value 是一个无序字典,类似于 Java 中的 HashMap 结构。
String 结构是将对象序列化为 JSON 字符串后存储,当需要修改对象某个字段时很不方便
Hash 结构可以将对象中的每个字段独立存储,可以针对单个字段做 CRUD
Hash 的常见命令有:
- HSET key field value:添加或者修改 Hash 类型 key 的 field 的值;
- HGET key field:获取一个 Hash 类型 key 的 field 的值;
- HMSET:批量添加多个 Hash 类型 key 的 field 的值;
- HMGET:批量获取多个 Hash 类型 key 的 field 的值;
- HGETALL:获取一个 Hash 类型的 key 中的所有的 field 和 value;
- HSETNX:添加一个 Hash 类型的 key 的 field 值,前提是这个 field 不存在,否则不执行;
- HKEYS:获取一个 Hash 类型的 key 中的所有的 field;
- HVALS:获取一个 Hash 类型的 key 中的所有的 value;
- HINCRBY:让一个 Hash 类型 key 的字段值自增并指定步长;
1、HSET 命令
添加或者修改 Hash 类型 key 的 field 的值
127.0.0.1:6379> HSET example:user:1 name zhangsan(integer) 1127.0.0.1:6379> HGET example:user:1 name"zhangsan"127.0.0.1:6379>
2、HGET 命令
获取一个 Hash 类型 key 的 field 的值
127.0.0.1:6379> HSET example:user:1 name zhangsan(integer) 1127.0.0.1:6379> HGET example:user:1 name"zhangsan"127.0.0.1:6379>
3、HMSET 命令
批量添加多个 Hash 类型 key 的 field 的值
127.0.0.1:6379> HMSET example:user:1 name zhangsan age 23OK127.0.0.1:6379> HMGET example:user:1 name age1) "zhangsan"2) "23"127.0.0.1:6379>
4、HMSET 命令
批量获取多个 Hash 类型 key 的 field 的值
127.0.0.1:6379> HMSET example:user:1 name zhangsan age 23OK127.0.0.1:6379> HMGET example:user:1 name age1) "zhangsan"2) "23"127.0.0.1:6379>
5、HGETALL 命令
获取一个 Hash 类型的 key 中的所有的 field 和 value;
127.0.0.1:6379> HMSET example:user:1 name zhangsan age 23OK127.0.0.1:6379> HGETALL example:user:11) "name"2) "zhangsan"3) "age"4) "23"127.0.0.1:6379>
6、HSETNX 命令
添加一个 Hash 类型的 key 的 field 值,前提是这个 field 不存在,否则不执行;
127.0.0.1:6379> KEYS *(empty array)127.0.0.1:6379> HSETNX example:user:1 name zhangsan(integer) 1127.0.0.1:6379> HSETNX example:user:1 name zhangsan(integer) 0127.0.0.1:6379>
7、HKEYS 命令
获取一个 Hash 类型的 key 中的所有的 field
127.0.0.1:6379> HMSET example:user:1 name zhangsan age 23OK127.0.0.1:6379> HGETALL example:user:11) "name"2) "zhangsan"3) "age"4) "23"127.0.0.1:6379> HKEYS example:user:11) "name"2) "age"127.0.0.1:6379>
8、HVALS 命令
获取一个 Hash 类型的 key 中的所有的 value
127.0.0.1:6379> HMSET example:user:1 name zhangsan age 23OK127.0.0.1:6379> HGETALL example:user:11) "name"2) "zhangsan"3) "age"4) "23"127.0.0.1:6379> HVALS example:user:11) "zhangsan"2) "23"127.0.0.1:6379>
9、HINCRBY 命令
让一个 Hash 类型 key 的字段值自增并指定步长;
127.0.0.1:6379> HMSET example:user:1 field1 10 field2 10.5 field3 helloOK127.0.0.1:6379> HGETALL example:user:11) "field1"2) "10"3) "field2"4) "10.5"5) "field3"6) "hello"127.0.0.1:6379> HINCRBY example:user:1 field1 1(integer) 11127.0.0.1:6379> HINCRBY example:user:1 field2 1(error) ERR hash value is not an integer127.0.0.1:6379> HINCRBY example:user:1 field3 1(error) ERR hash value is not an integer127.0.0.1:6379>
四、List 常用命令
Redis 中 的 List 类型与 Java 中的 LinkedList 类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。
特征也与LinkedList类似:
- 有序;
- 元素可以重复;
- 插入和删除快;
- 查询速度一般
List 常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。
List的常见命令有:
- LPUSH key element … :向列表左侧插入一个或多个元素;
- LPOP key [count]:移除并返回列表左侧的第一个或多个元素,没有则返回 nil;
- RPUSH key [count] element … :向列表右侧插入一个或多个元素;
- RPOP key:移除并返回列表右侧的第一个或多个元素,没有则返回 nil;
- LRANGE key star end:返回一段角标范围内的所有元素(从 0 开始);
- BLPOP:与 LPOP 类似,只不过在没有元素时等待指定时间,而不是直接返回 nil;
- BRPOP:与 RPOP 类似,只不过在没有元素时等待指定时间,而不是直接返回 nil;
1、LPUSH 命令
向列表左侧插入一个或多个元素
127.0.0.1:6379> LPUSH mylist 1(integer) 1127.0.0.1:6379> LPUSH mylist 2 3(integer) 3127.0.0.1:6379> LRANGE mylist 0 21) "3"2) "2"3) "1"127.0.0.1:6379>
2、LPOP 命令
移除并返回列表左侧的第一个或多个元素,没有则返回 nil
127.0.0.1:6379> LPUSH mylist 1 2 3 4(integer) 4127.0.0.1:6379> LRANGE mylist 0 31) "4"2) "3"3) "2"4) "1"127.0.0.1:6379> LPOP mylist"4"127.0.0.1:6379> LRANGE mylist 0 31) "3"2) "2"3) "1"127.0.0.1:6379> LPOP mylist 21) "3"2) "2"127.0.0.1:6379> LRANGE mylist 0 31) "1"127.0.0.1:6379> LPOP mylist"1"127.0.0.1:6379> LPOP mylist(nil)127.0.0.1:6379>
3、RPUSH 命令
向列表右侧插入一个或多个元素
127.0.0.1:6379> RPUSH mylist 1(integer) 1127.0.0.1:6379> RPUSH mylist 2 3(integer) 3127.0.0.1:6379> LRANGE mylist 0 21) "1"2) "2"3) "3"127.0.0.1:6379>
4、RPOP 命令
移除并返回列表右侧的第一个或多个元素,没有则返回 nil;
127.0.0.1:6379> RPUSH mylist 1 2 3 4(integer) 4127.0.0.1:6379> LRANGE mylist 0 31) "1"2) "2"3) "3"4) "4"127.0.0.1:6379> RPOP mylist"4"127.0.0.1:6379> LRANGE mylist 0 31) "1"2) "2"3) "3"127.0.0.1:6379> RPOP mylist 21) "3"2) "2"127.0.0.1:6379> LRANGE mylist 0 31) "1"127.0.0.1:6379> RPOP mylist"1"127.0.0.1:6379> RPOP mylist(nil)127.0.0.1:6379>
5、LRANGE 命令
返回一段角标范围内的所有元素(从 0 开始);
127.0.0.1:6379> LPUSH mylist 1 2 3 4(integer) 4127.0.0.1:6379> LRANGE mylist 0 31) "4"2) "3"3) "2"4) "1"127.0.0.1:6379>
6、BLPOP 命令
与 LPOP 类似,只不过在没有元素时等待指定时间,而不是直接返回 nil
没有元素时等待指定时间
有元素了再进行 pop
7、RPOP 命令
与 RPOP 类似,只不过在没有元素时等待指定时间,而不是直接返回 nil
有元素了再进行 pop
五、Set 常用命令
Redis 的 Set 结构与 Java 中的 HashSet 类似,可以看做是一个 value 为 null 的 HashMap。因为 Redis 的 Set 也是一个 hash 表。
因此具备与 HashSet 类似的特征:
- 无序;
- 元素不可重复;
- 查找快;
- 支持交集、并集、差集等功能;
Set 的常见命令有:
- SADD key member … :向 set 中添加一个或多个元素;
- SREM key member … :移除 set 中的指定元素;
- SCARD key:返回 set 中元素的个数;
- SISMEMBER key membe:判断一个元素是否存在于 set 中;
- SMEMBERS key:获取 set 中的所有元素;
- SINTER key1 key2 …:求 key1 与 key2 的交集;
- SDIFF key1 key2 …:求 key1 与 key2 的差集;
- SUNION key1 key2 …:求 key1 和 key2 的并集;
1、SADD 命令
向 set 中添加一个或多个元素
127.0.0.1:6379> SADD myset 10(integer) 1127.0.0.1:6379> SADD myset 10.5 hello(integer) 2127.0.0.1:6379> SADD myset 10.5 hello(integer) 0127.0.0.1:6379> SMEMBERS myset1) "hello"2) "10.5"3) "10"127.0.0.1:6379>
2、SREM 命令
移除 set 中的指定元素
127.0.0.1:6379> sadd myset 1 2 3 4(integer) 4127.0.0.1:6379> SMEMBERS myset1) "1"2) "2"3) "3"4) "4"127.0.0.1:6379> SREM myset 1(integer) 1127.0.0.1:6379> SMEMBERS myset1) "2"2) "3"3) "4"127.0.0.1:6379> SREM myset 2 4(integer) 2127.0.0.1:6379> SMEMBERS myset1) "3"127.0.0.1:6379>
3、SCARD 命令
返回 set 中元素的个数
127.0.0.1:6379> SADD myset 1 2 3 4(integer) 4127.0.0.1:6379> SMEMBERS myset1) "1"2) "2"3) "3"4) "4"127.0.0.1:6379> SCARD myset(integer) 4127.0.0.1:6379>
4、SISMEMBER 命令
判断一个元素是否存在于 set 中
127.0.0.1:6379> SADD myset 1 2 3 4(integer) 4127.0.0.1:6379> SMEMBERS myset1) "1"2) "2"3) "3"4) "4"127.0.0.1:6379> SISMEMBER myset 1(integer) 1127.0.0.1:6379> SISMEMBER myset 5(integer) 0127.0.0.1:6379>
5、SMEMBERS 命令
获取 set 中的所有元素
127.0.0.1:6379> SADD myset 1 2 3 4(integer) 4127.0.0.1:6379> SMEMBERS myset1) "1"2) "2"3) "3"4) "4"127.0.0.1:6379>
6、SINTER 命令
求 key1 与 key2 的交集
127.0.0.1:6379> SADD set1 1 2 3 4(integer) 4127.0.0.1:6379> SADD set2 2 3 4 5(integer) 4127.0.0.1:6379> SINTER set1 set21) "2"2) "3"3) "4"127.0.0.1:6379>
7、SDIFF 命令
求 key1 与 key2 的差集
127.0.0.1:6379> SADD set1 1 2 3 4(integer) 4127.0.0.1:6379> SADD set2 2 3 4 5(integer) 4127.0.0.1:6379> SDIFF set1 set21) "1"127.0.0.1:6379>
8、SUNION 命令
求 key1 和 key2 的并集
127.0.0.1:6379> SADD set1 1 2 3 4(integer) 4127.0.0.1:6379> SADD set2 2 3 4 5(integer) 4127.0.0.1:6379> SUNION set1 set21) "1"2) "2"3) "3"4) "4"5) "5"127.0.0.1:6379>
六、SortedSet 常用命令
Redis 的 SortedSet 是一个可排序的 set 集合,与 Java 中的 TreeSet 有些类似,但底层数据结构却差别很大。SortedSet 中的每一个元素都带有一个 score 属性,可以基于 score 属性对元素排序,底层的实现是一个跳表(SkipList)加 Hash 表。
SortedSet 具备下列特性:
- 可排序;;
- 元素不重复;
- 查询速度快;
因为 SortedSet 的可排序特性,经常被用来实现排行榜这样的功能。
SortedSet 的常见命令有:
- ZADD key score member:添加一个或多个元素到 SortedSet ,已经存在则更新其 score 值;
- ZREM key member:删除 SortedSet 中的一个指定元素;
- ZSCORE key member : 获取 SortedSet 中的指定元素的 score 值;
- ZRANK key member:获取 SortedSet 中的指定元素的排名;
- ZCARD key:获取 SortedSet 中的元素个数;
- ZCOUNT key min max:统计 score 值在给定范围内的所有元素的个数;
- ZINCRBY key increment member:让 SortedSet 中的指定元素按指定步长自增;
- ZRANGE key min max:按照 score 排序后,获取指定排名范围内的元素;
- ZRANGEBYSCORE key min max:按照 score 排序后,获取指定 score 范围内的元素;
- ZDIFF、ZINTER、ZUNION:求差集、交集、并集;
1、ZADD 命令
添加一个或多个元素到 SortedSet ,已经存在则更新其 score 值
127.0.0.1:6379> ZADD mysortset 11 zhangsan(integer) 1127.0.0.1:6379> ZADD mysortset 12 li 13 wangwu(integer) 2127.0.0.1:6379> ZRANGE mysortset 0 21) "zhangsan"2) "li"3) "wangwu"127.0.0.1:6379>
2、ZREM 命令
删除 SortedSet 中的一个指定元素
127.0.0.1:6379> ZADD mysortset 11 zhangsan 12 lisi 13 wangwu 14 zhaoliu(integer) 4127.0.0.1:6379> ZRANGE mysortset 0 31) "zhangsan"2) "lisi"3) "wangwu"4) "zhaoliu"127.0.0.1:6379> ZREM mysortset zhangsan(integer) 1127.0.0.1:6379> ZRANGE mysortset 0 31) "lisi"2) "wangwu"3) "zhaoliu"127.0.0.1:6379> ZREM mysortset lisi wangwu(integer) 2127.0.0.1:6379> ZRANGE mysortset 0 31) "zhaoliu"127.0.0.1:6379>
3、ZSCORE 命令
获取 SortedSet 中的指定元素的 score 值
127.0.0.1:6379> ZADD mysortset 11 zhangsan 12 lisi 13 wangwu 14 zhaoliu(integer) 4127.0.0.1:6379> ZRANGE mysortset 0 31) "zhangsan"2) "lisi"3) "wangwu"4) "zhaoliu"127.0.0.1:6379> ZSCORE mysortset zhangsan"11"127.0.0.1:6379> ZSCORE mysortset tianqi(nil)127.0.0.1:6379>
4、ZRANK 命令
获取 SortedSet 中的指定元素的排名(索引)
127.0.0.1:6379> ZADD mysortset 11 zhangsan 12 lisi 13 wangwu 14 zhaoliu(integer) 4127.0.0.1:6379> ZRANGE mysortset 0 31) "zhangsan"2) "lisi"3) "wangwu"4) "zhaoliu"127.0.0.1:6379> ZRANK mysortset zhangsan(integer) 0127.0.0.1:6379> ZRANK mysortset zhaoliu(integer) 3127.0.0.1:6379>
5、ZCARD 命令
获取 SortedSet 中的元素个数
127.0.0.1:6379> ZADD mysortset 11 zhangsan 12 lisi 13 wangwu 14 zhaoliu(integer) 4127.0.0.1:6379> ZRANGE mysortset 0 31) "zhangsan"2) "lisi"3) "wangwu"4) "zhaoliu"127.0.0.1:6379> ZCARD mysortset(integer) 4127.0.0.1:6379>
6、ZCOUNT 命令
统计 score 值在给定范围内的所有元素的个数
127.0.0.1:6379> ZADD mysortset 11 zhangsan 12 lisi 13 wangwu 14 zhaoliu(integer) 4127.0.0.1:6379> ZRANGE mysortset 0 31) "zhangsan"2) "lisi"3) "wangwu"4) "zhaoliu"127.0.0.1:6379> ZCOUNT mysortset 11 12(integer) 2127.0.0.1:6379>
7、ZINCRBY 命令
让 SortedSet 中的指定元素按指定步长自增
127.0.0.1:6379> ZADD mysortset 11 zhangsan 12 lisi 13 wangwu 14 zhaoliu(integer) 4127.0.0.1:6379> ZRANGE mysortset 0 31) "zhangsan"2) "lisi"3) "wangwu"4) "zhaoliu"127.0.0.1:6379> ZINCRBY mysortset 2 zhangsan"13"127.0.0.1:6379> ZSCORE mysortset zhangsan"13"127.0.0.1:6379>
8、ZRANGE 命令
按照 score 排序后,获取指定排名范围内的元素
127.0.0.1:6379> ZADD mysortset 11 zhangsan 12 lisi 13 wangwu 14 zhaoliu(integer) 4127.0.0.1:6379> ZRANGE mysortset 0 31) "zhangsan"2) "lisi"3) "wangwu"4) "zhaoliu"
9、ZRANGEBYSCORE 命令
按照 score 排序后,获取指定 score 范围内的元素
127.0.0.1:6379> ZADD mysortset 11 zhangsan 12 lisi 13 wangwu 14 zhaoliu(integer) 4127.0.0.1:6379> ZRANGEBYSCORE mysortset 13 141) "wangwu"2) "zhaoliu"127.0.0.1:6379>
