记录用缓存提高并发量

电脑剩余内存1.2G

在这里插入图片描述

直接查数据库

连表查询工90条数据
在这里插入图片描述500
在这里插入图片描述
在这里插入图片描述
平均值越小越好,吞吐量越大越好

加redis缓存

在这里插入图片描述
明显提高了,可是有10次是查数据库的,490次是从redis中取的。(缓存击穿)原因是并发问题,解决方案是加锁
在这里插入图片描述
在这里插入图片描述
1:加redission锁

<!--加入redisson-->
		<dependency>
			<groupId>org.redisson</groupId>
			<artifactId>redisson</artifactId>
			<version>3.6.5</version>
		</dependency>

 @Autowired
    RedissonClient redission;
 RLock lock = redission.getLock(lockPath + id);
        try {
        //1
        if (lock.tryLock()) {
        xxxxx
        }
        }finally {
            lock.unlock();
        }
  
//以上代码会导致,解锁失败。(线程1解锁不是自己的)

在finallyl 里 换成
         if (lock.isLocked()){
                if (lock.isHeldByCurrentThread()){
                    lock.unlock();
                }
            }
//以上代码会导致很多线程取不到缓存中的数据

 //等待0秒,锁住5秒后自动解锁
 //2
if (lock.tryLock(0,5,TimeUnit.SECONDS)) {
查询数据库
}else{
         //没拿到锁的线程 198
           Thread.sleep(50);
           System.out.println("没拿到锁的线程");
           xxx
}

lock.tryLock有参数和无参数的区别?????????????????????

//3 这次查询一次数据库,799走缓存。但是效率会很慢。
 lock.lock();
 ......

在这里插入图片描述
解决数据缓存的思路:减少网络io和磁盘io

数据库只查一次,499次是从redis缓存中查的。这里解决了磁盘io。那么网络io怎么解决。(1:压缩传输的数据,还有呢?可以在redis缓存前套个jvm级别的本地缓存,用guave实现的本地缓存,它有LRU淘汰机制。)

综上redission中tryLock有参,和无参数以及lock方法的区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值