redis总结--常用命令

redis常用命令总结

对key的命令

DEL keyName 删除名为keyName键下的所有内容

DEL name type website 删除多个键,删除成功几个就返回几

EXISTS phone 判断名为phone的键是否存在,若 key 存在返回 1 ,否则返回 0 。

EXPIRE cache_page 30  #设置过期时间为 30 秒,再次执行刷新生存时间,过期后键被删除,单位是秒

EXPIREAT cache 1355292000  # 这个 key 将在 2012.12.12 过期,根据时间戳设置生存时间

PEXPIRE mykey 1500 设置生存时间1500毫秒

PEXPIREAT 以毫秒为单位设置 key 的过期 unix 时间戳

TTL cache_page    # 查看剩余生存时间,秒,当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。

PTTL mykey   # 查看剩余生存时间,毫秒

PERSIST mykey    # 移除 key 的生存时间

KEYS pattern 查找所有符合给定模式 pattern 的 key 。特殊符号用 \ 隔开

KEYS * 匹配数据库中所有 key 。

KEYS h?llo 匹配 hello , hallo 和 hxllo 等。

KEYS h*llo 匹配 hllo 和 heeeeello 等。

KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。

MOVE song 1  # 将 song 移动到数据库 1,如果当前库和目标库都有song键或当前库没有song键move没有任何效果

RENAME message greeting改名 当已经存在时, RENAME 命令将覆盖旧值

RENAMENX key newkey 当且仅当 newkey 不存在时,将 key 改名为 newkey

TYPE key 返回 key 所储存的值的类型。

SCAN 命令用于迭代当前数据库中的数据库键。

SSCAN 命令用于迭代集合键中的元素。

HSCAN 命令用于迭代哈希键中的键值对。

ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。

SCAN 命令、 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令都返回一个包含两个元素的 multi-bulk 回复: 回复的第一个元素是字符串表示的无符号 64 位整数(游标), 回复的第二个元素是另一个 multi-bulk 回复, 这个 multi-bulk 回复包含了本次被迭代的元素。

sscan myset 0 match f* 从游标0开始查找键为myset中符合f*的数据

flushdb //删除当前数据库中的所有Key

flushall//删除所有数据库中的key

DBSIZE 返回当前数据库的 key 的数量。

对string结构数据

SET key value [EX seconds] [PX milliseconds] [NX|XX] 

将字符串值 value 关联到 key 。持有其他值, SET 就覆写旧值,无视类型。

对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。

SETNX key value

将 key 的值设为 value ,当且仅当 key 不存在。

若给定的 key 已经存在,则 返回0和SETNX 不做任何动作。nx:not exist

APPEND key value  key 已存在并且是字符串, 将追加。不存在,和 SET key value 一样。

DECR key 将 key 中储存的数字值减一。不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

DECRBY key decrement

将 key 所储存的值减去减量 decrement 。不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

GET key

返回 key 所关联的字符串值。不存在返回特殊值 nil 。不是字符串类型,返回一个错误。

GETSET key value

将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

当 key 存在但不是字符串类型时,返回一个错误。没有旧值,返回 nil

INCR key

将 key 中储存的数字值增一。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

这是一个string操作,因为Redis没有专用的数字类型。key对应的 string都被解释成10进制64位有符号的整型来执行这个操作。最大值是2的32 或者 64次方,根据你的操作系统是多少位而定

 

INCRBY key increment

将 key 所储存的值加上增量 increment 。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。

值设为负数可以递减

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

 

INCRBYFLOAT key increment

为 key 中所储存的值加上浮点数增量 increment 。

如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。

如果命令执行成功,那么 key 的值会被更新为(执行加法之后的)新值,并且新值会以字符串的形式返回给调用者。

MGET key [key ...]

返回所有(一个或多个)给定 key 的值。

如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。如:MGET redis mongodb mysql

MSET key value [key value ...]

同时设置一个或多个 key-value 对。

如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。

MSET 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况,不可能发生。

MSETNX key value [key value ...]

同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。

MSETNX 是原子性的,因此它可以用作设置多个不同 key 表示不同字段(field)的唯一性逻辑对象(unique logic object),所有字段要么全被设置,要么全不被设置。

