当前位置: 首页 > news >正文

做网站推广怎么定位客户全国企业信用信息查询官网

做网站推广怎么定位客户,全国企业信用信息查询官网,这些网站涵盖了不同的主题和类型,沈阳网络科技公司排名分布式锁redisson的使用#xff08;并发场景下) 1.基于缓存#xff0c;对热点数据进行刷新过期时间#xff0c;以实现“冷热数据分离”。 2.可以对“热点数据进行缓存重建”#xff08;双层获取#xff09; 3.使用分布式读写锁#xff0c;可解决“数据库与缓存双写不一…分布式锁redisson的使用并发场景下) 1.基于缓存对热点数据进行刷新过期时间以实现“冷热数据分离”。 2.可以对“热点数据进行缓存重建”双层获取 3.使用分布式读写锁可解决“数据库与缓存双写不一致”的场景 4.分布式读写锁的机制读读共享读写互斥写写互斥读写锁底层实现的是读写操作都是抢同一把锁已控制拿锁的顺序。 若是读读操作则底层实现的是可重入锁机制在进行读读操作是多个线程拿的都是同一把读锁通过对信号量state进行1来计算重入的次数及释放锁的量。 若是写写或写读场景则其他未获取到锁的线程则会处于等待阻塞状态。 Service public class ProductService {Autowiredprivate ProductDao productDao;Autowiredprivate RedisUtil redisUtil;Autowiredprivate Redisson redisson;public static final Integer PRODUCT_CACHE_TIMEOUT 60 * 60 * 24;public static final String EMPTY_CACHE {};public static final String LOCK_PRODUCT_HOT_CACHE_PREFIX lock:product:hot_cache:;public static final String LOCK_PRODUCT_UPDATE_PREFIX lock:product:update:;public static MapString, Product productMap new ConcurrentHashMap();Transactionalpublic Product create(Product product) {Product productResult productDao.create(product);redisUtil.set(RedisKeyPrefixConst.PRODUCT_CACHE productResult.getId(), JSON.toJSONString(productResult),genProductCacheTimeout(), TimeUnit.SECONDS);return productResult;}Transactionalpublic Product update(Product product) {Product productResult null;//RLock updateProductLock redisson.getLock(LOCK_PRODUCT_UPDATE_PREFIX product.getId());RReadWriteLock readWriteLock redisson.getReadWriteLock(LOCK_PRODUCT_UPDATE_PREFIX product.getId());//通过读写锁来控制并发读写锁 共用了是同一把锁RLock writeLock readWriteLock.writeLock();writeLock.lock();//这种不传时间值当在并发条件下那些未获取到锁的线程会在一直处于阻塞状态等待持有锁的线程执行完毕再去唤醒需要持有锁的线程// writeLock.lock(10,TimeUnit.SECONDS);// 这种传入时间值当在并发条件下那些未获取到锁的线程会在在10s时间内阻塞等待若超过10s还未获取到锁那么那些需要获取到锁的线程会重新再次去请求获取锁对象try {productResult productDao.update(product);redisUtil.set(RedisKeyPrefixConst.PRODUCT_CACHE productResult.getId(), JSON.toJSONString(productResult),genProductCacheTimeout(), TimeUnit.SECONDS); //更新缓存productMap.put(RedisKeyPrefixConst.PRODUCT_CACHE productResult.getId(), product);//使用map去存储高热点数据高热点数据比较少则需要的内存较少所以本地缓存可以使用本地缓存可支持百万级别的并发那么就服务就不会那么容易崩亏} finally {writeLock.unlock();}return productResult;}public Product get(Long productId) throws InterruptedException {Product product null;String productCacheKey RedisKeyPrefixConst.PRODUCT_CACHE productId;//先从本地缓存中获取数据product getProductFromCache(productCacheKey);if (product ! null) {return product;}//DCL//若本地缓存中不存在则通过分布式锁进行加锁RLock hotCacheLock redisson.getLock(LOCK_PRODUCT_HOT_CACHE_PREFIX productId);//并发条件下未获取到锁的线程在此等待hotCacheLock.lock();//boolean result hotCacheLock.tryLock(3, TimeUnit.SECONDS);try {//当加上分布式锁后再次中本地缓存中去获取数据此为“热点缓存并发重建”//加分布式锁后再次从本地缓存中去获取数据考虑到再加分布式锁过程中有其他线程已经执行完查询的数据并进行了缓存product getProductFromCache(productCacheKey);if (product ! null) {return product;}//若缓存中未获取到数据则通过redisson获取一把读写锁来控制读写顺序读写锁是共同抢同一把锁具有互斥性从而达到顺序执行//同时分布式的读写锁可以解决“数据库与缓存双写不一致”的问题//RLock updateProductLock redisson.getLock(LOCK_PRODUCT_UPDATE_PREFIX productId);RReadWriteLock readWriteLock redisson.getReadWriteLock(LOCK_PRODUCT_UPDATE_PREFIX productId);RLock rLock readWriteLock.readLock();rLock.lock();try {product productDao.get(productId);//读取数据库数据if (product ! null) {redisUtil.set(productCacheKey, JSON.toJSONString(product),genProductCacheTimeout(), TimeUnit.SECONDS); //将取到的数据进行redis缓存 和 本地缓存productMap.put(productCacheKey, product);} else {//若数据库中并没有该数据则将缓存一个空对象以防止恶意攻击redisUtil.set(productCacheKey, EMPTY_CACHE, genEmptyCacheTimeout(), TimeUnit.SECONDS);}} finally {rLock.unlock();//释放读锁}} finally {hotCacheLock.unlock(); //释放分布式锁}return product;}private Integer genProductCacheTimeout() {return PRODUCT_CACHE_TIMEOUT new Random().nextInt(5) * 60 * 60;//设置不同的缓存过期时间防止所有的key在同一时刻失效造成缓存击穿从而使服务瘫痪}private Integer genEmptyCacheTimeout() {return 60 new Random().nextInt(30);//对空对象也进行设置不同的过期时间}private Product getProductFromCache(String productCacheKey) {Product product productMap.get(productCacheKey);//先从本地缓存中获取数据以提高数据访问量和有效性if (product ! null) {return product;}String productStr redisUtil.get(productCacheKey);//若本地缓存不存在则从reids缓存中获取以减少磁盘IOif (!StringUtils.isEmpty(productStr)) { //判断需要获取的对象是否为空若为空则再次判断是否为空对象若是空对象则进行缓存if (EMPTY_CACHE.equals(productStr)) { //对获取的对象进行判断是否为空对象空对象存在的意义是防止恶意攻击黑客攻击等若为空对象则返回一个新建的对象redisUtil.expire(productCacheKey, genEmptyCacheTimeout(), TimeUnit.SECONDS);return new Product();}product JSON.parseObject(productStr, Product.class);redisUtil.expire(productCacheKey, genProductCacheTimeout(), TimeUnit.SECONDS);//读延期已实现“冷热数据分离”原理是当前被访问的对象每被查询一次就刷新一次过期时间}return product;}} 对于缓存架构基于热点爆发数据处理 1.当热点数据突然迸发时容易出现“缓存雪崩”场景则可通过前端进行限流处理。 2.前端有处理失效的情况那么可考虑使用多级缓存架构如前端缓存本地缓存redis缓存 3.可对某些不重要的服务可进行做熔断降级处理。
http://www.zqtcl.cn/news/981026/

