Redis学习 | Redis数据结构

215 阅读3分钟

这是我参与8月更文挑战的第29天,活动详情查看:8月更文挑战

前言

Redis中支持五种数据结构,StringHashListSetZSet,开发中最长用的就是String类型。

String 字符串类型

Redis中最基本的数据类型,一个key对应一个valueRedisString类型是二进制安全的,意味着RedisString可以包含任何数据。比如数字类型、json字符串。

应用场景

  1. 缓存
  2. 秒杀
  3. 分布式锁
  4. 配置中心
  5. 对象序列化
  6. 计数器

操作指令

命令示例说明
getget hello获得key=hello结果
setset hello world设置key=hello,value=world
msetmset name tom age 18一次性设置多个kv
mgetmget name age一次性获取多个kv
deldel hello删除key=hello
incr/decrincr/decr countkey值自增/自减1
incrby/decrbyincrby/decrby count 99自增自减指定步长

Hash 键值类型

  • Hash类型用于存储结构化数据
  • Hash可以看做是Map中的Map

应用场景

  • 缓存用户信息 和String类型存结构化数据对比 | 类型 | 优点 | 缺点 | | :---: | :---: | :---: | | String-JSON | 编程简单,节约内存 | 1. 序列化带来开销
    2. 无法做到部分属性更新 | | Hash | 直观,可部分更新 | 1. 多层嵌套实现困难
    2. 序列化反序列化编程麻烦|

操作指令

命令示例说明
hgethget user:1:info age获得``hashkey=age`的值
hsethset user:1:info age 19设置hashkey=age的值
hmsethmset user:1:info name tom age 18一次性设置hash多个kv
hmgethmget user:1:info name age一次性获取hash多个kv
hmgetallhmgetall user:1:info一次性获取hash所有kv
hdelhdel user:1:info name删除user:1:info中的name
hexistshexists user:1:info name检查是否存在
hlenhlen user:1:info获取指定长度

提示:reids hash key的命名规则 对象类型:id:属性

List 列表

  • List列表是简单的字符串列表,按照插入顺序排序。可以在头部或尾部插入数据
  • 一个列表最多可以包含232次方-1个元素(超过40亿个元素)

应用场景

时间轴数据缓存,类似于博客的归档。按照时间顺序存储。

操作指令

命令示例说明
rpushrpush list c b a右侧插入 结果c b a
lpushlpush list e f g左侧插入 结果g f e
rpoprpop list右侧弹出
lpoplpop list左侧弹出
llenllen list获取长度
lrangelrange list 0 2获取范围数据,当尾部为负数时表示从后往前数,
-1 代表最后一个元素

Set 集合

  • RedisSetString类型的唯一无序集合。
  • Redis中集合是通过哈希表实现的,所以添加、删除、查询的速度极快
  • 最多可以包含232次方-1个元素(超过40亿个元素)

应用场景

  • 共同关注(利用交集 sinter)
  • 抽奖(利用随机弹出 srandmember spop)

操作指令

命令示例说明
sadd/sremsadd/srem element添加/移除集合中的元素
scardscard user:1:follow计算几何数量
smembersmember user:1:follow获取所有集合元素(不推荐)
srandmembersrandmember user:1:follow 3随机挑选3个元素
spopspop user:1:follow随机弹出元素
sdiffsdiff set1 set2差集
sintersinter set1 set2交集
sunionsunion set1 set2并集

Zset 集合

RedisZSetString类型的唯一有序集合。

应用场景

排行榜数据缓存

操作指令

命令示例说明
zadd/zremzadd/zrem element添加/移除集合中的元素
zscorezscore key得到分数
zcardzcard key element元素总数
zrankzrank key element获得排名
zrangezrange key scope withscores获得排序索引数据
zcountzcount key scope获得排序数据总量
zrangebyscorezrangebyscore key获得按分数排序元素