SETEX key seconds value

将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。

如果 key 已经存在, SETEX 命令将覆写旧值。

PSETEX key milliseconds value

这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。

STRLEN key

返回 key 所储存的字符串值的长度。

当 key 储存的不是字符串值时,返回一个错误。

 

对Hash结构数据

HSET key field value

将哈希表 key 中的域 field 的值设为 value 。

如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。

如果域 field 已经存在于哈希表中,旧值将被覆盖。

HMSET key field value [field value ...]

同时将多个 field-value (域-值)对设置到哈希表 key 中。

此命令会覆盖哈希表中已存在的域。

如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。

HSETNX key field value

将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。

若域 field 已经存在,该操作无效。

如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

HGET key field

返回哈希表 key 中给定域 field 的值。

HMGET key field [field ...]

返回哈希表 key 中,一个或多个给定域的值。

如果给定的域不存在于哈希表,那么返回一个 nil 值。

因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表。

HEXISTS key field

查看哈希表 key 中,给定域 field 是否存在。

HGETALL key

返回哈希表 key 中,所有的域和值。

HINCRBY key field increment

为哈希表 key 中的域 field 的值加上增量 increment 。

增量也可以为负数,相当于对给定域进行减法操作。

如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。

如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。

对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。

HINCRBYFLOAT key field increment

为哈希表 key 中的域 field 加上浮点数增量 increment 。

如果哈希表中没有域 field ,那么 HINCRBYFLOAT 会先将域 field 的值设为 0 ,然后再执行加法操作。

如果键 key 不存在,那么 HINCRBYFLOAT 会先创建一个哈希表,再创建域 field ,最后再执行加法操作。

HKEYS key

返回哈希表 key 中的所有域。

HVALS key

返回哈希表 key 中所有域的值。

HLEN key

返回哈希表 key 中域的数量。

对list结构数据

LSET key index value

将列表 key 下标为 index 的元素的值设置为 value 。

当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。

LINDEX key index

返回列表 key 中,下标为 index 的元素。

下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

如果 key 不是列表类型,返回一个错误。

LLEN key

返回列表 key 的长度。

如果 key 不存在,则 key 被解释为一个空列表,返回 0 .

如果 key 不是列表类型,返回一个错误。

RPUSH key value [value ...]

将一个或多个值 value 插入到列表 key 的表尾(最右边)。

如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c

LPOP key

移除并返回列表 key 的头元素。

RPOP key

移除并返回列表 key 的尾元素。

LPUSH key value [value ...]

将一个或多个值 value 插入到列表 key 的表头,原子性地执行

如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头

如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。

当 key 存在但不是列表类型时,返回一个错误。

LPUSHX key value

将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。

和 LPUSH 命令相反,当 key 不存在时, LPUSHX 命令什么也不做。

LRANGE key start stop

返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。包括 stop 下标的元素

LREM key count value

根据参数 count 的值,移除列表中与参数 value 相等的元素。

count 的值可以是以下几种:

count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。

count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。

count = 0 : 移除表中所有与 value 相等的值。

LTRIM key start stop

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

举个例子,执行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。

RPOPLPUSH source destination

命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:

将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。

将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。

RPUSHX key value

将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。

和 RPUSH 命令相反,当 key 不存在时, RPUSHX 命令什么也不做。

 

Blpop 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

BLPOP LIST1 LIST2 .. LISTN TIMEOUT

如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

BLPOP list1 100 在以上实例中,操作会被阻塞,如果指定的列表 key list1 存在数据则会返回第一个元素,否则在等待100秒后会返回 nil 。timeout设置为0表示永不超时

 

RPOPLPUSH source destination

原子性地返回并删除存储在source列表的最后一个元素(尾),并将该元素推入并存储为destination列表的第一个元素(头)。

如果source不存在,则返回值nil,并且不执行任何操作。如果source和destination相同,则操作等同于从列表中移除最后一个元素,并将其作为列表的第一个元素推入,因此可以将其视为列表回转命令(rotation command)。

返回值:获取并推入的元素

对set结构数据

SADD key member [member ...]

将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。

假如 key 不存在,则创建一个只包含 member 元素作成员的集合。

当 key 不是集合类型时,返回一个错误。

