Redies应用计数

来源:互联网 发布:姚明生涯数据 编辑:程序博客网 时间:2024/05/23 20:55

情景:一个活动,双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服务器IPprivate 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=10000private 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);    }}

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

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

原创粉丝点击