redis 五大类型中的sort set来实现排名
pom.xml
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.2</version>
</dependency>
由于我redis没有密码,所以下面jedispool没有配置密码,有密码的在new JedisPool(.....,'password')加上后面的密码
package com.example.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* 类名:RedisCacheConfiguration<br>
* 描述:<br>
* 创建人:<br>
* 创建时间:2016/9/6 17:33<br>
*
* @version v1.0
*/
@Configuration
@EnableCaching
public class RedisCacheConfiguration extends CachingConfigurerSupport {
Logger logger = LoggerFactory.getLogger(RedisCacheConfiguration.class);
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.pool.max-wait}")
private long maxWaitMillis;
@Value("${spring.redis.password}")
private String password;
@Bean
public JedisPool redisPoolFactory() {
logger.info("JedisPool注入成功!!");
logger.info("redis地址:" + host + ":" + port);
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
return jedisPool;
}
}
测试类
package com.example.demo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.StringUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.Iterator;
import java.util.Optional;
import java.util.Set;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Autowired
JedisPool jedisPool;
private static final String key="top_thing";
@Test
public void c(){
Jedis jedis=jedisPool.getResource();
jedis.del(key);
for(int i=0;i<20;i++){
jedis.zincrby(key,1.0D,i+"");
}
jedis.zincrby(key,1.0D,18+"");
jedis.zincrby(key,2.0D,19+"");
//jedis.zremrangeByRank(key,10,-1);
Set set=jedis.zrevrange(key,0,-1);
Iterator iterator=set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
@Test
public void r(){
Jedis jedis=jedisPool.getResource();
jedis.del(key);
}
}
其中jedis.zincrby为key设置分数值
jedis.zremrangeByRank这个是将排名10到(-1是最后)的去掉
jedis.zrevrange实现set的从大到小排序