SCARD key

返回集合 key 的基数(集合中元素的数量)。 key 不存在时,返回 0 。

SDIFF key [key ...]

返回一个集合的全部成员,该集合是所有给定集合之间的差集。

不存在的 key 被视为空集。

SDIFFSTORE destination key [key ...]

这个命令的作用和 SDIFF 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集。

如果 destination 集合已经存在,则将其覆盖。

destination 可以是 key 本身。

SINTER key [key ...]

返回一个集合的全部成员,该集合是所有给定集合的交集。

不存在的 key 被视为空集。

当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。

SINTERSTORE destination key [key ...]

这个命令类似于 SINTER 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。

如果 destination 集合已经存在,则将其覆盖。

destination 可以是 key 本身。

SUNION key [key ...]

返回一个集合的全部成员,该集合是所有给定集合的并集。

不存在的 key 被视为空集。

SUNIONSTORE destination key [key ...]

这个命令类似于 SUNION 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。

如果 destination 已经存在,则将其覆盖。

destination 可以是 key 本身。

SISMEMBER key member

判断 member 元素是否集合 key 的成员。

SMOVE source destination member

将 member 元素从 source 集合移动到 destination 集合。

SMOVE 是原子性操作。

SPOP key

移除并返回集合中的一个随机元素。

SRANDMEMBER key [count]

如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素。

从 Redis 2.6 版本开始, SRANDMEMBER 命令接受可选的 count 参数:

如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。

如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

SREM key member [member ...]

移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

SREM key member [member ...]

移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

 

对SortedSet结构数据

ZADD key score member [[score member] [score member] ...]

将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

score 值可以是整数值或双精度浮点数。

ZCARD key

返回有序集 key 的基数(集合元素数量)。

ZCOUNT key min max

返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。

ZINCRBY key increment member

为有序集 key 的成员 member 的 score 值加上增量 increment 。

可以通过传递一个负数值,

ZRANGE key start stop [WITHSCORES]

返回有序集 key 中,指定下标区间内的成员。

其中成员的位置按 score 值递增(从小到大)来排序。

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。

 

具有相同 score 值的成员按字典序

可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。

可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。

ZRANK key member

返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。

排名以 0 为底,也就是说, score 值最小的成员排名为 0 。

ZREM key member [member ...]

移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

ZREMRANGEBYRANK key start stop

移除有序集 key 中,指定排名(rank)区间内的所有成员。

区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。

ZREMRANGEBYSCORE key min max

移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。

ZREVRANGE key start stop [WITHSCORES]

返回有序集 key 中,指定区间内的成员。

其中成员的位置按 score 值递减(从大到小)来排列。

具有相同 score 值的成员按字典序的逆序

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。

具有相同 score 值的成员按字典序的逆序

ZREVRANK key member

返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。

ZSCORE key member

返回有序集 key 中,成员 member 的 score 值。

如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之 和 。

WEIGHTS

使用 WEIGHTS 选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。

如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1 。

AGGREGATE

使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。

 

默认使用的参数 SUM ,可以将所有集合中某个成员的 score 值之 和 作为结果集中该成员的 score 值;使用参数 MIN ,可以将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值;而参数 MAX 则是将所有集合中某个成员的 最大 score 值作为结果集中该成员的 score 值。

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和.

 

对bitmap

 

SetBit语法: Setbit KEY_NAME OFFSET

GetBit语法: Getbit KEY_NAME OFFSET

bitcount key start end统计start到end之间的1的数量

bitpos key bit start end返回0/1在start到end之间第一次出现的位置

也可以用set/get设置或获取

分为[零存整取]、[零存零取]、[整存零取]

 

[零存整取]的情况:setbit key为tk

//在第二位存“1”
127.0.0.1:6379> setbit tk 1 1
(integer) 0
//在第三位存"1"
127.0.0.1:6379> setbit tk 2 1
(integer) 0
//在第五位存"1"
127.0.0.1:6379> setbit tk 4 1
(integer) 0
//整个字节数组取出来
127.0.0.1:6379> get tk
"h"
127.0.0.1:6379>

 

[零存零取]的情况:

