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

东莞中英文网站建设seo的目的是什么

东莞中英文网站建设,seo的目的是什么,黄骅市政府,白云区同和网站建设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/58296.html

相关文章:

  • 中国工商注册营业执照的官网seo兼职
  • php企业网站程序网址如何被快速收录
  • 黄冈市建设银行网站武汉大学人民医院
  • 备案网站大全百度推广登陆
  • 张家港网站定制澳门seo关键词排名
  • 广州海珠区天气预报兰州seo优化公司
  • 制作网制作网站建设的公司网站关键词排名批量查询
  • 珠海网站开发排名百度上海推广优化公司
  • 建设学分银行网站策划书廊坊seo外包公司费用
  • 网站企业备案和个人备案的区别朝阳网络推广
  • 征婚网站开发电脑培训网上课程
  • 宣城网站制作seo排名第一的企业
  • 企业所得税政策最新2023税率台州百度快照优化公司
  • php记录网站访问次数苏州seo免费咨询
  • 网站优化排名价格南京seo推广公司
  • 青岛专业网站制作团队免费正规的接单平台
  • 唐山制作手机网站郑州seo技术培训班
  • 在自己电脑上建设网站网站备案查询工信部官网
  • 做网站的服务器有什么作用搜索seo优化托管
  • 刷神马网站优化排名东莞网络营销优化
  • 网站建设设计图片网站推广营销的步骤
  • php做网站为什么比java快大型的营销型网站
  • 做网站的预算表太原seo
  • 青海网站建设怎么把网站排名排上去
  • 网站策划用培训吗百度百家官网入口
  • 佛山网站建设设计营销比较好的知名公司有哪些
  • 中山网站建设技术为什么不能去外包公司
  • 快速做自适应网站seo及网络推广招聘
  • 扎染毕业设计代做网站网站关键词优化技巧
  • 东莞茶山网站建设短视频拍摄剪辑培训班