`
mayday85
  • 浏览: 46248 次
  • 性别: Icon_minigender_1
  • 来自: 污点星狗屎国
文章分类
社区版块
存档分类
最新评论

生而为程序员,真对不起,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");
    }
分享到:
评论

相关推荐

    基于redis实现的消息队列

    总结来说,基于Redis的消息队列利用了Redis的高效特性和数据结构,为分布式系统提供了一种简单而强大的通信机制。通过深入学习和实践"quick-queue-redis-master"这样的项目,你可以更好地理解和掌握如何在实际项目中...

    redis的sorted set实现延时队列

    在本篇文章中,我们将深入探讨如何利用 Redis 的有序集合(Sorted Set)来实现一个延时队列,这在很多场景下都是非常实用的,比如消息推送、定时任务等。 延时队列是一种特殊的队列,它的特性是元素不是立即被处理...

    基于Redis实现的简单消息队列

    通过上述方法,你可以使用Redis构建一个简单而实用的消息队列系统,尤其适用于轻量级、低延迟的应用场景。但如果你的项目需要更高级的功能,如消息分发策略、集群支持和事务处理,可能需要考虑使用专门的消息队列...

    PHP+Redis 的队列处理程序

    这为开发者提供了一种在现有项目中快速实现消息队列功能的方法。 消息队列的核心概念是生产者和消费者。生产者是创建并发送消息的组件,而消费者则负责接收和处理这些消息。在这个项目中,PHP脚本将扮演生产者的...

    根据黑马程序员的 redis 课程自学做的 redis 笔记,备份一下

    Redis 是一个高性能的键值数据库,它以内存存储为主,数据持久化为辅,支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。本笔记基于黑马程序员的 Redis 课程,旨在深入理解 Redis 的核心概念、操作命令...

    利用redis rightPop 和 redis stream 实现消息队列

    在提供的`redis-stream-demo-master`压缩包中,可能包含了一个示例项目,演示了如何使用Redis Stream和`rightPop`操作来实现消息队列的完整流程。通过阅读源代码,你可以了解到如何在实际应用中设置和使用这些功能。...

    该框架是基于redis实现的分布式队列

    在本案例中,我们关注的是一个基于Redis实现的分布式队列系统,名为KMQueue。 Redis是一个高性能的键值存储系统,常被用作数据库、缓存和消息代理。由于其内存存储和高速读写的特点,Redis非常适合构建分布式队列。...

    java+redis+lua实现重复提交操作拦截.zip

    本项目"java+redis+lua实现重复提交操作拦截"旨在解决这个问题,通过结合Java、Redis和Lua技术来构建一个高效的解决方案。以下是相关知识点的详细说明: 1. **Java AOP(面向切面编程)**: - AOP是一种编程范式,...

    Redis学习手册.pdf

    这些数据结构的支持,使得Redis能够适应不同的应用场景,如使用列表实现队列功能,使用集合实现去重统计,使用有序集合实现排序统计等。 在数据持久化方面,Redis通过RDB快照和AOF日志两种方式来确保数据的安全性。...

    REDIS 入门指南pdf

    Redis 是一个开源的、高性能的键值存储系统,常用于数据缓存、消息队列以及数据库功能。...通过阅读《REDIS 入门指南》这本书籍,你将能更全面地了解 Redis 的功能和应用场景,为你的程序员进阶之路添砖加瓦。

    JAVA程序员培训(系列四)-REDIS集群、分片Sharding及使用场景介绍.pptx

    ### JAVA程序员培训(系列四)-REDIS集群、分片Sharding及使用场景介绍 #### REDIS集群方案介绍 ##### CODIS集群方案 - **特点**:CODIS是一种基于Redis的高性能分布式缓存系统,它利用代理层实现了Redis的水平...

    Redis 入门指南.pdf

    - Redis 源自意大利程序员 Salvatore Sanfilippo,最初是为了提高网站性能而设计的。 - 它支持多种数据结构,如字符串、哈希、列表、集合和有序集合。 - Redis 使用键值对存储数据,键是唯一的,值可以是任意数据...

    Redis协议封装,支持.Net Core,Redis协议基础实现Redis/RedisClient位于X组件

    NewLife.Redis 是一个Redis客户端组件,以高性能处理大数据实时...高性能Redis协议封装,支持.Net Core,Redis协议基础实现Redis/RedisClient位于X组件,本库为扩展实现,主要增加列表结构、哈希结构、队列等高级功能。

    Redis使用指南,0-3年程序员必修课

    本教程针对0-3年的程序员,旨在全面讲解Redis的基础知识、集群搭建、特性和面试常见问题。 一、Redis基础 1. 数据类型:Redis支持五种基本数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序...

    Redis培训资料下载

    Redis是一种高性能的键值对数据存储系统,由意大利程序员Salvatore Sanfilippo(又称Antirez)开发。它的设计目标是成为一个能够处理大量数据的简单、快速的存储系统。Redis在2009年开源发布后迅速获得了广泛的关注...

    Redis可视化工具Redis Desktop Manager安装包

    Redis Desktop Manager是一款强大的Redis数据库管理工具,专为简化Redis数据操作和管理而设计。它提供了图形用户界面(GUI),使得数据库的浏览、编辑、备份和监控变得更加直观和便捷。这款工具支持多种操作系统,如...

    .Net Redis Demo

    描述提到".Net下Redis简单示例讲解,使用ServiceStack.Redis实现",意味着这个项目旨在为.NET开发者提供关于如何使用ServiceStack.Redis库操作Redis的教程。ServiceStack.Redis是.NET社区广泛采用的一个Redis客户端...

    StackExchange.Redis-1.2.6精简,附64位dll

    1. **C#接口封装**:StackExchange.Redis为C#程序员提供了丰富的API,使得操作Redis变得简单直观。如`IDatabase`接口提供了各种操作命令,如`StringSet`用于设置字符串键值,`HashGetAll`用于获取哈希表所有字段和值...

    redis资料.zip

    此外,Redis还支持发布/订阅(Pub/Sub)模式,实现简单的消息传递。 接着,Redis的集群功能是为了解决单实例的性能和容量瓶颈。Redis Cluster是官方提供的分布式解决方案,通过分片(Sharding)技术将数据分散到多...

    redis-3.2.2.zip

    Redis是一款高性能的键值对数据库,常用于缓存、消息队列等场景。在搭建Redis集群时,我们通常会利用多种编程语言的客户端库来与Redis进行交互,Ruby是其中常用的一种。`redis-3.2.2.gem`文件是Ruby的Redis客户端库...

Global site tag (gtag.js) - Google Analytics