redis入门指南(二)—— 数据操作相关命令

写在前面

  以下绝大部分内容取材于《redis入门指南》,部分结合个人知识,实践后得出。

  只记录重要,明确,属于新知的相关内容,杜绝冗余和重复。

 

字符串

  1、字符串类型是redis中最常见的类型,目前字符串数据的最大容量是512M。

  2、取值、赋值

    SET key value

    GET key

  当键值不存在时,返回nil

  3、数字递增

    INCR num

    a、redis的键值不支持数字类型,当存储字符串是整数类型时,redis提供了递增命令,当数据类型不是整数时,会返回错误。

    b、递增成功时会返回递增后的值,这个命令适合计数,当然用GET和SET 命令可以组合实现这个功能,但redis的所有命令都是原子操作,不会存在冲突,更加安全。

  4、增加指定整数

    INCRBY key num

    返回值为递增后的值

  5、减少整数

    DECR key 整数递减,和递增命令对应

    DECRBY key num 减少指定整数

  6、增加指定浮点数

    INCRBYFLOAT key num 向键值递增一个双精度浮点数

  7、向尾部追加值

    APPEND key string

    当string包含空格等字符时,需要用引号包含字符串,redis-cli需要以此区分。

  8、获取字符串长度

    STRLEN key

    redis可以存储二进制字符,存储中文时长度会取决于编码方式

  9、同时获取/设置多个字符

    MGET key [key ...]

    MSET key value [key value ...]

1 MSET key1 v1 key2 v2 key3 v3
2 MGET key1 key2 key3
3 MSET key1 v1 

  10、位操作相关命令

    GETBIT key offset 获取,这里的偏移量按位计算,从0开始,返回0或1

    SETBIT key offset value 设置,返回值为设置前的值

    BITCOUNT key [start] [end] 获取字符串中二进制位为1的个数

    BITOP operation destkey key [key ...] 位运算

BITPOS key 1/0 [start] [end] 获取第一个二进制位位0或1的偏移量

a、GETBIT时,索引超过了字符串长度,返回0。

b、SETBIT时,索引超过了字符串长度,会将中间补足为0,同时,索引超出过多,会造成redis卡顿,浪费内存。

c、BITCOUNT 命令可以通过参数控制统计的范围,范围是以字节计的,而非位,并且以0开始。

d、位运算支持的操作有 ANDORXORNOT,且支持对多个键值同时位运算。

e、2.8.7版之后,加入BITPOS 命令,同时可按字节控制范围,但返回的偏移量的值是从头计算的,特别地,当不设置结束位置,且所有位为均为1,且查询0首次出现的位置时,会返回键值长度下一字节第一位的偏移量,这是因为redis会认为键值长度后的值都为0。

 

散列类型

  11、一个散列类型键至多可以包含之多2^32-1个字段。

  12、赋值、取值

HSET key field value

HGET key field

HMSET key field [field value ...]

HMGET key [field ...]

HGETALL key

  13、判断字段是否存在

    HEXISTS key field

    存在返回1,否则返回0。

  14、字段不存在时赋值

    HSETNX key field value

    与HSET类似,但它只在字段不存在时赋值。

  15、增加指定整数

    HINCRBY key field increment

    如果字段不存在会自动建立,并初始化为0,之后增加,返回增加后的数。

  16、删除字段

    HDEL key field [field ...]

    可以删除一个或多个字段,返回被删除的字段个数。

  17、只获取字段名或字段值

    HKEYS key

    HVALS key

  18、获取字段数量

    HLEN key

 

列表类型

  19、内部使用双向列表实现(各种操作的复杂度可想而知),一个列表类型键最多能容纳2^32-1个元素。

20、向列表两端增加元素

LPUSH key value [value ...]

RPUSH key value [value ...]

返回值表示增加后列表的元素数量

21、从列表两边弹出元素

LPOP key

RPOP key

将元素从列表中移除并返回,可配合使用构建成为栈或队列。

22、获取列表长度

  LLEN key

23、获得列表片段

  LRANGE key start end

  当start和end都大于等于0时,左右均为闭区间,且start从0开始,当end大于列表长度时,依然会返回整个列表;当start和end均为负数时,可解释为返回倒数第start个到倒数第end个元素,所以次数end最大为-1;当start索引的位置在end后面时,将返回空列表。

24、删除列表中指定的值

  LREM key count value

  删除列表中count个值为value的元素,返回成功删除的元素个数。当count大于0时,会从列表左边开始删除;当count小于0时,会从列表右边开始删除;当count为0时,会删除所有值为value的元素。

25、获得/设置指定索引值的元素

LINDEX key index

LSET key index value

它们都支持负数作为索引

26、保留列表指定片段

LTRIM key start end

删除指定索引之外的所有元素,支持负数作为索引。

27、向列表中插入元素

LINSERT key BRFORE/AFTER pivot value

