五种核心数据结构
String
常用操作
# 存入字符串键值对
SET key value
# 批量存储字符串键值对
MSET key value [key value ...]
# 存入一个不存在的字符串键值对
SETNX key value
# 获取一个字符串键值
GET key
# 批量获取字符串键值
MGET key [key ...]
# 删除一个键
DEL key [key ...]
# 设置一个键的过期时间(秒)
EXPIRE key seconds
原子加减运算
# 将key中储存的数字值加1
INCR key
# 将key中储存的数字值减1
DECR key
# 将key所储存的值加上increment
INCRBY key increment
# 将key所储存的值减去decrement
DECRBY key decrement
应用场景为:
- 字符串的缓存
- 对象转json的缓存
- 分布式锁
- 数量自增
- 分布式系统全局序列号
Hash
# 存储一个哈希表key的键值
HSET key field value
# 存储一个不存在的哈希表key的键值
HSETNX key field value
# 在一个哈希表key中存储多个键值对
HMSET key field value [field value ...]
# 获取哈希表key对应的field键值
HGET key field
# 批量获取哈希表key中多个field键值
HMGET key field [field ...]
# 删除哈希表key中的field键值
HDEL key field [field ...]
# 返回哈希表key中field的数量
HLEN key
# 返回哈希表key中所有的键值
HGETALL key
# 为哈希表key中field键的值加上增量increment
HINCRBY key field increment
更方便的存储一个对象,比如
# HMSET一次性存多个kield value
HMSET user {userId}:name zhuge {userId}:balance 1888
应用场景:
- 电商购物车,key为购物车前缀加用户id,field为商品id,value为购买数量
优点1
-
同类数据归类整合储存,方便数据管理
-
相比string操作消耗内存与cpu更小
-
相比string储存更节省空间
缺点
- 过期功能不能使用在field上,只能用在key上
- Redis集群架构下不适合大规模使用
List
可以实现栈、队列的数据结构
# 从左边添加一个或多个元素
LPUSH key value [value...]
# 从右边添加一个或多个元素
RPUSH key value [value...]
# 从左边,移除并返回一个元素
LPOP key
# 从右边,移除并返回一个元素
RPOP key
# 返回列表key中指定区间内的元素,区间以偏移量start和stop指定
LRANGE key start stop
# 从key列表表头弹出一个元素,若列表中没有元素,阻塞等待 timeout秒,如果timeout=0,一直阻塞等待
BLPOP key [key ...] timeout
# 从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待 timeout秒,如果timeout=0,一直阻塞等待
BRPOP key [key ...] timeout
应用场景:
- 微信微博的公众号消息
Set
取交集并集
# 往集合key中存入元素,元素存在则忽略,若key不存在则新建
SADD key member [member ...]
# 从集合key中删除元素
SREM key member [member ...]
# 获取集合key中所有元素
SMEMBERS key
# 获取集合key的元素个数
SCARD key
# 判断member元素是否存在于集合key中
SISMEMBER key member
# 从集合key中选出count个元素,元素不从key中删除
SRANDMEMBER key [count]
# 从集合key中选出count个元素,元素从key中删除
SPOP key [count]
# Set运算操作
# 交集运算
SINTER key [key ...]
# 将交集结果存入新集合destination中
SINTERSTORE destination key [key ..]
# 并集运算
SUNION key [key ..]
# 将并集结果存入新集合destination中
SUNIONSTORE destination key [key ...]
# 差集运算,拿第一个集合 和 后面所有集合的并集 进行比较,留下第一个集合存在但并集中不存在的元素
SDIFF key [key ...]
# 将差集结果存入新集合destination中
SDIFFSTORE destination key [key ...]
引用场景:
- 抽奖,使用SRANDMEMBER或SPOP命令随机抽取元素
- 取交集并集差集,比如共同关注的人
Zset
相比较于Set有排序的功能,一般适用于排名/热搜
ZSet常用操作
# 往有序集合key中加入带分值元素
ZADD key score member [[score member]…]
# 从有序集合key中删除元素
ZREM key member [member …]
# 返回有序集合key中元素member的分值
ZSCORE key member
# 为有序集合key中元素member的分值加上increment
ZINCRBY key increment member
# 返回有序集合key中元素个数
ZCARD key
# 正序获取有序集合key从start下标到stop下标的元素
ZRANGE key start stop [WITHSCORES]
# 倒序获取有序集合key从start下标到stop下标的元素
ZREVRANGE key start stop [WITHSCORES]
Zset集合操作
# 并集计算
ZUNIONSTORE destkey numkeys key [key ...]
# 交集计算
ZINTERSTORE destkey numkeys key [key …]