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

海外网站搭建北京整站线上推广优化

海外网站搭建,北京整站线上推广优化,京东短链接生成器,win7 添加asp网站1、提前设置热点数据永不过期 2、分布式中用redis分布式锁(锁可以在多个 JVM 实例之间协调)、单体中用synchronized(锁只在同一个 JVM 内有效) 编写服务类 import com.redisson.api.RLock; import com.redisson.api.RedissonCli…

1、提前设置热点数据永不过期

2、分布式中用redis分布式锁(锁可以在多个 JVM 实例之间协调)、单体中用synchronized(锁只在同一个 JVM 内有效)

 编写服务类
import com.redisson.api.RLock;
import com.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Service
public class CacheService {@Autowiredprivate StringRedisTemplate redisTemplate;@Autowiredprivate RedissonClient redissonClient;private static final String HOT_DATA_KEY = "hotData";private static final String LOCK_KEY = "hotDataLock";public String getHotData() {// 尝试从 Redis 中获取热点数据String hotData = redisTemplate.opsForValue().get(HOT_DATA_KEY);if (hotData == null) {// 获取分布式锁RLock lock = redissonClient.getLock(LOCK_KEY);try {// 尝试加锁,最多等待100ms,锁的过期时间为30秒if (lock.tryLock(100, 30, TimeUnit.SECONDS)) {try {// 再次检查缓存是否过期(双重检查)hotData = redisTemplate.opsForValue().get(HOT_DATA_KEY);if (hotData == null) {// 缓存确实过期,从数据库加载数据hotData = loadHotDataFromDatabase();// 将数据存入 Redis,设置过期时间为10分钟redisTemplate.opsForValue().set(HOT_DATA_KEY, hotData, 10, TimeUnit.MINUTES);}} finally {// 释放锁lock.unlock();}}} catch (InterruptedException e) {Thread.currentThread().interrupt();}}return hotData;}private String loadHotDataFromDatabase() {// 模拟从数据库加载数据return "Hot Data from Database";}
}
模拟多个请求
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;@Component
public class CacheTestRunner implements CommandLineRunner {@Autowiredprivate CacheService cacheService;@Overridepublic void run(String... args) throws Exception {// 模拟 10 个请求同时访问热点数据ExecutorService executorService = Executors.newFixedThreadPool(10);for (int i = 0; i < 10; i++) {executorService.submit(() -> {String hotData = cacheService.getHotData();System.out.println("Thread " + Thread.currentThread().getId() + " got hot data: " + hotData);});}executorService.shutdown();}
}

Thread 12 got hot data: Hot Data from Database
Thread 13 got hot data: Hot Data from Database
Thread 14 got hot data: Hot Data from Database
...

所有线程最终都会获取到相同的数据,但只有第一个线程会去加载数据,避免了缓存击穿问题。

单体应用

在单体应用中,所有请求都运行在同一个 JVM 实例中,因此可以使用 synchronized 来同步线程。

java复制

@Service
public class CacheService {@Autowiredprivate StringRedisTemplate redisTemplate;private static final String HOT_DATA_KEY = "hotData";private static final Object lock = new Object(); // 用于同步的锁对象public String getHotData() {// 尝试从 Redis 中获取热点数据String hotData = redisTemplate.opsForValue().get(HOT_DATA_KEY);if (hotData == null) {synchronized (lock) { // 使用 synchronized 同步// 再次检查缓存是否过期(双重检查)hotData = redisTemplate.opsForValue().get(HOT_DATA_KEY);if (hotData == null) {// 缓存确实过期,从数据库加载数据hotData = loadHotDataFromDatabase();// 将数据存入 Redis,设置过期时间为10分钟redisTemplate.opsForValue().set(HOT_DATA_KEY, hotData, 10, TimeUnit.MINUTES);}}}return hotData;}private String loadHotDataFromDatabase() {// 模拟从数据库加载数据return "Hot Data from Database";}
}
http://www.hkea.cn/news/134580/

相关文章:

  • 注册安全工程师管理系统网奇seo赚钱培训
  • 武汉市住房和城乡建设厅官方网站生猪价格今日猪价
  • 住房和城乡建设部网站诚信评价搜索引擎优化人员优化
  • 网站制作 太原网络营销专业课程
  • 做网站去哪个公司网络营销策划书的结构
  • 个人无网站怎样做cps广告深圳全网推广公司
  • 中国人可以做的c2c网站上海网站排名推广
  • 网站建设目标定位公司员工培训方案
  • 美工培训班学百度自然搜索排名优化
  • 网站建设自学多长时间搜索引擎营销的过程
  • 做cpa的网站源码seo的外链平台有哪些
  • 那个网站做外贸最好成都网站建设方案外包
  • 企业网站建设效益分析联合早报 即时消息
  • html5网页成品代码自媒体seo优化
  • 门户网站建设招投标网络seo啥意思
  • 游戏币销售网站建设百度热搜seo
  • 线上投票链接怎么做厦门搜索引擎优化
  • 网页设计课程主要内容seo学校
  • php 深圳 电子商务网站开发seo优化好做吗
  • 网站建设开发技术天津济南网站设计
  • 信息公开网站建设网店推广分为哪几种类型
  • 南皮网站建设价格seo搜索引擎优化方式
  • 网上购物系统的设计与实现论文长沙seo优化公司
  • 风景旅游网页制作素材seo推广灰色词
  • 网站制作网站建设网页设计页面
  • 网站开发兼容极速字体颜色推荐seo平台优化服务
  • wordpress建站流量齐三seo顾问
  • 怎么看一个网站做没做竞价公司网站怎么建立
  • seo神马网站推广器怎么做神马搜索排名seo
  • 桂林漓江景区网站优化推广排名