在列表中从左至右查找值为pivot的元素,再根据BEFOR或AFTER插入该元素之前还是之后,返回插入列表后的元素个数;当pivot不存在时返回-1。

28、将元素由一个列表转移到另一个

RPOPLPUSH source destination

将source列表右边弹出一个元素,插入到destination列表的左边,并返回这个值,整个过程为原子操作,当source和destination为同一个键时,会将队尾的元素移动到队首(一个可以随时插入的循环队列?)。

 

集合类型

  29、集合中每个元素不同,且无序,最多可存储2^32-1个字符串,内部由值为空的散列表实现。

  30、增加/删除元素

SADD key member [member ...]

SREM key member [member ...]

集合中的元素是不重复的,所以SADD虽然可以添加多个元素,对于已存在的元素会忽略,并返回成功添加的元素数量,SREM返回删除成功的个数。

31、获得集合中所有元素

  SMEMBERS key

32、判断元素是否在集合中

  SISMEMBER key number

33、集合间差集运算

SDIFF key [key ...]

用来计算两个及以上集合的差集,SDIFF A B 表示 A-B = {x | x∈A 且 x∈B}。当有多个集合时,按顺序计算出前两个的差集,再用结果与后面的集合继续运算。

34、集合间交集运算

  SINTER key [key ...]

  对多个集合执行交集运算

35、集合间并集运算

SUNION key [key ...]

对多个集合执行并集运算

36、获得集合中元素个数

  SCARD key

37、进行集合运算并将结果存储

SDIFFSTORE destination key [key ...]

SINTERSTORE destination key [key ...]

SUNIONSTORE destination key [key ...]

38、随机获得集合中的元素

  SRANDMEMBER key [count]

  随机从集合中获得一个元素,还可以传递count参数获得多个元素。当count大于0时,会获取count个不重复的元素,当count大于集合元素总数时返回所有元素;当count小于0时,会随机获取-count个元素,这些元素有可能重复。

39、从集合中弹出一个元素

  SPOP key

 

有序集合类型

  40、有序集合使用跳表和散列表实现,并且可以调整某个元素在集合中的位置(通过修改这个元素的分数)。

  41、增加元素

  ZADD key score member [key member ...]

  如果添加的元素已经存在,则会修改它的分数(这可能会导致这个元素的位置发生变化,也就是重排序),分数可以是整数,也可以是双精度浮点数,支持科学计数法表示,其中+inf和-inf分别表示正无穷和负无穷。

42、获得元素的分数

  ZSCORE key member

43、获得排名在某个范围内的元素

  ZRANGE key start end [WITHSCORES]

  ZREVRANGE key start end [WITHSCORES]

  同样支持负数索引,如果想要带上元素分数可以尾部追加WITHSCORES参数,如果两个元素分数相同,则会按照元素的字典顺序排列。以上两个命令区别在于前者按照从小到大的顺序给出结果,后者相反

44、获得指定分数范围的元素

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

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

  该命令按照元素从小到大顺序返回分数在min和max之间的元素,如果不想包含端点值,可以在分数前加上"("符号,分数支持正无穷和负无穷,WITHSCORES同样表示携带分数一起返回,LIMIT offset count表示在获得的元素基础上向后偏移offset个元素,并且只获取前offset个元素。以上两个命令区别同上。

45、增加某个元素的分数

  ZINCRBY key increment member

  increment可以是整数,小数,正数或负数,如果member不存在,则会先建立一个分数为0的member在执行操作,最后均返回更新后的分数。

46、获得集合中元素的数量

  ZCARD key

47、获得指定分数范围内的元素个数

  ZCOUNT key min max

48、删除一个或多个元素

  ZREM key member [member ...]

  返回成功删除的元素数量

49、按照排名范围删除元素

ZREMRANGEBYRANK key start end

返回成功删除的元素数量

50、按照分数范围删除元素

  ZREMRANGEBYSCORE key min max

51、获得元素的排名

ZRANK key member

ZREVRANK key member

返回的排名从0开始,前者从小到大排序,后者从大到小。

52、计算有序集合的交集

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

  该命令将计算多个有序集合的交集并存储到destination键中,并返回destination键中元素的数量。

  destination键中元素的分数由AGGREGATE参数决定,当AGGREGATE为SUM(默认)时,destination键中元素的分数是每一个参与计算的有序集合中该元素的和;当AGGREGATE为MIN时,destination键中元素的分数是每一个参与计算的有序集合中该元素的最小值;AGGREGATE为时,destination键中元素的分数是每一个参与计算的有序集合中该元素的最大值。

  WEIGHTS参数用来设置每个参与计算的有序集合的权重,每个集合中的元素在参与计算时都会被乘上该集合的权重。

53、计算有序集合的并集

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

  用法同上

 

posted @ 2020-07-01 20:30  Dylan~  阅读(171)  评论(0编辑  收藏