如何利用Redis队列实现一个业务功能

        在工作中,由于各种业务场景,很多开发同学都会用到队列。今天,我们就用redis队列实现一个简单的业务需求。

1.实现队列的操作逻辑

package com.my.frame.app.cached.Queue;

import org.springframework.stereotype.Component;

/**
 * 用于实现redis队列逻辑
 * key为队列名称
 */
@Component
public interface IRedisQueue {


    /**
     * 队列尾部添加一个任务
     * @param key
     * @param value
     */
    void add(String key, String value);

//    /**
//     * 删除头节点的任务  一般情况下不使用这个方法
//     * @param key
//     * @return
//     */
//    String remove(String key);

    /**
     * 得到并移除队列中头节点任务
     * @param key
     * @return
     */
    String get(String key);

    /**
     * 获取某个队列长度
     * @param key
     * @return
     */
    Long getQueueLength(String key);

    /**
     * 校验某个saled是否在队列中  (预留key,3D可以做区别)
     * @param value
     * @return
     */
    public boolean exixt(String key,String value);


}

以及队列操作的实现类

package com.my.frame.app.cached.Queue.impl;

import com.my.frame.app.cached.Queue.IRedisQueue;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

import java.util.HashMap;

@Slf4j
@Service
public class RedisQueueImpl implements IRedisQueue {

    private Jedis jedis;

    private final String redisQueue = "Redis_Queue";

    private final HashMap<String,String> cacheMap = new HashMap<>();//这里用于获取队列是否包含某个任务

    @Value("${spring.redis.host}")
    private static String redisHost;

    @Value("${spring.redis.portt}")
    private static Integer redisPort;

    private RedisQueueImpl() {
        jedis = new Jedis(redisHost,redisPort);
        jedis.getClient().setPassword(redisSecret);
    }

    @Override
    public void add(String key, String value) {
        jedis.rpush(key, value);
        cacheMap.put(value,"");
        log.info(redisQueue + "添加:队列:{}  value:{}",key,value);
    }

    @Override
    public String get(String key) {
        String value = jedis.lpop(key);
        cacheMap.remove(value);
        log.info(redisQueue + "得到:队列:{}  任务:{}",key,value);
        return value;
    }

    @Override
    public Long getQueueLength(String key) {
        return jedis.llen(key);
    }

    @Override
    public boolean exixt(String key,String value){
        return cacheMap.containsKey(value);
    }

}

OK,到这里我们就实现一个redis队列的简单操作逻辑,我们可以根据上面的RedisQueueImpl .java这个类执行具体的业务操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值