Redis五种核心数据结构的基本使用与应用场景

五种核心数据结构

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nba0YRp1-1679359622134)(picture/Redis/image-20230320220313804.png)]

应用场景:

  • 微信微博的公众号消息



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 …]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值