相关文章:

  • 深圳做网站那里好提交网址给百度
  • 泰州企业建站系统中企动力科技做什么的
  • 唐山公司网站建设 中企动力唐山宽带动态ip如何做网站访问
  • 个人商城网站怎么做电商网站及企业微信订烟
  • 温州市网站优化广告平面设计教程
  • 南通制作网站的有哪些公司吗sae 部署wordpress
  • 友情链接对网站的影响wordpress admin init
  • 渭南网站开发做网红用哪个网站
  • 湖北建设网站wordpress 翻页电子书
  • 网站设计命名规范厦门建站比较好的公司
  • 用vs2010做网站登入前端培训费用大概多少郑州
  • 网站建设后的效果评估杭州网站制作公司
  • 3网站建设公司影楼修图用什么软件
  • 手机网站的内容模块多用户商城开源左
  • 库尔勒网站建站宝盒合作
  • 五河网站建设哪家好wordpress获取文章作者
  • 怎么修改网站内容wordpress ajax接口
  • 绵阳市城乡建设和规划局网站重庆网站建设公司有哪些
  • 宿迁网站建设公司排名展厅设计企业
  • 做家具定制的设计网站开阿里巴巴网站建设流程
  • 站长统计软件广州免费核酸在哪里做
  • 做soho一定要做网站吗在百度网站备案查询上显示未备案是什么意思
  • 移动公司营销网站设计html旅游网站模板
  • 专业生产车间设计图纸网站ui设计师证
  • 如何建网站教程视频10种网络营销方法
  • 网站内链优化的角度wordpress缓存插件破解版
  • 南宁网站建设哪个好天津网站建设咨询
  • 网站开发常用中间件计算机语言python
  • 学习html5的网站软件系统开发怎样容易
  • 做企业网站用什么华为弹性云服务器创建wordpress