生而为程序员,真对不起,Redis的队列简单实现

希望在被投新手帖之前能收到一些高手的指责
玩java3年多了,仍然只敢在新手区发帖的人伤不起……
想找自信,就去面试别人,想立志,还是要在eye发帖子

先是Redis的bean定义,@Configuration大赞!xml都见鬼去!

@Configuration
@PropertySource("classpath:mgr.properties")
//@ImportResource("classpath*:spring-config.xml")
public class RedisConf {

@Value("${redis.url}")
String redisUrl;

@Value("${redis.port}")
String redisPort;

@Bean
public JedisPoolConfig jedisPoolConfig(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxActive(50);
jedisPoolConfig.setMaxIdle(10);
jedisPoolConfig.setMaxWait(1000l);
jedisPoolConfig.setTestOnBorrow(true);
return jedisPoolConfig;
}

@Bean
public JedisShardInfo jedisShardInfo(){
return new JedisShardInfo(redisUrl, redisPort);
}

@Bean
public ShardedJedisPool shardedJedisPool(){
List<JedisShardInfo> jedisList = new ArrayList<JedisShardInfo>();
jedisList.add(jedisShardInfo());
return new ShardedJedisPool(jedisPoolConfig(), jedisList);
}

@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer(){
return new PropertySourcesPlaceholderConfigurer();
}

}


主要的@Configuration

@Configuration
@Import(RedisConf.class)
public class MgrConf {...}


Queue实现

public class JedisQueue<T> {

private ShardedJedisPool shardedJedisPool;
private String suffix = "_";
private String name;
private Class<T> clazz;

public JedisQueue(ShardedJedisPool shardedJedisPool, Class<T> clazz) {
this.shardedJedisPool = shardedJedisPool;
this.clazz = clazz;
this.name = clazz.getName();
}

public JedisQueue(ShardedJedisPool shardedJedisPool, Class<T> clazz, String suffix) {
this.shardedJedisPool = shardedJedisPool;
this.name = clazz.getName();
this.clazz = clazz;
this.suffix += suffix;
this.name += this.suffix;
}

public void push(T... ts) {
ShardedJedis jedis = shardedJedisPool.getResource();
try {
for (T t : ts)
jedis.lpush(name, JsonUtils.toJson(t));
} finally {
shardedJedisPool.returnResource(jedis);
}
}

public void push(Collection<T> collection) {
ShardedJedis jedis = shardedJedisPool.getResource();
try {
for (T t : collection)
jedis.lpush(name, JsonUtils.toJson(t));
} finally {
shardedJedisPool.returnResource(jedis);
}
}

public T take() {
ShardedJedis jedis = shardedJedisPool.getResource();
try {
while (true) {
Threads.sleep(300l);
if (!jedis.exists(name))
continue;
String jsonT = jedis.rpop(name);
if (jsonT != null) {
return (T) JsonUtils.toT(jsonT, clazz);
}
}
} finally {
shardedJedisPool.returnResource(jedis);
}
}
}


调用Queue

@Autowired
public void init(ShardedJedisPool shardedJedisPool){
proxyQueue = JedisQueue.newQ(shardedJedisPool, Proxy.class);
tiredQueue = JedisQueue.newQ(shardedJedisPool, Proxy.class, "tired");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值