2016/12/27 12:00
请问为什么要一个线程使用一个线程池对象JedisPool?
2016/10/28 15:49
maven的pom.xml没必要引入那么多没用的包吧,有重复的、有多余的
2016/10/21 09:46
用乐观锁的形式上线之后,压力测试发现,并发在600 , 0s发出去后,跑到30分钟后,性能变的极差。响应时间都到了20s以上,所以此种情况不能满足。
最终的实现方式是这样的,利用redis+lua脚本。 redis2.6开始就可以使用lua作为脚本了,能够保证原子性。 测试后发现 600并发 0s发出去,跑了2个小时,平均响应时间 300ms , 性能非常强。 现在还没有时间写文章,特提供一个连接,大家可是试试。http://blog.csdn.net/hengyunabc/article/details/19433779
xsx
2016/06/27 14:36
楼主中标代码逻辑判断是否有问题:
是否需要判断resulut里头的值?
if (result == null || result.isEmpty()) {
        jedis.unwatch();
      } else {
2016/06/17 09:48

引用来自“圣杰是也”的评论

这种的话,先进行抢购,然后隔一段时间再同步到数据库中? 抢购纪录表,抢购成功的表, 剩余量等表。 纪录表应该在进行中就要保存吧。

嗯,可以先秒杀,记录存到redis里边,然后再后续更新库
2016/06/17 09:35
这种的话,先进行抢购,然后隔一段时间再同步到数据库中? 抢购纪录表,抢购成功的表, 剩余量等表。 纪录表应该在进行中就要保存吧。
2016/06/16 19:18
看不到评论,咋回事
2016/06/16 15:57

引用来自“首席打酱油”的评论

什么玩意啊 redis本身就支持原子增减的,还用你实现什么锁?
Long redis.clients.jedis.Jedis.incrBy(String key, long integer)?
直接往redis中扔一个红包个数,比如10,每有人抢一次调用一次incrBy(String key, -1)
当返回值是0说明抢完了。


Java也有AtomicInteger,加锁是为了后边的数据库操作
2016/06/16 14:30
什么玩意啊 redis本身就支持原子增减的,还用你实现什么锁?
Long redis.clients.jedis.Jedis.incrBy(String key, long integer)?
直接往redis中扔一个红包个数,比如10,每有人抢一次调用一次incrBy(String key, -1)
当返回值是0说明抢完了。


2016/02/08 14:20
该评论暂时无法显示,详情咨询 QQ 群:点此入群
2015/12/28 11:09
while ("OK".equals(jedis.watch("accountBalance"))) {...................
成功抢到的 加上这句:jedis.zincrby("count", 1.0d, userId + "");
以上代码并发测试通过的。
2015/12/28 11:07
昨晚上我折腾了半天,我贴下代码吧:if ("OK".equals(jedis.watch("count"))) {
      Transaction tx2 = jedis.multi();
      // //注意TX2不能做查询 否则就出现:Cannot use Jedis when in Multi. Please use JedisTransaction instead.
       if(RedisAPI.zscore("count", userId+"")==null)
       { tx2.zadd("count", 0.0d, userId+"");
      
       }
      if (RedisAPI.zscore("count", userId + "") != null)
        if (RedisAPI.zscore("count", userId + "") == 0.0d) {
          tx2.zincrby("cpunt", 1.0d, userId + "");
        } else {
          System.out.println("setp1:失败的:"+userId);
          
          flag = 2;
          return flag;
        }
      List<Object> result = tx2.exec();
      if (result == null || result.isEmpty()) {
        System.out.println("setp2:失败的:"+userId);
        
        flag = 2;
        return flag;
      }
      jedis.unwatch();
    }
2015/12/28 11:06
这样写也依旧有问题13
2015/12/28 09:44

引用来自“dongzhecao”的评论

/ 每个请求对应一个userId
int userId = new Random().nextInt(999999);
// 判断是否购买过
Boolean isBuy = RedisAPI.sismember("userIdSet", userId + "");
if (isBuy) {......................
在并发下,这样的控制显然是有漏洞(已领用的可以再次领),可以用并发压一下(把随机数改小点更容易显现)
放到watch里边判断,3Q
2015/12/25 22:55
该评论暂时无法显示,详情咨询 QQ 群:点此入群
2015/12/25 22:50
/ 每个请求对应一个userId
int userId = new Random().nextInt(999999);
// 判断是否购买过
Boolean isBuy = RedisAPI.sismember("userIdSet", userId + "");
if (isBuy) {......................
在并发下,这样的控制显然是有漏洞(已领用的可以再次领),可以用并发压一下(把随机数改小点更容易显现)
2015/12/22 23:13
学了一招
2015/12/02 10:35

引用来自“wangjianme”的评论

支持
谢谢,用jmeter测试过,我机器是i5,内存4G,5000个thread,60秒内建立完成,没有error
2015/12/02 09:21
支持
2015/12/01 17:08

引用来自“猪的暧昧”的评论

楼主码农几年了?

记不起来了,嘿嘿
2015/12/01 15:56
楼主码农几年了?
2015/12/01 01:20
79
回复 @
{{emojiItem.symbol}}
返回顶部
顶部