文章目录
  1. 1. 数据结构
    1. 1.1. String
      1. 1.1.1. 单个元素的设置和查询
        1. 1.1.1.1. SET
        2. 1.1.1.2. GET
      2. 1.1.2. 多个元素的设置和查询
        1. 1.1.2.1. MSET
        2. 1.1.2.2. MGET
      3. 1.1.3. 通用元素的操作
        1. 1.1.3.1. EXIST
        2. 1.1.3.2. DEL
        3. 1.1.3.3. 查询数据类型
      4. 1.1.4. 过期时间的操作
        1. 1.1.4.1. EXPIRE
        2. 1.1.4.2. PEXPIRE
        3. 1.1.4.3. TTL
        4. 1.1.4.4. PTTL
    2. 1.2. Lists
      1. 1.2.1. 常规操作
        1. 1.2.1.1. LPUSH
        2. 1.2.1.2. RPUSH
        3. 1.2.1.3. LPOP
        4. 1.2.1.4. RPOP
        5. 1.2.1.5. LRANGE
        6. 1.2.1.6. LTRIM
      2. 1.2.2. 阻塞队列操作
        1. 1.2.2.1. 使用场景
        2. 1.2.2.2. LPUSH + RPOP 组合有什么问题
        3. 1.2.2.3. BRPOP
        4. 1.2.2.4. BLPOP
        5. 1.2.2.5. 两个list元素的转移
        6. 1.2.2.6. 两个list元素的转移 - 阻塞队列版
    3. 1.3. Hashs
      1. 1.3.1. HMSET
      2. 1.3.2. HGET
      3. 1.3.3. HMGET
      4. 1.3.4. HGETALL
      5. 1.3.5. HINCRBY
    4. 1.4. Sets
      1. 1.4.1. SADD
      2. 1.4.2. SCARD
      3. 1.4.3. SMEMBERS
      4. 1.4.4. SISMEMBER
      5. 1.4.5. SREM
      6. 1.4.6. SPOP
      7. 1.4.7. SMOVE
      8. 1.4.8. SINTER
      9. 1.4.9. SUNION
      10. 1.4.10. SDIFF
      11. 1.4.11. SINTERSTORE
      12. 1.4.12. SUNIONSTORE
      13. 1.4.13. SDIFFSTORE
    5. 1.5. Order Sets
      1. 1.5.1. SADD -> ZADD
      2. 1.5.2. ZRANGE
      3. 1.5.3. ZREVRANGE
    6. 1.6. Bitmaps
    7. 1.7. HyperLogLogs

数据结构

String

单个元素的设置和查询

SET

SET <key> <value> <option>

这里的option 有:

  • nx

只有key不存在的时候才更新value

  • xx

只有key存在的时候才会更新value

  • ex

设置过期时间(时间单位秒)

  • px

设置过期时间(时间单位毫秒)

GET

根据 key 获取 value

GET <key>

多个元素的设置和查询

MSET

MSET <key1> <value1> <key2> <value2> ...

MGET

MGET <key1> <key2>

通用元素的操作

EXIST

EXISTS <key>

DEL

根据key删除数据

DEL <key>

查询数据类型

TYPE <key>

过期时间的操作

EXPIRE

设置key对应的数据过期时间(秒)

EXPIRE <key> <seconds>

PEXPIRE

设置key对应的数据过期时间(毫秒)
PEXPIRE <key> <milliseconds>

TTL

查看对应key的过期时间(秒)

TTL <key>

PTTL

查看对应key的过期时间(秒)

PTTL <key>

Lists

常规操作

LPUSH

在List的head添加数据

LPUSH <list_name> <element>

RPUSH

在List的tail添加数据

RPUSH <list_name> <element>

LPOP

从List的head 移除并返回数据

LPOP <list_name>

RPOP

从List的tail 移除并返回数据

RPOP <list_name>

LRANGE

按照指定范围获取列表元素

LRANGE <list_name> <start-index> <end-index>

LTRIM

按照指定范围截取并生成新的队列

LTRIM <list_name>

注:该操作的算法复杂度为 $O(n)$

阻塞队列操作

使用场景

生产者 - 消费者模型

LPUSH + RPOP 组合有什么问题

如果list为空的情况下,消费者需要轮询(polling)该列表(过一段timeout时间后再去执行RPOP命令), 这样做很低效

  • 执行的是无意义的命令
  • 如果timeout的数是一个比较小的数,这会使Redis执行更多无意义的命令
BRPOP

BRPOP <list_name>

BLPOP

BLPOP <list_name>

两个list元素的转移

RPOPLPUSH <source_list_name> <destination_list_name>

两个list元素的转移 - 阻塞队列版

BRPOPLPUSH <source_list_name> <destination_list_name>

Hashs

HMSET

给一个hash 元素设置多个filed的value值