//在第二位加“1”位
127.0.0.1:6379> setbit tk 1 1
(integer) 1
//在第三位加“1”位
127.0.0.1:6379> setbit tk 2 1
(integer) 1
//在第五位加“1”为
127.0.0.1:6379> setbit tk 4 1
(integer) 1
//取出第二位
127.0.0.1:6379> getbit tk 1
(integer) 1
//取出第三位
127.0.0.1:6379> getbit tk 2
(integer) 1
//取出第五位
127.0.0.1:6379> getbit tk 4
(integer) 1
//取出第六位
127.0.0.1:6379> getbit tk 5
(integer) 0
127.0.0.1:6379>

 

[整存零取]

//存整个字符
127.0.0.1:6379> set tk h
OK
//获取一下第二位
127.0.0.1:6379> getbit tk 1
(integer) 1
//获取一下第三位
127.0.0.1:6379> getbit tk 2
(integer) 1
//获取一下第五位
127.0.0.1:6379> getbit tk 4
(integer) 1
//获取一下第六位
127.0.0.1:6379> getbit tk 5
(integer) 0
127.0.0.1:6379>

 

特殊情况:

127.0.0.1:6379> setbit tk 0 1
(integer) 1
127.0.0.1:6379> setbit tk 1 1
(integer) 1
//不代表任何字符,返回16进制符号
127.0.0.1:6379> get tk
"\xc0"
127.0.0.1:6379>

 

查找统计

Redis有提供查询和统计函数,分别是bitpos和bitcount函数,其语法分别为:

bitcount语法:bitcount key [start end]

 

bitpos语法:bitpos key bit [start] [end]

127.0.0.1:6379> set tk hello
OK
//从第1个字符h算起,第一个“1”位的位置
127.0.0.1:6379> bitpos tk 1 1 1
(integer) 9
//从第2个字符2算起,第一个“1”位的位置
127.0.0.1:6379> bitpos tk 1 2 2
(integer) 17
//第一个“0”位
127.0.0.1:6379> bitpos tk 0
(integer) 0
//第一个“1”位
127.0.0.1:6379> bitpos tk 1
(integer) 1
//统计tk“1”的数量
127.0.0.1:6379> bitcount tk
(integer) 21
//第一个字符h的“1”位数量
127.0.0.1:6379> bitcount tk 0 0
(integer) 3
//第一个字符h和第二个字符e“1”位的数量
127.0.0.1:6379> bitcount tk 0 1
(integer) 7

对HyperLogLog结构数据

PFADD key element [element ...] 添加指定元素到 HyperLogLog 中。

PFCOUNT key [key ...] 返回给定 HyperLogLog 的基数估算值。

PFMERGE destkey sourcekey [sourcekey ...] 将多个 HyperLogLog 合并为一个 HyperLogLog

 

比如在网站中我们有两个内容差不多的页面,运营说需要这两个页面的数据进行合并。其中页面的 UV 访问量也需要合并,那这个时候 pfmerge 就可以派上用场了。

edis 127.0.0.1:6379> PFADD w3ckey "redis"
1) (integer) 1
redis 127.0.0.1:6379> PFADD w3ckey "mongodb"
1) (integer) 1
redis 127.0.0.1:6379> PFADD w3ckey "mysql"
1) (integer) 1
redis 127.0.0.1:6379> PFCOUNT w3ckey
(integer) 3

 

因为这3个元素都不相同,所以基数为3

发布订阅相关命令

PUBSUB CHANNELS  查看活跃频道列表

PUBSUB NUMSUB [channel-1 ... channel-N] 查看频道的订阅者数量, 订阅模式的客户端不计算在内。

如:PUBSUB NUMSUB mychannel-1 mychannel-2

Psubscribe  订阅一个或多个符合给定模式的频道。

每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道

如:PSUBSCRIBE my*

Subscribe 命令用于订阅给定的一个或多个频道的信息

如:SUBSCRIBE mychannel

Publish 将信息发送到指定的频道,返回接收到消息的订阅者数量

如:PUBLISH mychannel “message”

其他命令

查看key对应的redisObject的encoding

OBJECT ENCODING key

 

posted @ 2022-12-30 15:40  星光闪闪  阅读(84)  评论(0)    收藏  举报