Redis 16 大应用场景,竟然这么多。。

Redis 16 大应用场景,竟然这么多。。
最新回答
余安

2026-05-24 16:15:28

Redis 的 16 大应用场景如下:

  • 缓存

    String类型:适用于热点数据缓存(如报表、明星新闻等)、对象缓存、全页缓存,可提升热点数据的访问速度。

  • 数据共享分布式

    String类型:Redis 作为分布式独立服务,可在多个应用间共享数据,例如分布式Session。

    示例代码:

    <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
  • 分布式锁

    String类型:利用 setnx 方法实现,只有键不存在时才能添加成功,返回 true。

    示例代码:

    public static boolean getLock(String key) { Long flag = jedis.setnx(key, "1"); if (flag == 1) { jedis.expire(key, 10); } return flag == 1;}public static void releaseLock(String key) { jedis.del(key);}
  • 全局ID

    int类型:使用 incrby 命令,利用原子性生成唯一ID,适用于分库分表场景,可一次性获取一段ID。

    示例代码:

    incrby userid 1000
  • 计数器

    int类型:使用 incr 方法实现计数器功能,适用于文章阅读量、微博点赞数等场景,允许一定延迟,数据先写入Redis再定时同步到数据库。

  • 限流

    int类型:使用 incr 方法,以访问者IP等信息作为键,每次访问增加计数,超过阈值则拒绝访问。

  • 位统计

    String类型的bitcount:基于Bitmap数据结构,字符以8位二进制存储,节省空间(1MB=8388608bit),适用于大数据量统计,如在线用户统计、留存用户统计。

    支持按位与、或、异或、非操作:

    示例代码:

    BITOP AND destkey key [key...]BITOP OR destkey key [key...]BITOP XOR destkey key [key...]BITOP NOT destkey key

    计算7天都在线的用户:

    BITOP "AND" "7_days_both_online_users" "day_1_online_users" "day_2_online_users" ... "day_7_online_users"
  • 购物车

    String或Hash类型:所有String类型可实现的功能Hash均可实现。

    示例代码:

    键:用户ID;字段:商品ID;值:商品数量。

    操作:

    +1:hincr-1:hdecr删除:hdel全选:hgetall商品数:hlen

  • 用户消息时间线Timeline

    List类型:双向链表结构,直接作为Timeline使用,插入有序。

  • 消息队列

    List类型:提供阻塞弹出操作 blpop/brpop,可设置超时时间。

    blpop:移除并获取列表第一个元素,列表为空时阻塞直到超时或发现可弹出元素。

    brpop:移除并获取列表最后一个元素,列表为空时阻塞直到超时或发现可弹出元素。

    队列模式:先进先出(rpush blpop,右进左出)。

    栈模式:先进后出(rpush brpop)。

  • 抽奖

    使用 spop 命令:从集合中随机获取一个元素。

    示例代码:

    spop myset
  • 点赞、签到、打卡

    使用Set类型:维护点赞用户集合,操作简单高效。

    示例代码:

    点赞:sadd like:t1001 u3001

    取消点赞:srem like:t1001 u3001

    是否点赞:sismember like:t1001 u3001

    点赞用户列表:smembers like:t1001

    点赞数:scard like:t1001

  • 商品标签

    使用Set类型:维护商品标签集合。

    示例代码:

    sadd tags:i5001 画面清晰细腻sadd tags:i5001 真彩清晰显示屏sadd tags:i5001 流程至极
  • 商品筛选

    使用Set类型:通过交集、并集、差集操作实现多条件筛选。

    示例代码:

    差集:sdiff set1 set2

    交集:sinter set1 set2

    并集:sunion set1 set2

    筛选示例:筛选苹果品牌、iOS系统、屏幕尺寸6.0-6.24英寸、LCD屏幕的商品:

    sinter brand:apple brand:ios screensize:6.0-6.24 screentype:lcd
  • 用户关注、推荐模型

    使用Set类型:维护关注和粉丝关系,通过交集、差集操作实现推荐逻辑。

    示例代码:

    相互关注:

    sadd 1:follow 2sadd 2:fans 1sadd 1:fans 2sadd 2:follow 1

    我关注的人也关注了他:

    sinter 1:follow 2:fans

    可能认识的人:

    用户1可能认识的人:sdiff 2:follow 1:follow用户2可能认识的人:sdiff 1:follow 2:follow
  • 排行榜

    使用Sorted Set类型:按分数排序,适用于实时排行榜场景。

    示例代码:

    新闻点击数加1:

    zincrby hotNews:20190926 1 n6001

    获取今天点击最多的15条:

    zrevrange hotNews:20190926 0 15 withscores