01 全局命令
1.1 Keys命令
KEYS pattern
查找所有符合给定模式pattern(正则表达式)的 key,但是KEYS *
是非常消耗内存的,容易导致Redis崩溃
172.16.255.101:6379> KEYS *
1) "k1"
2) "k4"
3) "k2"
4) "k5"
02 字符串命令
Redis并不是简单的key-value
存储,实际上他是一个数据结构服务器,支持不同类型的值。其中Redis Strings是最简单的Redis类型,如果只用这种类型,Redis就相当于一个持久化的memcache
服务器(memecache
的数据仅仅保存在内存中,服务器重启后,数据将丢失)
2.1 SET/GET命令
通常使用SET/GET命令来设置和获取字符串的值
SET key value
将键key设定为指定的字符串值;如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型;当set命令执行成功之后,之前设置的过期时间都将失效
如果想同时插入多个数据,使用MSET key value [key value ...]
将对应给定的keys到他们相应的values上;同理MGET key [key ...]
用于获取多个key的值
172.16.255.101:6379> set k1 v1
OK
172.16.255.101:6379> get k1
"v1"
172.16.255.101:6379> MSET k3 v3 k4 v4 k5 v5
OK
172.16.255.101:6379> MGET k3 k4 k5
1) "v3"
2) "v4"
3) "v5"
2.2 INCR命令
INCR命令用于实现Redis计数器
INCR key
将key对应存储的字符串被解析为10进制的64位有符号整型数据,并对存储在指定key的数值执行原子的加1操作;如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0
功能类似命令
INCRBY key increment
:将key对应的数字加incrementDECR key
:对key对应的数字做减1操作DECRBY key decrement
:将key对应的数字减decrement
172.16.255.101:6379> set k2 100
OK
172.16.255.101:6379> INCR k2
(integer) 101
172.16.255.101:6379> get k2
"101"
2.3 EXISTS命令
EXISTS key [key ...]
返回对应key是否存在,返回1或0表示对应key的值是否存在;相对的可以使用DEL命令删除key
DEL key [key ...]
删除指定的一批keys,如果删除中的某些key不存在,则直接忽略;返回1或0表示对应key是否删除成功
172.16.255.101:6379> EXISTS k3
(integer) 1
172.16.255.101:6379> DEL k3
(integer) 1
172.16.255.101:6379> EXISTS k3
(integer) 0
2.4 TYPE命令
TYPE key
返回key所存储的value的数据结构类型,它可以返回string, list, set, zset 和 hash等不同的类型
172.16.255.101:6379> TYPE k2
string
2.5 EXPIRE命令
EXPIRE key seconds
设置key的过期时间,超过时间后,将会自动删除该key;返回值为 1 表示成功设置过期时间;返回值为 0 表示key不存在或者不能设置过期时间。设置过期时间后,如果重新使用SET
命令会导致该键的过期时间被清空,该键被重新设置为永不过期。
PEXPIRE key milliseconds
这个命令和EXPIRE命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像EXPIRE命令那样,以秒为单位。
PERSIST key
取消key的过期时间,将这个 key 从『易失的』(带生存时间 key )转换成『持久的』(一个不带生存时间、永不过期的 key );当生存时间移除成功时,返回值为 1,如果 key 不存在或 key 没有设置生存时间,返回值为 0。
TTL key
返回key剩余过期时间的有效秒数,这种反射能力允许Redis客户端检查指定key在数据集里面剩余的有效期;执行该命令,如果key不存在或者已过期,返回 -2;如果key存在并且没有设置过期时间(永久有效),返回 -1。
PTTL key
,这个命令类似于TTL命令,但它以毫秒为单位返回 key 的剩余生存时间,而不是像TTL命令那样,以秒为单位。
172.16.255.101:6379> EXPIRE k1 100
(integer) 1
172.16.255.101:6379> TTL k1
(integer) 92
172.16.255.101:6379> TTL k1
(integer) 88
172.16.255.101:6379> TTL k1
(integer) 87
172.16.255.101:6379> set k1 v11
OK
172.16.255.101:6379> TTL k1
(integer) -1
03 列表命令
3.1 RPUSH/RPOP命令
RPUSH key value [value ...]
向存于 key 的列表的尾部插入所有指定的值;如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作;其返回值是PUSH操作完成后的列表长度。该命令也可以把多个元素Push入队列,只需要在命令后面指定多个参数;元素是从左到右一个接一个从列表尾部插入;比如命令 RPUSH mylist a b c 会返回一个列表,其第一个元素是 a ,第二个元素是 b ,第三个元素是 c。
RPOP key
移除并返回存于 key 的 list 的最后一个元素;返回值是最后一个元素的值,或者当 key 不存在的时候返回空
LPUSH key value [value ...]
与RPUSH
相反,本命令将所有指定的值插入到存于 key 的列表的头部;例如LPUSH mylist a b c
,返回的列表是 c 为第一个元素, b 为第二个元素, a 为第三个元素。
LPOP key
移除并且返回 key 对应的 list 的第一个元素
3.2 LLEN/LRANGE命令
LLEN key
返回存储在 key 里的list的长度;如果 key 不存在,那么就被看作是空list,并且返回长度为 0
LRANGE key start stop
返回存储在 key 的列表里指定范围内的元素; start 和 end 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推;偏移量也可以是负数,表示偏移量是从list尾部开始计数。例如, -1 表示列表的最后一个元素,-2 是倒数第二个,以此类推。如果start比list的尾部下标大的时候,会返回一个空列表。 如果stop比list的实际尾部大的时候,Redis会当它是最后一个元素的下标。
172.16.255.101:6379> RPUSH mylist 1 2 3
(integer) 3
172.16.255.101:6379> LPUSH mylist 7 8 9
(integer) 6
172.16.255.101:6379> TYPE mylist
list
172.16.255.101:6379> LLEN mylist
(integer) 6
172.16.255.101:6379> LRANGE mylist 0 -1
1) "9"
2) "8"
3) "7"
4) "1"
5) "2"
6) "3"
172.16.255.101:6379> RPOP mylist
"3"
172.16.255.101:6379> LPOP mylist
"9"
172.16.255.101:6379> LRANGE mylist 0 100
1) "8"
2) "7"
3) "1"
4) "2"
04 哈希表命令
Redis哈希表实现MySQL缓存,在Redis中缓存MySQL部分数据,然后直接使用HGET高效查询代替MySQL中的select查询:如果HGET查询到结果快速则返回,没有查到才使用select在MySQL中查询,并将查询结果缓存到Redis中。
4.1 HSET/HGET命令
HSET key field value
设置 key 指定的哈希集中指定字段的值;如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联;如果字段在哈希集中存在,它将被重写。其返回值为1表示field是一个新的字段,0则表示field原来在map里面已经存在(在新版的Redis中似乎功能和HMSET差不多,也可以多字段插入,但是返回值是长度)
HGET key field
返回 key 指定的哈希集中该字段所关联的值
HMSET key field value [field value ...]
设置 key 指定的哈希集中指定字段的值;该命令将重写所有在哈希集中存在的字段;如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联
HMGET key field [field ...]
返回 key 指定的哈希集中指定字段值的列表,并保持与请求相同的顺序
HGETALL key
返回 key 指定的哈希集中所有的字段和值。返回值中,每个字段名的下一个是它的值,所以返回值的长度是哈希集大小的两倍
172.16.255.101:6379> HSET admin:001 name wang athur rank0 age 100
(integer) 3
172.16.255.101:6379> HGET admin:001 name
"wang"
172.16.255.101:6379> HMSET admin:002 name he athur rank1 age 99
OK
172.16.255.101:6379> HMGET admin:002 name athur age
1) "he"
2) "rank1"
3) "99"
172.16.255.101:6379> HGETALL admin:001
1) "name"
2) "wang"
3) "athur"
4) "rank0"
5) "age"
6) "100"
05 集合命令
集合是字符串的无序排列,和列表类型不同的是集合类型中不允许出现重复的元素
5.1 SADD/SREM命令
SADD key member [member ...]
添加一个或多个指定的member元素到集合的 key 中;指定的一个或者多个元素member 如果已经在集合key中存在则忽略;如果集合key 不存在,则新建集合key,并添加member元素到集合key中。其返回值是新成功添加到集合里元素的数量,不包括已经存在于集合中的元素
SREM key member [member ...]
在key集合中移除指定的元素;如果指定的元素不是key集合中的元素则忽略;如果key集合不存在则被视为一个空的集合,该命令返回0
SMEMBERS key
返回key集合所有的元素
172.16.255.101:6379> SADD myset 9 1 8 6 2
(integer) 5
172.16.255.101:6379> SMEMBERS myset
1) "1"
2) "2"
3) "6"
4) "8"
5) "9"
172.16.255.101:6379> SREM myset 8 6
(integer) 2
172.16.255.101:6379> SMEMBERS myset
1) "1"
2) "2"
3) "9"
5.2 SDIFF/SINTER/SUNION命令
SDIFF key [key ...]
返回一个集合与给定集合的差集的元素,求差集(其他集合没有而目标集合有的元素)
SINTER key [key ...]
返回指定所有的集合的成员的交集,求交集(其他集合和目标集合都有的元素)
SUNION key [key ...]
返回给定的多个集合的并集中的所有成员,求并集
172.16.255.101:6379> SADD set1 a b c d
(integer) 4
172.16.255.101:6379> SADD set2 c d e f
(integer) 4
172.16.255.101:6379> SDIFF set1 set2
1) "a"
2) "b"
172.16.255.101:6379> SINTER set1 set2
1) "c"
2) "d"
172.16.255.101:6379> SUNION set1 set2
1) "d"
2) "a"
3) "c"
4) "e"
5) "b"
6) "f"