HMSET <hash_key> <name1 filed1 name2 filed2 ...>

HGET

获取一个hash元素的某一个filed的value值

HGET <hash_key> <name>

HMGET

获取一个hash元素的某一个filed的多个value值

HMGET <hash_key> <name1> <name2>

HGETALL

获取一个hash元素的所有filed-value

HGETALL <hash_key>

HINCRBY

给一个hash元素的某一个filed(整数)加数

HINCRBY <hash_key> <filed> <increse_by_value>

full list of hash commands in the documentation

Sets

SADD

向无序set添加元素

SADD <key> <value1 value2 ...>

SCARD

获得set的元素数量

SCARD <key>

SMEMBERS

列出set的所有元素

SMEMBERS <key>

SISMEMBER

判断元素是否在set中存在

SISMEMBER <key> <value>

SREM

从set中删除元素

SREM <key> <value1 value2 ...>

SPOP

从set中移除并返回元素

SPOP <key> <count>

SMOVE

从source set 移动一个元素到 destination set

SMOVE <source_key> <destination_key> <value>

SINTER

set求交集

SINTER <key1 key2 ...>

SUNION

set求并集

SUNION <key1 key2 ...>

SDIFF

set求差集

SDIFF <key1 key2 ...>

SINTERSTORE

set求交集并存储结果到新set

SINTERSTORE <destinatio_key> <key1 key2 ...>

SUNIONSTORE

set求并集

SUNIONSTORE <destinatio_key> <key1 key2 ...>

SDIFFSTORE

set求差集

SDIFFSTORE <destinatio_key> <key1 key2 ...>

Order Sets

SADD -> ZADD

添加元素到有序集

ZADD <key> [option] <score1 value1 score2 value2 ...>

option有下面的这些选项

  • XX

只更新已经存在的元素

  • NX

只添加新元素,不更新已经存在的元素

  • CH

修改返回值的行为 从“新元素添加数量“为”score 更新元素数量“

  • INCR

对应元素的score + 1

类似的将无序集合的S前缀替换为Z就是对应的有序集合命令

ZRANGE

ZRANGE <key> <start_index> <end_index>

ZREVRANGE

ZREVRANGE <key> <start_index> <end_index>

其他sorted sets命令 Redis - Sorted Sets Command

Bitmaps

HyperLogLogs

文章目录
  1. 1. 数据结构
    1. 1.1. String
      1. 1.1.1. 单个元素的设置和查询
        1. 1.1.1.1. SET
        2. 1.1.1.2. GET
      2. 1.1.2. 多个元素的设置和查询
        1. 1.1.2.1. MSET
        2. 1.1.2.2. MGET
      3. 1.1.3. 通用元素的操作
        1. 1.1.3.1. EXIST
        2. 1.1.3.2. DEL
        3. 1.1.3.3. 查询数据类型
      4. 1.1.4. 过期时间的操作
        1. 1.1.4.1. EXPIRE
        2. 1.1.4.2. PEXPIRE
        3. 1.1.4.3. TTL
        4. 1.1.4.4. PTTL
    2. 1.2. Lists
      1. 1.2.1. 常规操作
        1. 1.2.1.1. LPUSH
        2. 1.2.1.2. RPUSH
        3. 1.2.1.3. LPOP
        4. 1.2.1.4. RPOP
        5. 1.2.1.5. LRANGE
        6. 1.2.1.6. LTRIM
      2. 1.2.2. 阻塞队列操作
        1. 1.2.2.1. 使用场景
        2. 1.2.2.2. LPUSH + RPOP 组合有什么问题
        3. 1.2.2.3. BRPOP
        4. 1.2.2.4. BLPOP
        5. 1.2.2.5. 两个list元素的转移
        6. 1.2.2.6. 两个list元素的转移 - 阻塞队列版
    3. 1.3. Hashs
      1. 1.3.1. HMSET
      2. 1.3.2. HGET
      3. 1.3.3. HMGET
      4. 1.3.4. HGETALL
      5. 1.3.5. HINCRBY
    4. 1.4. Sets
      1. 1.4.1. SADD
      2. 1.4.2. SCARD
      3. 1.4.3. SMEMBERS
      4. 1.4.4. SISMEMBER
      5. 1.4.5. SREM
      6. 1.4.6. SPOP
      7. 1.4.7. SMOVE
      8. 1.4.8. SINTER
      9. 1.4.9. SUNION
      10. 1.4.10. SDIFF
      11. 1.4.11. SINTERSTORE
      12. 1.4.12. SUNIONSTORE
      13. 1.4.13. SDIFFSTORE
    5. 1.5. Order Sets
      1. 1.5.1. SADD -> ZADD
      2. 1.5.2. ZRANGE
      3. 1.5.3. ZREVRANGE
    6. 1.6. Bitmaps
    7. 1.7. HyperLogLogs