ItGo.me - 专注IT技术分享

首页 > Redis > redis set轻松做排行榜应用

redis set轻松做排行榜应用

时间:2016-08-28来源:网友分享 点击:

最近项目有很多功能要做类似排行榜的功能,当然其实用python来做不难,不过因为排行榜的数据是要做持久化存在数据库里的,如果每次用sql 去查询在做排序 当数据量多起来后会性能很差,而且毕竟还要自己去写相应的操作特别是要查询一个数据前后名次的数据会很繁琐。

当然我写这篇文章就是因为发现了一个好用的工具,它就是redis自带的set类型。

我就不详细解释set是什么能做什么了,直接上代码更能帮助大家理解,有兴趣的可以自己去redis的官网看详细的set类型所支持的操作。

1)使用zadd 方法往test 这个set类型里插入了五条数据

key    score

one    78

two    987

three  45

four    93

five     100

redis 127.0.0.1:6379> zadd test 78 "one"

(integer) 1

redis 127.0.0.1:6379> zadd test 987 "two"

(integer) 1

redis 127.0.0.1:6379> zadd test 45 "three"

(integer) 1

redis 127.0.0.1:6379> zadd test 93 "four"

(integer) 1

redis 127.0.0.1:6379> zadd test 100 "five"

(integer) 1


key 就是我们用来显示的人名
score 就是我们排行榜用来排序的分数
2)按分数倒序获取名次的排序结果
更数组一样 从0开始  -1表示倒数第几
redis 127.0.0.1:6379> zrevrange test 0 -1
1) "two"
2) "five"
3) "four"
4) "one"
5) "three"
如果你用的是python的redis库 那么返回的就是一个list对象
3)查询某人的分数
redis 127.0.0.1:6379> zscore test one
"78"
4)查询某人的名次(分数倒序)
redis 127.0.0.1:6379> zrevrank test one
(integer) 3
3的意思是第四名
5)更新没人的分数同样适用zadd
redis 127.0.0.1:6379> zadd test 99 one
(integer) 0
redis 127.0.0.1:6379> zscore test one
"99"
6)删除某人数据
redis 127.0.0.1:6379> zrem test one
(integer) 1
因为redis是带有持久化存数功能,并且它数据是在内存中操作,所以性能上没有什么问题,基本更排行榜有关的操作 zset这个数据类型都能满足你需求了。
转载自:

redis set轻松做排行榜应用

redis set轻松做排行榜应用  讨论


Memcached, Redis, MongoDB三者比较

Memcached, Redis, MongoDB关于这三者,很多朋友还经常把他们搞混淆,其实这三者还是有区别的: mongodb和memcached不是一个范畴内的东西。mongodb是文档型的非关系型数据库,其优势在于查询功能比较...

redis学习研究--基础知识

以下内容多为摘抄转载; 1. Redis 是什么 Redis是一个开源的使用ANSI C语言编写的基于内存的key/value存储系统,与memcache类似,但它支持的value类型更多,包括:字符串(string)、链表(list)、集合(se...

ServiceStack.Redis 数据操作

简单的字符串类型数据写. Poco在redis中会被序列化成Json字符串. 1 using (var redis = new RedisClient(connString))2 {3 if (redis.Db != 7)4 ((RedisClient)redis).ChangeDb(7);56 var client = redis.AsPoco();7 var list = new ListPoco();8...

最近项目有很多功能要做类排行榜的功能,当然其实用python来做不难,不过因为排行榜的数据是要做持久化存在数据库里的,如果每次用sql 去查询在做排序 当数据量多起来后会性能很差,而且
------分隔线----------------------------