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

网站建设的维护与更新自助友链平台

网站建设的维护与更新,自助友链平台,无锡大型设计网站报价,嘉兴网站建设电话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/365591.html

相关文章:

  • 一个做任务赚钱的网站整站优化系统厂家
  • 汕尾建设网站首页游戏推广员每天做什么
  • 用js做的网站营销qq官网
  • html做游戏网站google官方下载安装
  • 网站流程优化企业网络营销系统分析报告
  • 行业网站维护广告平台推广渠道
  • 网站icp申请网站一级域名和二级域名
  • 建立自己的网站需要多少钱nba最新排名东西部
  • 怎么做英文垃圾网站武汉网站推广很 棒
  • 武汉三网合一网站建设合肥seo整站优化网站
  • 试玩网站建设成人短期就业培训班
  • 如何优化网站图片龙岗网站推广
  • 网站推广策划方案大数据查销售数据的网站
  • 培训网站开发怎么样aso应用商店优化原因
  • dw制作学校官网页面专业网站优化推广
  • 网页制作三剑客工具seo网站优化详解
  • n加1网站建设海南乐秀同城群软件下载
  • 免费的网站模板下载鄂州seo
  • 个人网页设计与制作学年论文网站关键词优化技巧
  • 免费个人网站注册方法福州seo推广服务
  • 安徽中擎建设公司网站网络推广和网络营销的区别
  • 淄博网站建设公司百度公司招聘官网最新招聘
  • 有个人免费网站吗免费做网站怎么做网站链接
  • 免费推广平台哪些比较好seo是指搜索引擎营销
  • 访问网站出现目录长沙网站关键词排名公司
  • 福建省品牌建设促进会网站2345网址大全设主页
  • 吐鲁番seo招聘惠州seo关键词
  • 东光有做网站的吗图片百度搜索
  • 网站开发多少钱一天是百度安装到桌面
  • 株洲市怎么seo快速排名