希望在被投新手帖之前能收到一些高手的指责
玩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");
}
分享到:
相关推荐
总结来说,基于Redis的消息队列利用了Redis的高效特性和数据结构,为分布式系统提供了一种简单而强大的通信机制。通过深入学习和实践"quick-queue-redis-master"这样的项目,你可以更好地理解和掌握如何在实际项目中...
在本篇文章中,我们将深入探讨如何利用 Redis 的有序集合(Sorted Set)来实现一个延时队列,这在很多场景下都是非常实用的,比如消息推送、定时任务等。 延时队列是一种特殊的队列,它的特性是元素不是立即被处理...
通过上述方法,你可以使用Redis构建一个简单而实用的消息队列系统,尤其适用于轻量级、低延迟的应用场景。但如果你的项目需要更高级的功能,如消息分发策略、集群支持和事务处理,可能需要考虑使用专门的消息队列...
这为开发者提供了一种在现有项目中快速实现消息队列功能的方法。 消息队列的核心概念是生产者和消费者。生产者是创建并发送消息的组件,而消费者则负责接收和处理这些消息。在这个项目中,PHP脚本将扮演生产者的...
Redis 是一个高性能的键值数据库,它以内存存储为主,数据持久化为辅,支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。本笔记基于黑马程序员的 Redis 课程,旨在深入理解 Redis 的核心概念、操作命令...
在提供的`redis-stream-demo-master`压缩包中,可能包含了一个示例项目,演示了如何使用Redis Stream和`rightPop`操作来实现消息队列的完整流程。通过阅读源代码,你可以了解到如何在实际应用中设置和使用这些功能。...
在本案例中,我们关注的是一个基于Redis实现的分布式队列系统,名为KMQueue。 Redis是一个高性能的键值存储系统,常被用作数据库、缓存和消息代理。由于其内存存储和高速读写的特点,Redis非常适合构建分布式队列。...
本项目"java+redis+lua实现重复提交操作拦截"旨在解决这个问题,通过结合Java、Redis和Lua技术来构建一个高效的解决方案。以下是相关知识点的详细说明: 1. **Java AOP(面向切面编程)**: - AOP是一种编程范式,...
这些数据结构的支持,使得Redis能够适应不同的应用场景,如使用列表实现队列功能,使用集合实现去重统计,使用有序集合实现排序统计等。 在数据持久化方面,Redis通过RDB快照和AOF日志两种方式来确保数据的安全性。...
Redis 是一个开源的、高性能的键值存储系统,常用于数据缓存、消息队列以及数据库功能。...通过阅读《REDIS 入门指南》这本书籍,你将能更全面地了解 Redis 的功能和应用场景,为你的程序员进阶之路添砖加瓦。
### JAVA程序员培训(系列四)-REDIS集群、分片Sharding及使用场景介绍 #### REDIS集群方案介绍 ##### CODIS集群方案 - **特点**:CODIS是一种基于Redis的高性能分布式缓存系统,它利用代理层实现了Redis的水平...
- Redis 源自意大利程序员 Salvatore Sanfilippo,最初是为了提高网站性能而设计的。 - 它支持多种数据结构,如字符串、哈希、列表、集合和有序集合。 - Redis 使用键值对存储数据,键是唯一的,值可以是任意数据...
NewLife.Redis 是一个Redis客户端组件,以高性能处理大数据实时...高性能Redis协议封装,支持.Net Core,Redis协议基础实现Redis/RedisClient位于X组件,本库为扩展实现,主要增加列表结构、哈希结构、队列等高级功能。
本教程针对0-3年的程序员,旨在全面讲解Redis的基础知识、集群搭建、特性和面试常见问题。 一、Redis基础 1. 数据类型:Redis支持五种基本数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序...
Redis是一种高性能的键值对数据存储系统,由意大利程序员Salvatore Sanfilippo(又称Antirez)开发。它的设计目标是成为一个能够处理大量数据的简单、快速的存储系统。Redis在2009年开源发布后迅速获得了广泛的关注...
Redis Desktop Manager是一款强大的Redis数据库管理工具,专为简化Redis数据操作和管理而设计。它提供了图形用户界面(GUI),使得数据库的浏览、编辑、备份和监控变得更加直观和便捷。这款工具支持多种操作系统,如...
描述提到".Net下Redis简单示例讲解,使用ServiceStack.Redis实现",意味着这个项目旨在为.NET开发者提供关于如何使用ServiceStack.Redis库操作Redis的教程。ServiceStack.Redis是.NET社区广泛采用的一个Redis客户端...
1. **C#接口封装**:StackExchange.Redis为C#程序员提供了丰富的API,使得操作Redis变得简单直观。如`IDatabase`接口提供了各种操作命令,如`StringSet`用于设置字符串键值,`HashGetAll`用于获取哈希表所有字段和值...
此外,Redis还支持发布/订阅(Pub/Sub)模式,实现简单的消息传递。 接着,Redis的集群功能是为了解决单实例的性能和容量瓶颈。Redis Cluster是官方提供的分布式解决方案,通过分片(Sharding)技术将数据分散到多...
Redis是一款高性能的键值对数据库,常用于缓存、消息队列等场景。在搭建Redis集群时,我们通常会利用多种编程语言的客户端库来与Redis进行交互,Ruby是其中常用的一种。`redis-3.2.2.gem`文件是Ruby的Redis客户端库...