1.redis常用的客户端命令行参数(redis-cli)
1)-h:指定被连接的ip
2)-p:指定连接的端口
3)-a:连接的用户密码
4)--stat:获取redis的诊断数据
5)--bigkeys:对redis中的key进行采样,寻找较大的key,能根据采样获得更多的数据统计
2.String类型(字符串、整数、浮点数或者任何二进制格式数据)常用命令
1)set key value [EX seconds] [PX milliseconds] [NX|XX]:为key设置值value
*EX代表设置超时时间,单位为秒
*PX同样代表超时时间,单位为毫秒
*NX代表只有当key不存在时才会设置值
*XX代表只有key存在时才会设置
*如果成功,返回ok,失败返回空(nil)
2)get key:返回key对应的值,key不存在时返回空
3)mget key [key ...]:返回多个key的value
4)mset key value [key value ...]:设置多个key value值
*如果某个key存在,则新值覆盖旧值
*整个操作是原子操作,要么同时成功,要么同时失败
*如果key存在不想覆盖,采用msetnx命令
*总是返回ok,此操作不会失败
5)append:字符串拼接
*如果key已经存在,并且值是string类型,就把新的值追加到原来值的后面
*如果key不存在,就类似set的功能
*返回的是字符的长度
6)incr key:自增操作
*对值进行加一操作,但是只有当值是integer类型才能操作,如果不是就会出错
*最大值为64位有符号值
*返回值为加完的结果
*此操作为原子操作
7)decr key:自减操作
*对值进行减一操作,但是只有当是integer类型才能操作,如果不是就会出错
*如果key不存在,会对此key赋值为0,再做操作
*操作能操作的数被限制?64位有符号值
*返回操作后的结果值
8)decrby key decrment:对值进行减法,减去指定的值
*对值进行减法操作,减去decrement这个值,但是只有当值是integer类型才能操作,如果不是就会出错
*与decr类似
9)incrby key increment:对值进行加法,加上指定的值
*对值进行加法操作,加上decrement这个值,但是只有当值是integer类型才能操作,如果不是就会出错
*与incr类似
10)incrbyfloat key increment:对浮点值进行加法,加上指定的值
*与incrby规则一样,但是操作的是浮点数,increment可以是整数或浮点数
*返回操作后的结果值
11)getset key value:设置并获取旧值
*原子操作,设置新值的时候,把旧值返回给调用者
*如果key不是String类型就会报错
*此命令一般与incr命令联合使用
12)strlen key:获取key对应value的字符串长度
*负号算一个长度
*如果值不是string类型,就会报错
*key不存在时返回0
13)getrange key start end:截取字符串
*2.0版本前叫做substr
*返回字符串类型值的子串
*start和end的值可以取负数,表示倒数第几个,-1表示最后一个字符
*返回区间字符串
14)getbit key offset:获取字符串二进制对应位置的值
*可以获得一个字符串类型键指定位置的二进制位的值(0或1),索引从0开始
*例如:set a 0,redis会将0看成字符串“0”,对应的二进制为00110000(十进制的48),getbit a 2和getbit a 3会返回1,其余返回0(最高位为第0位)
15)setbit key offset value:设置字符串对应二进制位上的值
*设置字符串类型键指定位置的二进制位的值,返回值是该位置的旧值
16)bitcount key:返回该key对应value的二进制中为1的个位数
3.list类型(链表)常用命令
1)lpush key value [value ...]:从队列的左边插入值
*把所有的值从list的头部插入,如果key不存在就创建一个空的队列
*如果key不是list类型,则会出现错误
*元素从左到右依次插入
*返回list的长度
2)lpushx key value:key不存在不会创建
*从list头部插入一个值,当key不存在时则不会产生插入动作
*返回list的长度
3)lpop key:从左边移除value
*移除list的第一个节点,并返回节点数据
4)blpop key [key ...] timeout:从队列左边阻塞式弹出元素
*以阻塞的方式从以上的key里面移除并返回第一个值,只移除和返回第一个非空的key
*timeout的单位是秒,如果是0,则表示一直阻塞
*只要list的长度为0或者key不存在就会阻塞
*当key是多个时,比如blopo key1 key2,则只要有一个key对应的list不是非空,则不会阻塞
*返回值依次包含key、弹出的值、阻塞的时长
*超时时,如果还没有值可以返回,则返回nil
5)llen key:返回对应key的list中值得数量,如果key不存在或者list为空,则返回0
6)rpush key value [value ...]:从队列右边插入值
*把所有的值从list尾部插入,如果key不存在就创建一个空的队列
*如果key不是list类型,则会出现错误
*元素从右往左依次插入
*返回list的长度
7)rpushx key value:key不存在不会创建
*从list尾部插入一个值,当key不存在时,不会产栺插入动作
*返回list的长度
8)rpop key:从右边移除value
*移除list的最后一个节点,并返回节点数据或者nil
9)brpop key [key ...] timeout:从队列右边阻塞式弹出元素(与blpop一样)
10)rpoplpush source destination:
*从source对应的key的list尾部移除一个值,并且加入到destination指定的list的头部
*此操作是一个原子操作
*如果source的list不存在,则返回nil,但是不会做任何操作
*如果source和destination是一样的,则等于把list的尾部数据插入到头部
*返回被弹出和插入的数据
11)brpoplpush source destination timeout:阻塞式
*功能与rpoplpush相似,但是当source为空时,将会进行阻塞
*timeout单位为秒,如果为0表示一直阻塞
12)lindex key index:获取指定下标的值
*返回key指定的队列中位置为index的值
*下标与数组一样,从0开始,负数表示倒数(-1表示倒数第一个)
13)linsert key before|after pivot value
*把value的值插入key对应的list中去,位置在pivot这个值得前面(before)或者后面(after)
*如果key不存在,则不会产生任何操作
*如果pivot对应的值不存在则返回-1,否则就返回插入后的list的长度
*如果pivot对应的值存在多个,则取左边第一个
14)lrange key start stop:队列左边遍历
*返回一个区间的值,从list的头(左)到尾(右),start和stop为下标
*如果start大于list长度,就会返回空
*如果stop大于list长度,则会以list最后一个值为准
*下标与数组一样,从0开始,负数表示倒数(-1表示倒数第一个)
15)lrem key count value:删除
*删除值等于value的count个元素
*如果count大于0,则从头到尾数(从左到右)
*如果count小于0,则从尾到头数(从右到左)
*如果count等于0,则删除所有的值等于value的元素
16)ltrim key start stop:裁剪
*对key指定的list进行裁剪,即取子集
*如果start>list的长度或者start>end,将会返回一个空列表,然后导致key被删除
*如果end大于list的长度,则取list的长度
*执行完成返回ok
*下标与数组一样,从0开始,负数表示倒数(-1表示倒数第一个)
17)lset key index value:修改对应下标的值
*修改key对应的list中,位置为index的元素的值为value
*当index超过list的范围,将会出现错误
4.set类型(无序集合,类似hashSet)常用命令
1)sadd key member [member ...]:向集合内添加元素
*将一个或多个member元素加入到集合key中,已经存在集合的member元素将被忽略
*如果key不存在,则创建一个只包含member元素作为成员的集合
*当key不是集合类型时,返回一个错误
*返回被添加到集合中的新元素的数量,不包括被忽略的元素
2)sismember key member:判断是否是集合中的元素
*判断member元素是否是集合key中的成员
*如果member元素是集合的成员,返回1
*如果member元素不是集合的成员,或者key不存在,返回0
3)spop key:随机移除元素
*移除并返回集合中的一个随机元素
*当key不存在或key是空集时,返回nil
4)srandmember key [count]:随机返回元素,不会删除
*如果命令执行时,只提供了key参数,那么返回集合中的一个随机元素
*redis 2.6之后,可接受count参数
*如果count为正数,且小于集合基数,那么命令返回一个包含count个元素的数组,数组中的元素各不相同;如果count大于等于集合基数,那么返回整个集合
*如果count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值
5)srem key member [member ...]:移除集合元素
*移除集合key中的一个或多个member元素,不存在的member元素会被忽略
*当key不是集合类型,返回一个错误
*redis 2.4之前,srem只接受单个member值
*返回被成功移除元素的数量,不包括被忽略的元素
6)smove source destination member:
*将member元素从source集合移动到destination集合
*该操作是原子操作
*如果source集合不存在或不包含指定的member元素,则smove命令不执行任何操作,仅返回0;否则member元素从source集合中被移除,并添加到destination集合中去
*当destination集合已经包含member元素时,smove命令只是简单地将source集合中的member元素删除
*当source或destination不是集合类型是,返回一个错误
*如果member元素被成功移除,返回1。如果member元素不是source集合元素并且没有任何操作对destination集合执行,那么返回0
7)smembers key:返回集合key中所有元素
*生产环境不可使用
*不存在的key被视为空集合
8)sscan key cursor [match pattern] [count count]:类似scan命令
9)sinter key [key ...]:
*只有一个key时,返回指定全部成员;如果有多个key,则返回指定集合的交集
*不存在的key被视为空集
*当给定的所有集合中有一个空集时,结果也为空集
10)sinterstore destination key [key ...]:取交集,将结果保存到指定集合destination中
*这个命令类似于sinter key [key ...]命令,但它将结果保存到destination集合,而不是简单地返回结果集
*如果destination集合已经存在,则将其覆盖
*destination可以是key本身
*返回结果集中的成员数量
11)sunion key [key ...]:并集
*只有一个key时,返回指定全部成员;如果有多个key,则返回指定集合的并集
*不存在的key被视为空集
*返回并集成员的列表
12)sunionstore destination key [key ...]:取并集,将结果保存到指定集合destination中
*这个命令类似于sunion key [key ...]命令,但它将结果保存到destination集合,而不是简单地返回结果集
*如果destination集合已经存在,则将其覆盖
*返回结果集中的成员数量
13)sdiff key [key ...]:
*只有一个key时,返回指定全部成员;如果有多个key,则返回指定集合之间的差集
*不存在的key被视为空集
*返回交集成员的列表
14)sdiffstore destination key [key ...]:
*这个命令类似于sdiff key [key ...]命令,但它将结果保存到destination集合,而不是简单地返回结果集
*如果destination集合已经存在,则将其覆盖
*destination可以是key本身
*返回结果集中的成员数量
5.hash类型(包含键值对的列表)常用命令
1)hset key field value:
*Key代表的是一个hash表,field为hash表的key,value为hash表中key对应的value
*如果key不存在,则创建一个key及对应的hash表
*如果field存在,则把value覆盖原来的值
*如果field是新加入,并且设置成功,则返回1;如果field已经存在,成功更新旧值,则返回0
2)hmset key field value [field value ...]:
*与hset类似,但是一次设置多个值
*返回ok
3)hsetnx key field value:
*Key代表的是一个hash表,field为hash表的key,value为hash表中key对应的value
*field不存在时才设置
*如果field不存在,则设置值,返回1;如果field存在,则返回0,不做任何操作
4)hkeys key:
*获取key对应的map的所有key
*返回key的列表
5)hlen key:
*获取key对应的map的field的数量
6)hget key field:
*获取某个field的值,key代表的是一个hash表,field为hash表的key
*如果key不存在或者field不存在,则返回nil,否则返回值
7)hmget key field [field ...]:批量获取值
*获取key对应的map的多个field的值
*如果key不存在或则field不存在,返回nil,否则返回值列表
8)hvals key:
*返回key对应的map的所有值列表
9)hstrlen key field:
*返回field对应的值的长度
*当key不存在或者field不存在,则返回0
10)hdel key field [field ...]:删除
*删除key对应的map的field,可以删除多个field
*此操作是原子性操作
*返回删除的值得数量
11)hexists key field:判断是否存在
*判断key指定的map中是否存在field属性
*如果key不存在或则field不存在则返回0,否则返回1
12)hgetall key:
*返回key对应的map的所有的key-value对,按照key然后下一行是value的形式展示
13)hincrby key field increment:
*对field指定的值加上increment,但是值必须是integeter类型,范围在64位有符号的数
*返回增加后的结果
14)hincrbyfloat key field increment:
*对field指定的值加上increment,但是原来的值必须是float类型,范围在64位有符号数
*如果key不存在或则field不存在则返回0,否则返回1
15)hscan key cursor [match pattern] [count count]:
*与scan类似,但是迭代的是key对应的map里面的值
6.zset类型(有序集合,成员member和分数sorce之间的有序映射)常用命令
1)zadd key [nx|xx] [ch] [incr] score member [[score member] [score member] ...]:添加分值以及对应成员
*将一个或多个member元素及其score值加入到有序集key当中
*如果某个member已经是有序集的成员,那么更新这个member的score值,并通过重新插入这个member元素来保证该member在正确的位置上
*score值可以是整数值或双精度浮点数
*如果key不存在,则创建一个空的有序集并执行zadd操作
*当key不是有序集类型时,返回一个错误
*xx表示只有member存在才能操作,也就是只更新score
*nx表示不更新,只做插入,即如果有成员存在,此操作会失败,不存在就加入
*ch表示返回的值不是新怎元素的数量而是发生变化的元素的数量,包括:新怎元素和已经存在的但是score被修改的元素
*incr当指定此属性时,后面只能有一对score-member,表示给member成员的score增加对应的值
*redis 2.4之前,zadd每次只能添加一个元素
2)zscore key member:查询分值
*返回有序集key中,成员member的score值
*如果member元素不是有序集key的成员,或key不存在,返回nil
*返回值是字符串类型
3)zincrby key increment member:
*为有序集key的成员member的score值加上增量increment
*increment可以是负数值,当其为负数时score会减去对应的值
*当key不存在或member不是key的成员时,zincrby key increment member等同于zadd key increment member
*当key不是有序集时,返回一个错误
*score可以是整数值或双精度浮点数
*返回member成员的新score值,以字符串形式表示
4)zcard key:
*返回有序集key的基数(member的个数)
*key不是有序集合类型时报错
*key不存在时返回0
5)zcount key min max:
*返回有序集key中,score值在min和max之间(包含)的成员数量
6)zrange key start stop [withscores]:
*返回有序集key中,指定区间内的成员列表(withscores输出时带上分数)
*成员的位置按score值递增排序,相同的score按字典顺序排序
*如果start大于list长度,就会返回空
*如果stop大于list长度,则会以list最后一个值为准
*下标与数组一样,从0开始,负数表示倒数(-1表示倒数第一个),且都包含
7)zrevrange key start stop [withscores]:功能与zrange一样,不同点是顺序按score递减
8)zrangebyscore key min max [withscores] [limit offset count]:
*功能与zrange一样,min和max用来筛选分数score,即取分数在min和max之间的所有成员
*可以通过-inf和+inf表示无穷小和无穷大
*limit offset count与mysql的分页一样
9)zrevrangebyscore key max min [withscores] [limit offset count]:功能与zrangebyscore一样,不同点是按score倒序
10)zrank key member:
*返回有序集key中成员member的排名,score按照递增排序进行计算
*排名从0开始,与数组一样
*如果member是有序集key的成员,返回member的排名;如果member不是有序集key的成员,返回nil
*key不是有序集报错
11)zrevrank key member:与zrank功能一样,不同是按照score倒序计算
12)zrem key member [member ...]:
*移除一个或多个成员,不存在忽略
*key不是有序集类型时,返回一个错误
*redis 2.4之后才可删除多个
*返回移除成员的数量
13)zremrangebyrank key start stop:
*移除有序集key中,成员排名(rank)区间内的所有成员,排名按score正序来计算,包含start和stop下标
*返回被移除成员的数量
14)zremrangebyscore key min max:删除score在min和max之间(包含)的成员
15)zrangebylex key min max [limit offset count]:
*该命令用于所有成员的分数都相同时,采用字典顺序进行排序时
16)zlexcount key min max:所有成员分数都相同时,返回min和max范围内的元素数量
17)zremrangebylex key min max:分值相同时删除
18)zscan key cursor [match pattern] [count count]:与scan相同
19)zunionstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]:
*计算一个或多个有序集的并集,key的数量必须用numkeys来指定,并将结果存储到destination中
*默认情况,结果集中某个成员的score值是所有给定集合下该成员score值之和(可通过aggregate来指定)
*weigths选项可以为每一个有序集指定一个乘法因子(在进行aggregate之前乘上该因子)
*返回保存到destination结果集中的基数
20)zinterstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]:
*功能与zunionstore唯一不同点是取交集
7.其余操作
1)del key [key ...]:删除
*删除指定的key,如果key不存在,对此key的操作将会忽略
*返回被删除的key的个数
2)dump key:
*按照rdb的存储格式把指定的key的值序列化并返回给客户端,次序列化值里面不包括ttl信息
*序列化的值中包含校验码
*不同版本的rdb实现可能存在差异,所以此处序列化的数据可能不对
*key不存在就返回nil
3)restore key ttl serialized-value [replace]
*把通过dump命令序列化的值再存进去
*如果没有带replace,且key已经存在,会出现错误
*会检查校验值(checksum),如果不满足会返回错误
*成功返回ok
4)exists key [key ...]:
*判断key是不是存在,如果存在,则返回值加一
*从3.03版本开始支持多个key,以前版本只支持一个
*如果key重复,则返回值会重复判断和加一
5)expire key seconds:设置超时时间
*设置key的超时时间,单位是秒;当达到超时时间后,key会被删除
*这个超时时间不能被del、set、getset和*store命?修改或者改变,其它命?并?会改变超时设置或者超时时长
*可以通过命令persist把超时设置取消
*当key被rename命令修改后,超时设置的特性还是不会改变
*设置成功返回1,key不存在或者超时时间设置失败返回0
6)persist key:
*移除key的超时设置
*返回1表示移除成功,返回0表示key不存在或者key上没有设置超时时间
7)expireat key timestamp
*设置key的超时时间,与expire相似,但是设置的是精确时间
*设置成功返回1,key不存在或者超时时间设置失败返回0
8)keys pattern:
*返回符合pattern的所有的key
*在生产环境上尽量少用,除非数据比较少,因为此操作会影响性能,可以用scan或者sets来达到查找key的业务需求
* *代表任意字符,?代表单个字符,[ae]代码a或者e
*[^e]代表不等于e,[a-d]代表a,b,c,d
9)ttl key:查看超时时间
*返回key对应的超时时间,还剩余多少时间
*如果key不存在,返回-2
*如果key上没有设置超时时间,返回-1
10)pttl key:
*与ttl功能一致,但是返回的是毫秒
11)scan cursor [match pattern] [count count]:
*基于游标的方式返回当前数据库的key,因为每次返回的数据不多,也不会阻塞服务器,所以可以在生产环境中使用
*cursor表示的是游标的位置,一般从0开始,返回的数据中第一行代表的就是下一次游标的位置,当返回的下一行游标是0时,代表本次迭代全部完成;此游标值不是一个连续标准值,比如5,10,15是连续标准
*MATCH pattern类似keys中模式一样,返回指定模式的迭代游标
*count代表每次迭代返回的数据条数,默认是10,但是它只是一个提示,实现时并没有严格的保证,实际返回值可能会比这个值多一些,但是不会多太多
*与keys或者smembers命令相比,scan返回的结果不稳定,在执行迭代的过程中,如果key发生变化,比如删除或者新增,则返回的结果可能存在以下几个问题:1.可能会返回重复的Key,所以,使用此命令时,业务系统需要判断重复;2.如果在迭代过程中,有key被删除了,但是在迭代完成前没有被添加进来,则此key并不会出现在迭代中。