Yufelix's Blog

Yufelix

Redis 只会用缓存?16种妙用让同事直呼牛X

10
2024-07-24

1、缓存

Redis 最常见的用途就是缓存。比如,我们可以用它来存储热点数据,比如热门新闻、明星八卦等。这样,当很多人同时访问这些数据时,Redis 可以快速响应,减轻数据库的压力。

2、数据共享分布式

Redis 是一个独立的服务,可以在多个应用之间共享数据。比如,我们可以用它来管理分布式系统中的 Session。这样,用户在不同服务器之间跳转时,Session 信息不会丢失。

<dependency>
 <groupId>org.springframework.session</groupId>
 <artifactId>spring-session-data-redis</artifactId>
</dependency>

3、分布式锁

在分布式系统中,我们可以用 Redis 来实现分布式锁。通过 setnx 命令,只有当锁不存在时,才能成功获取锁。这样可以避免多个进程同时操作同一资源。

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);
}

4、全局ID

在分库分表的场景中,我们可以用 Redis 来生成全局唯一的 ID。通过 incrby 命令,可以原子性地增加 ID,确保每个 ID 都是唯一的。

5、计数器

Redis 的 incr 命令非常适合用来做计数器。比如,我们可以用它来统计文章的阅读量、微博的点赞数等。数据可以先写入 Redis,再定时同步到数据库。

6、限流

通过 Redis 的 incr 命令,我们可以实现简单的限流功能。比如,以用户的 IP 为 key,每次访问加 1,超过一定次数就拒绝访问。

7、位统计

Redis 的 bitcount 命令可以用来做位统计。比如,我们可以用它来统计在线用户数、留存用户数等。位操作非常节省空间,适合大数据量的统计。

set k1 a
setbit k1 6 1
setbit k1 7 0
get k1

8、购物车

我们可以用 Redis 的 Hash 结构来实现购物车功能。用户的 ID 作为 key,商品 ID 作为 field,商品数量作为 value。这样,增删改查都非常方便。

9、用户消息时间线

Redis 的 List 结构非常适合用来做用户消息的时间线。通过双向链表,我们可以轻松实现消息的有序插入和读取。

10、消息队列

Redis 的 List 结构还可以用来做消息队列。通过 blpopbrpop 命令,我们可以实现阻塞式的消息弹出,非常适合做异步任务处理。

11、抽奖

Redis 的 spop 命令可以用来实现抽奖功能。它会随机从集合中弹出一个元素,非常适合做随机抽奖。

12、点赞、签到、打卡

我们可以用 Redis 的 Set 结构来管理点赞、签到、打卡等功能。比如,用 sadd 来记录用户点赞,用 srem 来取消点赞,用 sismember 来检查是否点赞。

13、商品标签

Redis 的 Set 结构还可以用来管理商品标签。比如,我们可以用 sadd 来为商品添加标签,用 sinter 来查找具有相同标签的商品。

14、商品筛选

通过 Redis 的 Set 操作,我们可以轻松实现商品筛选功能。比如,查找同时满足多个条件的商品,可以用 sinter 来获取交集。

15、用户关注、推荐模型

我们可以用 Redis 的 Set 结构来管理用户关注关系。通过 sintersdiff 命令,可以实现用户推荐功能,比如“你可能认识的人”。

16、排行榜

Redis 的 Sorted Set 结构非常适合用来做排行榜。比如,我们可以用 zincrby 来增加新闻的点击量,用 zrevrange 来获取点击量最高的新闻。

zincrby hotNews:20190926 1 n6001
zrevrange hotNews:20190926 0 15 withscores

通过这 16 种妙用,Redis 不仅仅是一个缓存工具,它还能帮助我们解决很多实际问题。希望这些技巧能让你在工作中更加得心应手,让同事们直呼牛X!