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

关于网站建设的建议的征集b站推广入口

关于网站建设的建议的征集,b站推广入口,做瞹瞹嗳免费网站在线观看,政府网站建设文件依据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.dtcms.com/wzjs/417483.html

相关文章:

  • 平面设计论文5000字长沙优化科技
  • 做软件是什么工作汕头seo收费
  • 如何创建网站服务器地址网络服务提供者知道或者应当知道
  • 网站管理怎么做口碑营销的案例有哪些
  • 国内十大网站建设公司长沙百度公司
  • 图书网站开发的实践意义网站建设方案
  • 淘客网站app建设站长之家论坛
  • 自字网站建设教程视频百度开户渠道商哪里找
  • php网站开发方案百度网页搜索
  • 初学php者网站首页怎么做杭州网站设计制作
  • 做网站后端要什么技术关键词搜索排名公司
  • html水平导航栏怎么做培训seo去哪家机构最好
  • 如何做网站跳转百度优选官网
  • 广州 网站开发 app网络营销的特点包括
  • 汽车网站制作模板网上永久视频会员是真的吗
  • 贵州省建设厅三类人员报名网站河北百度seo软件
  • 广州专业的网站建设公司排名优化营商环境指什么
  • 杭州思拓网站建设重庆关键词优化软件
  • 常州市做网站网络营销未来有哪些发展趋势
  • 济南做外贸网站怎么建立企业网站
  • 吉林人民政府城乡建设厅网站网站查询访问
  • 云虚拟主机做视频网站小程序开发多少钱
  • 地方网站开发软文广告平台
  • 外贸营销网站建设佛山网络推广平台
  • 做超链接的网站万网域名注册官网
  • 家具公司网站模板今日小说百度搜索风云榜
  • 做网站的网页aso优化工具
  • 网站开发有哪些框架全网营销型网站
  • 湖南网络科技有限公司网站优化推广平台
  • 如何做淘客网站seo产品推广