Redis入门与命令汇总
前言
这里主要列出 Redis 的常用命令以供方便查阅,以及各类型的特点、案例等。
Redis 的数据类型
Redis 作为高性能的键值对数据库,为了适应较复杂的数据场景,提供了五种数据类型。
-
字符串类型
顾名思义,存储的是字符串。
set key value,设置 key 的值为 value,如:set aa hello;
get key,根据 key 取值,如:get aa;
incr key,将 key 中存储的数字形式的字符串值增一,如果 key 不存在,那么会创建 key 并初始化为 0 ,然后再增一,如:incr num // num == 1;
incrby key increment,跟 incr 命令一样,唯一不同是可以将 key 存储的值加上 increment,如:incrby num 10 // num == 10
decr key,与 incr 命令用法一样,但其是让值减一,如:decr num // num == -1;
decrby key increment,与 incrby 命令用法一样,但其是让值减上 increment,如:decrby num 10 // num == -10;
incrbyfloat key increment,与 incrby 命令用法一样,但其增加的是浮点数,如:incrbyfloat num 0.1 // num == 0.1;
append key value,将 value 追加到 key 的值的末尾,如:set aa hello,append aa redis,则 get aa // aa == helloredis;
strlen key,返回 key 存储的值的长度,如:set aa hello,strlen aa // 5;
mset key value [key value ....],与 set 一样,不过可以同时设置多个 key,如:mset aa 1 bb 2 cc 3;
mget key [key...],与 get 一样,不过可以同时获取多个 key 的值,如:mget aa bb cc;
getbit key offset,getbit 获取 key 存储的值的 offset 位置的值(0 或 1),如:set aa a,getbit aa 3 // 0,a 的 ascii 码为 97,而 97 的二进制为 01100001,而 01100001 的第三个为 0(从 0 开始);
setbit key offset,setbit 与 getbit 相反,返回值为 key 的旧值;
bitcount key [start] [end],获取 key 存储的值的二进制位为 1 的个数,start,end 可以限制范围,如:set aa hello,bitcount aa 0 1 则返回 7,0 1 计算的是 he 的二进制位为 1 的个数,所以 start,end单位是字节;
bitop operation destkey key [key....],对多个 key 存储的值进行未运算,并将结果存储到 destkey 中。
-
散列类型
散列类型存储的也是字典结构,但字典的字段必须是字符串。
hset key field value,与字符串类型的 set 命令类似,如:hset person age 10 // 存储的字典是 person.age;
hget key field,与字符串类型的 get 命令类似,如:hget person age // 10;
hmset key field value [ field value.... ],与 mset 类似;
hmget key field [ field ... ],与 mget 类似;
hgetall key,返回 key 存储的字典;
hexists key field,判断 key 的字典的字段是否存在;
hsetnx key field value,与 hset 类型,而 hsetnx 则是在 key 不存在时设置,如果 key 存在则不执行;
hincrby key field increment,与 incrby 一样;
hdel key field [ field... ],删除一个或多个字段;
hkeys key,只获取 key 中所有的字段;
hvals key,只获取 key 中所有的字段值;
hlen key,获取 key 的字段数量。
-
列表类型
列表类型是存储一个有序的字符串列表,并且列表类型内部的实现方式是双向链表,所以向列表两端添加元素的复杂度是O(1)。
lpush key value [ value... ],向 key 的左端添加一个或多个元素;
rpush key value [ value... ],向 key 的右端添加一个或多个元素;
lpop key,在 key 的左端弹出一个元素;
rpop key,在 key 的右端弹出一个元素;
llen key,获取 key 中列表的元素个数;
lrange key start stop,获取指定区间的元素;
lrem key count value,根据 count 的值,移除与 value 相等的元素,如果 count > 0 则从表头开始搜索,移除与 value 相等的元素,移除数量为 count;如果 count < 0 则从表尾开始搜索,移除与 value 相等的元素,移除数量为 count 的绝对值;如果 count = 0 则移除所有与 value 相等的值。
lindex key index,根据下标(index)获取元素;
lset key index value,根据下标(index)设置 key 的值;
ltrim key start end,删除指定范围外的所有元素;
linsert key BEFORE | AFTER pivot value,linsert 首先会在列表中从左到右查找值为 pivot 的元素,然后根据第二个参数是 BEFORE 还是 AFTER 来决定将value插入到该元素的前面还是后面;
rpoplpush source destination,此命令会先从 source 列表类型键的右边弹出一个元素,然后将其加入到 destination 列表类型键的左边,并返回这个元素的值;
brpop key [key ...] timeout,此命令是阻塞版的 rpop,有命令才会弹出,无命令将会阻塞,直到有命令弹出;
blpop key [key ...] timeout,与 brpop 一样,不过是 左弹出;
-
集合类型
集合类型与列表类型相似,但是集合类型是无序的,并且集合类型内部实现方式是一个值为空的散列表实现的,所以效率极高。
sadd key member [ member... ],向 key 中添加一个或多个元素;
srem key member [ member... ],在 key 中删除指定的一个或多个元素;
smembers key,获取集合中所有的元素;
sismember key member,判断元素是否在集合中;
sdiff key [ key... ],对多个集合进行差集运算;
sinter key [ key... ],对多个集合进行交集运算;
sunion key [ key... ],对多个集合进行并集运算;
scard key,获取 key 中的元素个数;
sdiffstore destination key [ key... ],与 sdiff 一样,只不过其可将结果存储到 destination 中;
sinterstore destination key [ key... ],同 sdiffstore;
sunionstore destination key [ key... ],同 sdiffstore;
srandmember key [ count ],随机从集合中获取一个元素,如果 count 为正数时,则会随机从集合里获得 count 个不重复的元素,如果coun的值大于集合中的元素个数,则会返回集合中的全部元素。 如果 count 为负数时,则会随机从集合里获得 count 的绝对值的个数的元素,这些元素有可能相同;
spop key,随机从集合中弹出一个元素。
-
有序集合类型
有序集合类型与集合类型一样,只不过是有序的。
zadd key score member [ [score member]... ],将一个或多个元素及其 score 添加到有序集合中;
zscore key member,获得有序集合中某个元素的 score 值;
zrange key start stop [ WITHSCORES ],获得指定区间内的元素,使用 WITHSCORES 则会将 score 值一并返回,获得的元素从小到大排序;
zrevrange key start stop [ WITHSCORES ],与 zrange 一样,不过此命令是从大到小排序;
zrangebyscore key min max [ WITHSCORES ] [ LIMIT offset count ],根据指定范围的 score 值来返回元素,并可以使用 "(" 或 ")",表示不包含值,而 LIMIT 则在获得的元素基础上向后偏移 offset 个元素,并获取 count 个元素;
zincrby key increment member,增加一个元素的 score 值;
zcard key,获取集合中元素的数量;
zcount key min max,获得指定 score 区间的元素个数;
zrem key member [ member.... ],删除一个或多个元素;
zremrangebyrank key start stop,删除指定排名区间内的所有元素;
zremrangebyscore key min max,删除指定 score 区间内的所有元素;
zrank key member,获得元素从小到大的排名;
zrevrank key member,与 zrank 相反;
事务
Redis 的事务不支持回滚操作,当事务中有语法错误时,Redis 不会执行( Redis 可以检测出语法错误 ),但当事务中有运行时错误时,仍然会执行,这需要在开发时确保事务中的语句执行无错。
Redis 执行事务时,即使此时有其他客户端连接并要执行命令,也不会干扰事务执行,等事务执行完成再执行新的命令。
multi,开启事务,此后的命令不会立即执行,会先加入队列;
exec,执行事务中的所有命令;
watch key [ key.... ],监控一个或多个 key ,如果在事务执行之前监控的 key 被修改,则事务不会执行;
unwatch,取消 watch 命令对所有被监控的 key,如果在执行 watch 后,exec 或 discard 命令先执行了的话,就不需要再执行 unwatch 了,因为 exec 会执行事务,因此 watch 命令的效果已经产生了,而 discard 在取消事务的同时也会取消所有对 key 的监控;
对 key 操作的命令
keys pattern,查找所有符合给定模式 pattern 的 key ;
del key [key ...],删除给定的一个或多个 key ;
type key,返回 key 所储存的值的类型;
expire key seconds,给给定 key 设定有效时间,当 key 过期时,key 会被删除。而当 key 在有效期内被重新 set 或 getset 则会清除此 key 的有效时间(重新变为持久),对值操作的命令不受影响,如:lpush、incr、hset等;
ttl key,返回 key 的剩余时间,单位秒;
persist key,取消 key 的有效时间,重新变为持久化;
expireat key timestamp,与 expire 相同,不过此命令是设置 Unix 时间(以秒单位);
pexpireat key milliseconds-timestamp,与 expireat 一样,不过此命令以毫秒为单位的 Unix 时间戳;
sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination],返回或保存给定列表、集合、有序集合 key 中经过排序的元素。排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较;
发布/订阅
订阅者可以订阅多个频道,而发布者可以向订阅者发布消息,并所有订阅者都会接收到。
subscribe channel [channel ...],订阅给定的一个或多个频道的信息;
publish channel message,将信息 message 发送到指定的频道 channel;
psubscribe pattern [pattern ...],订阅一个或多个符合给定模式的频道;
unpsubscribe [channel [channel ...]],指示客户端退订给定的频道,如果没有指定频道则退订所有频道;
提示
更详细的命令解释请参考:http://doc.redisfans.com/
参考
http://doc.redisfans.com/