Redies应用计数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cheng_feng_xiao_zhan/article/details/78677184

情景:一个活动,双11给成功购物的前11111名旅客发放优惠券。

Redies里存放一个List -> 1111个数据;

生成购物订单时

Long sum = jedis.llen("activity");

List中有数据sum>0,则String card_code = jedis.rpop("activity");

代码如下:

	public Map<String, String> checkStock() {
		Map<String,String> resMap=new HashMap<String, String>();
		Jedis jedis=null;
		try {
			jedis = RedisUtil.getJedis();
			Long sum = jedis.llen("activity");
			if (sum>0) {
				String card_code = jedis.rpop("activity");
				resMap.put("code", "00000000");
				resMap.put("card_code", card_code);
			}else {
				resMap.put("code", "00000001");
			}
			
		} catch (Exception e) {
			logger.info("查询优惠券是否有库存时报错");
			resMap.put("code", "00000001");
		}finally{
			if (jedis!=null) {
				RedisUtil.release(jedis);
			}
			return resMap;
		}
	}

取消订单时优惠券秒杀活动号放回缓存

jedis.lpush("activity", card_code);

代码如下:

	public void pushToRedis(String card_code) {
		Jedis jedis = RedisUtil.getJedis();
		try {
			jedis.lpush("activity", card_code);
			logger.info("将优惠券:"+card_code+"push回redis成功");
			RedisUtil.release(jedis);
		} catch (Exception e) {
			logger.info("将优惠券:"+card_code+"push回redis失败");
			RedisUtil.release(jedis);
		}

	}
 
 

Util代码:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public final class RedisUtil {
	
    //Redis服务器IP
	private static String ADDR = "127.0.0.1";
	
    //Redis的端口号
	private static int PORT = 6379;
	
    //访问密码
	private static String AUTH = "123456";

    //可用连接实例的最大数目,默认值为8;
    //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
	private static int MAX_ACTIVE = 1024;

    //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
	private static int MAX_IDLE = 200;

    //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
    //Redis.MAX_WAIT=10000
    //Redis.TIMEOUT=10000
	private static int MAX_WAIT = 10000;
	private static int TIMEOUT = 10000;
	
    //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
    private static boolean TEST_ON_BORROW = true;
    private static JedisPool jedisPool = null;

    /**
     * 初始化Redis连接池
     */
    static {
        try {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxActive(MAX_ACTIVE);
            config.setMaxIdle(MAX_IDLE);
            config.setMaxWait(MAX_WAIT);
            config.setTestOnBorrow(TEST_ON_BORROW);
            jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 获取Jedis实例
     * @return
     */
    public synchronized static Jedis getJedis() {
        try {
            if (jedisPool != null) {
                Jedis resource = jedisPool.getResource();
                return resource;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    
    /**
     * 释放jedis资源
     * @param jedis
     */
    public static void release(final Jedis jedis) {
        if (jedis != null) {
            jedisPool.returnResource(jedis);
        }
    }
    
    public static void main(String[] args){
        Jedis jedis = RedisUtil.getJedis();
        System.out.println(jedis.getDB());
        jedis.set("ceshi","dafdsf");
        String value  =  jedis.get("ceshi");
        System.out.print(value);
        RedisUtil.release (jedis);
    }
}

希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充!

猜你喜欢

转载自blog.csdn.net/cheng_feng_xiao_zhan/article/details/78677184