上一篇
"小李正为电商平台的'每日推荐'功能发愁——如何从百万级商品库中快速随机抽取100个商品展示?传统数据库的ORDER BY RAND()让查询慢如蜗牛🐌,直到他发现了Redis的随机查询魔法..."
# 从"products"集合随机获取3个不重复元素 SRANDMEMBER products 3
适用场景:抽奖活动、随机推荐
优势:O(1)时间复杂度,百万数据毫秒响应 ⚡
注意:适合元素不重复的场景,数量超出集合大小时返回全部
# 按score权重随机(需配合Lua脚本实现) EVAL "local items = redis.call('ZRANGE', KEYS[1], 0, -1, 'WITHSCORES') -- 权重随机算法实现 return math.random(#items)" 1 weighted_set
适用场景:按热度/优先级随机(如热门新闻推荐)
技巧:score可表示点击量、销量等权重指标 📊
# 随机获取hash中的字段(需知道总字段数) HGETALL user:${math.random(10000)}
适用场景:用户画像随机抽样
优化:配合SCAN命令实现无索引随机遍历 🔄
# 随机返回列表某个位置的值 LINDEX recent_logins ${math.random(LLEN recent_logins)}
适用场景:最近活跃用户随机展示
注意:适合已知长度的线性结构 📜
# 先查询符合条件的数据量 ZCARD hot_products # 再随机选择偏移量 ZRANGE hot_products ${random_offset} ${random_offset+10}
适用场景:大数据集条件筛选后随机
优势:避免全量数据传输 🚀
PIPELINE SRANDMEMBER products 1 SRANDMEMBER users 1 EXEC
某社交App采用ZSET存储用户+时间戳
,通过:
ZREVRANGEBYSCORE active_users +inf -inf LIMIT ${random_offset} 10
实现千万用户中随机展示在线用户,QPS提升20倍!🎯
Redis 7.4新增SRANDPOP
命令,结合了SRANDMEMBER和SPOP的优点,原子化操作避免竞态条件,特别适合秒杀场景的随机库存分配。
下次当你需要实现"猜你喜欢"、"随机匹配"功能时,不妨试试这些Redis随机技巧,让系统性能飞起来! ✈️ 好的随机算法,应该是用户感知不到的技术存在~
本文由 析墨 于2025-07-31发表在【云服务器提供商】,文中图片由(析墨)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/493134.html
发表评论