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

张开发
2026/4/7 21:28:50 15 分钟阅读

分享文章

Redis 只会用缓存?16种妙用让同事直呼牛X
1、缓存String 类型例如热点数据缓存例如报表、明星出轨对象缓存、全页缓存、可以提升热点数据的访问数据。2、数据共享分布式String 类型因为 Redis 是分布式的独立服务可以在多个应用之间共享例如分布式 Sessiondependency groupIdorg.springframework.session/groupId artifactIdspring-session-data-redis/artifactId /dependency3、分布式锁String 类型 setnx 方法只有不存在时才能添加成功返回 truepublic 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、全局 IDint 类型incrby利用原子性incrby userid 1000分库分表的场景一次性拿一段5、计数器int 类型incr 方法例如文章的阅读量、微博点赞数、允许一定的延迟先写入 Redis 再定时同步到数据库6、限流int 类型incr 方法以访问者的 ip 和其他信息作为 key访问一次增加一次计数超过次数则返回 false7、位统计String 类型的 bitcount1.6.6 的 bitmap 数据结构介绍字符是以 8 位二进制存储的set k1 a setbit k1 6 1 setbit k1 7 0 get k1 /* 6 7 代表的 a 的二进制位的修改 a 对应的 ASCII 码是 97转换为二进制数据是 01100001 b 对应的 ASCII 码是 98转换为二进制数据是 01100010 因为 bit 非常节省空间1 MB8388608 bit可以用来做大数据量的统计。 */例如在线用户统计留存用户统计setbit onlineusers 01 setbit onlineusers 11 setbit onlineusers 20支持按位与、按位或等等操作BITOPAND destkey key [key ...] 对一个或多个 key 求逻辑并并将结果保存到 destkey 。 BITOPOR destkey key [key ...] 对一个或多个 key 求逻辑或并将结果保存到 destkey 。 BITOPXOR destkey key [key ...] 对一个或多个 key 求逻辑异或并将结果保存到 destkey 。 BITOPNOT destkey key 对给定 key 求逻辑非并将结果保存到 destkey 。计算出 7 天都在线的用户BITOP AND 7_days_both_online_users day_1_online_users day_2_online_users ... day_7_online_users8、购物车String 或 hash。所有 String 可以做的 hash 都可以做购物车数据结构key用户 idfield商品 idvalue商品数量。1hincr。-1hdecr。删除hdel。全选hgetall。商品数hlen。9、用户消息时间线 timelinelist双向链表直接作为 timeline 就好了。插入有序10、消息队列List 提供了两个阻塞的弹出操作blpop/brpop可以设置超时时间blpopblpop key1 timeout 移除并获取列表的第一个元素如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。brpopbrpop key1 timeout 移除并获取列表的最后一个元素如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。上面的操作。其实就是 java 的阻塞队列。学习的东西越多。学习成本越低队列先进先除rpush blpop左头右尾右边进入队列左边出队列栈先进后出rpush brpop11、抽奖自带一个随机获得值spop myset12、点赞、签到、打卡点赞数据结构假如上面的微博 ID 是 t1001用户 ID 是 u3001用 like:t1001 来维护 t1001 这条微博的所有点赞用户点赞了这条微博sadd like:t1001 u3001取消点赞srem like:t1001 u3001是否点赞sismember like:t1001 u3001点赞的所有用户smembers like:t1001点赞数scard like:t1001是不是比数据库简单多了。13、商品标签商品标签示例老规矩用 tags:i5001 来维护商品所有的标签。sadd tags:i5001 画面清晰细腻sadd tags:i5001 真彩清晰显示屏sadd tags:i5001 流程至极14、商品筛选// 获取差集 sdiff set1 set2 // 获取交集intersection sinter set1 set2 // 获取并集 sunion set1 set2商品筛选示例假如iPhone11 上市了sadd brand:apple iPhone11 sadd brand:ios iPhone11 sad screensize:6.0-6.24 iPhone11 sad screentype:lcd iPhone 11筛选商品苹果的、ios 的、屏幕在 6.0-6.24 之间的屏幕材质是 LCD 屏幕sinter brand:apple brand:ios screensize:6.0-6.24 screentype:lcd15、用户关注、推荐模型follow 关注 fans 粉丝相互关注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:follow16、排行榜id 为 6001 的新闻点击数加 1zincrby hotNews:20190926 1 n6001获取今天点击最多的 15 条zrevrange hotNews:20190926 0 15 withscores

更多文章