Redis 5 种数据结构的用法&场景

Redis 提供了五种基本数据类型:StringHashListSetSorted Set。以下是每种类型的定义、使用场景和常用命令。


1. String(字符串类型)

特点:Redis 最基本的数据类型,一个键对应一个值,值可以是字符串、数字或者二进制数据。

常用场景

  • 需要存储常规数据的场景:缓存Session、Token、图片地址、序列化后的对象(相比较于Hash存储更节省内存)。

  • 需要计数的场景:用户单位时间的请求数(简单限流可以用到)、页面单位时间的话访问数。

  • 分布式锁:利用SETNX key value命令可以实现一个最简易的分布布式锁(存在一些缺陷,通常不建议这样实现分布式锁)。

常用命令

  • 设置和获取值

    SET key value          # 设置值
    GET key                # 获取值
    
  • 设置带过期时间的值

    SETEX key seconds value  # 设置值并指定过期时间(秒)
    
  • 递增/递减数值

    INCR key               # 值自增1
    DECR key               # 值自减1
    INCRBY key increment   # 值增加指定数值
    DECRBY key decrement   # 值减少指定数
    

2. Hash(哈希类型)

特点:键值对集合,适合存储对象(类似数据库表中的一行数据)。

常用场景

  • 存储对象的多个属性(如用户属性)。
  • 动态更新部分字段。

常用命令

  • 设置和获取字段值

    HSET key field value       # 设置字段值
    HGET key field             # 获取字段值
    
  • 批量操作

    HMSET key field1 value1 field2 value2  # 批量设置字段值
    HMGET key field1 field2                # 批量获取字段值
    
  • 获取所有字段和值

    HGETALL key               # 获取所有字段和值
    
  • 删除字段

    HDEL key field1 field2    # 删除字段
    

3. List(列表类型)

特点:有序列表,可存储一组有序的值(可以重复)。

常用场景

  • 信息流展示:最新文章、最新动态LPUSH、LRANGE。
  • 消息队列:List可以用来做消息队列,只是功能过于简单且存在很多缺陷,不建议这样做。相对来说 Redis5.0 新增加的一个数据结构Stream更适合做消息队列一些,只是功能依然非常简陋。和专业的消息队列相比,还是有很多欠缺的地方比如消息丢失和堆积问题不好解决。
  • 实现栈(LIFO)或队列(FIFO)。

常用命令

  • 插入元素

    LPUSH key value1 value2   # 从左侧插入
    RPUSH key value1 value2   # 从右侧插入
    
    
  • 获取列表元素

    LRANGE key start stop     # 获取指定范围的元素
    
  • 弹出元素

    LPOP key                  # 从左侧弹出
    RPOP key                  # 从右侧弹出
    
  • 获取列表长度

    LLEN key                  # 获取列表长度
    

4. Set(集合类型)

特点:无序集合,值唯一。

常用场景

  • 需要存放的数据不能重复的场景:网站UV统计(数据量巨大的场景还是HyperLoggLog更适合一些)、文章点赞、动态点赞等场景。
  • 需要获取多个数据源交集、并集和差集的场景:共同好友(交集)、共同粉丝(交集)、共同关注(交集)、好友推荐(差集)、音乐推荐(差集)、订阅号推荐(差集+交集)等场景。
  • 需要随机获取数据源中的元素的场景:抽奖系统、随机点名等场景。

常用命令

  • 添加和删除元素

    SADD key value1 value2     # 添加元素
    SREM key value1 value2     # 删除元素
    
  • 判断元素是否存在

    SISMEMBER key value        # 判断元素是否存在
    
  • 获取集合

    SMEMBERS key               # 获取所有元素
    
  • 集合运算

    SINTER key1 key2           # 交集
    SUNION key1 key2           # 并集
    SDIFF key1 key2            # 差集
    

5. Sorted Set(有序集合)

特点:类似 Set,元素唯一,但每个元素关联一个分数(score),可按分数排序。

常用场景

  • 需要随机获取数据源中的元素根据某个权重进行排序的场景:各种排行榜比如直播间间送礼物的排行榜、朋友圈的微信步数排行榜、王者荣耀中的段位排行榜、话题热度排行榜等等。
  • 需要存储的数据有优先级或者重要程度的场景:比如优先级任务队例。

常用命令

  • 添加元素

    ZADD key score1 value1 score2 value2  # 添加元素及其分数
    
  • 获取元素

    ZRANGE key start stop [WITHSCORES]   # 按分数从低到高排序获取
    ZREVRANGE key start stop [WITHSCORES] # 按分数从高到低排序获取
    
  • 获取指定分数范围的元素

    ZRANGEBYSCORE key min max [WITHSCORES]  # 按分数范围获取
    
  • 获取排名

    ZRANK key value           # 获取元素的排名(从低到高)
    ZREVRANK key value        # 获取元素的排名(从高到低)
    

总结

类型常用场景主要命令
String缓存单值、计数器SET, GET, INCR, DECR
Hash存储对象属性HSET, HGET, HGETALL
List消息队列、日志存储LPUSH, RPUSH, LPOP, RPOP
Set唯一值集合、集合运算SADD, SMEMBERS, SINTER, SUNION, SDIFF
Sorted Set排行榜、优先队列ZADD, ZRANGE, ZRANGEBYSCORE, ZRANK

根据实际业务需求,选择合适的数据结构和命令可以更好地利用 Redis 的强大功能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值