redis实战之计数信号量(未完)

2017-08-12 20:16:57来源:CSDN作者:JavaMoo人点击

分享

计数信号量是一种锁,可以让用户限制一项资源最多能够同时被多少个用户访问
计数信号量有如下几个特征:
1. 使用前必须要获取到资源,使用结束后必须要释放资源
2. 获取资源失败后立即将失败结果返回给用户

示例:

构建基本的计数信号量

使用有序集合来构建基本的计数信号量,使用当前时间戳作为分值,将标识值添加到有序集合里面,程序在将标识符添加到有序集合前,清理有序集合中时间戳大于超时数值的标识符

public String acquireSemaphore(Jedis conn,String semname,int limit,long timeout){        String identifier=UUID.randomUUID().toString();        long now=System.currentTimeMillis();        Pipeline pip=conn.pipelined();        pip.multi();        pip.zremrangeByScore(semname, 0, now/1000-timeout);        pip.zadd(semname, now, identifier);        Response<Long>rank=pip.zrank(semname, identifier);        pip.exec();        pip.sync();        if ((long)rank.get()<limit) {            return identifier;        }        conn.zrem(semname, identifier);        System.out.println("remove:"+identifier);        return null;    }

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台