基于排行榜功能使用redis中的有序集合实现

排行榜功能是一个很普遍的需求,对于这类需求如果数据总量过大用mysql实现的话会很浪费性能。
select * from rank_name order by score desc limit 0,10  
这时候可以考虑使用redis中的有序集合来实现(以下是会用到的一些命令)
zrange 查看排行榜 (升序)
zrevrange 查看排行榜 (降序)
zadd 添加一个数据
zrem 删除一个数据
zrank 获取排名(升序)
zrevrank 获取排名 (降序)
以下是golang代码实现
c1,err := redis.dial(tcp,127.0.0.1:6379) if err != nil { panic(err) } defer c1.close() _, err = c1.do(zrange,rank_name,0,-1,withscores) if err != nil { return } for i := 0; i 0: index = int(reflect.valueof(limit).int()) - 1 default: cmd = zrevrange index = -1 } // scoremap, err := redis.stringmap(conn.do(zrange, score, 0, -1, withscores)) scoremap, err := redis.stringmap(conn.do(cmd, score, 0, index, withscores)) if err != nil { log.printf(failed to rank by key %s , key) } // sort for name := range scoremap { namearr = append(namearr, name) valuearr = append(valuearr, scoremap[name]) } return namearr, valuearr}// getsortsetbyfield 获取单个数据func (conn *conn) getsortsetbyfield(field string, value interface{}) interface{} { res, err := redis.int(conn.do(zscore, field, value)) if err != nil { log.printf(can't find %v of %v , field, value) } return res}// delsortsetbyfield 删除单条数据func (conn *conn) delsortsetbyfield(field string, value interface{}) interface{} { res, err := conn.do(zrem, field, value) if err != nil { log.printf(failed to del %v by %v , field, value) } return res}


人工智能开放创新平台再添“新军”
华为主推Polar码,中兴小米为啥出了那么大力?
MiniARM工控板构建环境数据监控系统
图解Java多线程中的wait()和notify()方法
自复式过欠压保护器出现过压时该如何工作
基于排行榜功能使用redis中的有序集合实现
小米5C再曝光,还是小米自主松果处理器,和4.6小屏旗舰
国产高精度ADC可100%兼容AD7792用于应变计传感器
分享一个限流恒流电路
国产手机品牌占据缅甸市场大半江山
虹科直播 | 对传感器故障还是束手无策?上了这节课你就会了!
智能手机的指纹解锁并非百分百安全,大家需谨慎使用
倾角传感器在电子天平里有着怎样的作用?
使用EIDE在VSCODE快速搭建MCU开发环境
加密如何帮助设计保持安全
地质雷达“化险为夷”,预防城市地下空洞风险
浅谈互联网医疗发展现状及未来趋势
AI芯片需求暴涨,未来10年我国将成为科技龙头
ADI新型LT8210控制方案为汽车电子系统提供安全电源保护
解析CPU制造工艺以及生产全过程