Redis 数据类型及对应操作命令
数据结构
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