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

怎么做局域网网站东莞网站推广排名

怎么做局域网网站,东莞网站推广排名,东莞哪家做网站,网站标题关键词文章目录 一、介绍二、方案介绍三、Redis Docker部署四、SpringBoot3 Base代码1. 依赖配置2. 基本代码 五、缓存优化代码1. 校验机制2. 布隆过滤器3. 逻辑优化 一、介绍 当一种请求,总是能越过缓存,调用数据库,就是缓存穿透。 比如当请求一…

文章目录

  • 一、介绍
  • 二、方案介绍
  • 三、Redis Docker部署
  • 四、SpringBoot3 Base代码
      • 1. 依赖配置
      • 2. 基本代码
  • 五、缓存优化代码
      • 1. 校验机制
      • 2. 布隆过滤器
      • 3. 逻辑优化

一、介绍

当一种请求,总是能越过缓存,调用数据库,就是缓存穿透。
在这里插入图片描述
比如当请求一个数据库没有的数据,那么缓存也不会有,然后就一直请求,甚至高并发去请求,对数据库压力会增大。

二、方案介绍

  1. 如果key具有某种规则,那么可以对key增加校验机制,不符合直接返回。
  2. Redisson布隆过滤器
  3. 逻辑修改,当数据库没有此数据,以nullvalue,也插入redis缓存,但设置较短的过期时间。

三、Redis Docker部署

docker-compose示例如下,redis.conf从这里下载

redis:container_name: redisimage: redis:7.2volumes:- ./redis/redis.conf:/usr/local/etc/redis/redis.confports:- "6379:6379"command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

四、SpringBoot3 Base代码

1. 依赖配置

		<!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- redis 连接线程池 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.11.1</version></dependency><!-- redisson --><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.24.3</version></dependency>
spring: data:redis:host: 192.168.101.65  # Redis服务器的主机名或IP地址port: 6379  # Redis服务器的端口号password:  # 用于连接Redis服务器的密码database: 0  # 要连接的Redis数据库的索引号lettuce:pool:max-active: 20  # 连接池中最大的活跃连接数max-idle: 10  # 连接池中最大的空闲连接数min-idle: 0  # 连接池中最小的空闲连接数timeout: 10000  # 连接超时时间(毫秒)lock-watchdog-timeout: 100  # Redisson的分布式锁的看门狗超时时间(毫秒)

2. 基本代码

要演示的代码很简单,就是一个携带courseId请求过来,调用下面的service函数,然后查询数据库。

@Overridepublic CoursePublish getCoursePublish(Long courseId) {return coursePublishMapper.selectById(courseId);}

当我们使用redis改造时,基本代码如下

@Overridepublic CoursePublish getCoursePublishCache(Long courseId) {String key = "content:course:publish:" + courseId;//先查询redisObject object = redisTemplate.opsForValue().get(key);if (object != null){String string = object.toString();CoursePublish coursePublish = JSON.parseObject(string, CoursePublish.class);return coursePublish;}else {//后查询数据库CoursePublish coursePublish = getCoursePublish(courseId);if (coursePublish != null){redisTemplate.opsForValue().set(key, JSON.toJSONString(coursePublish));}return coursePublish;}}

五、缓存优化代码

1. 校验机制

我这里的id没规则,所以加不了,跳过。

2. 布隆过滤器

读取yaml配置

@Data
@Component
@ConfigurationProperties(prefix = "spring.data.redis")
public class RedisProperties {private String host;private int port;private String password;private int database;private int lockWatchdogTimeout;
}

配置RedissonClient

@Slf4j
@Configuration
public class RedissionConfig {@Autowiredprivate RedisProperties redisProperties;@Beanpublic RedissonClient redissonClient() {RedissonClient redissonClient;Config config = new Config();//starter依赖进来的redisson要以redis://开头,其他不用String url = "redis://"+ redisProperties.getHost() + ":" + redisProperties.getPort();config.useSingleServer().setAddress(url)//.setPassword(redisProperties.getPassword()).setDatabase(redisProperties.getDatabase());try {redissonClient = Redisson.create(config);return redissonClient;} catch (Exception e) {log.error("RedissonClient init redis url:[{}], Exception:", url, e);return null;}}
}

把布隆过滤器加到service,如下

	private RBloomFilter<String> bloomFilter;@PostConstructpublic void init(){//初始化布隆过滤器bloomFilter = redissonClient.getBloomFilter("bloom-filter");bloomFilter.tryInit(100, 0.003);List<CoursePublish> coursePublishList = coursePublishMapper.selectList(new LambdaQueryWrapper<CoursePublish>());coursePublishList.forEach(coursePublish -> {String key = "content:course:publish:" + coursePublish.getId();bloomFilter.add(key);});}@Overridepublic CoursePublish getCoursePublishCache(Long courseId) {String key = "content:course:publish:" + courseId;//布隆过滤器boolean contains = bloomFilter.contains(key);if (!contains){return null;}//先查询redisObject object = redisTemplate.opsForValue().get(key);if (object != null){String string = object.toString();CoursePublish coursePublish = JSON.parseObject(string, CoursePublish.class);return coursePublish;}else {//后查询数据库CoursePublish coursePublish = getCoursePublish(courseId);if (coursePublish != null){bloomFilter.add(key);redisTemplate.opsForValue().set(key, JSON.toJSONString(coursePublish));}return coursePublish;}}

3. 逻辑优化

当数据库没有此数据,以nullvalue,也插入redis缓存,但设置较短的过期时间。

            //后查询数据库CoursePublish coursePublish = getCoursePublish(courseId);if (coursePublish != null) {bloomFilter.add(key);redisTemplate.opsForValue().set(key, JSON.toJSONString(coursePublish));}else {redisTemplate.opsForValue().set(key, JSON.toJSONString(coursePublish), 10, TimeUnit.SECONDS);}return coursePublish;

在这里插入图片描述

http://www.dinnco.com/news/70579.html

相关文章:

  • 免费下ppt课件的网站做竞价托管的公司
  • 郑州网站建设廴汉狮网络危机公关
  • 网站上怎么做图片变换动图营销软件代理推广
  • 我下载的免费网站模版源代码是加密的设计素材网站
  • 做国内学历公证的网站seo搜索引擎优化工具
  • 如何做网站卖商品的网站seo是什么技术
  • 政府门户网站平台建设b站推广网站mmmnba
  • 高明专业网站建设哪家好武汉百度开户代理
  • css响应式布局 菜鸟教程seo快速优化方法
  • 百度关键词搜索排名查询关键词的分类和优化
  • 网站建设策划北京网站建设公司
  • 建设门户网站的意义百度网页版下载安装
  • 怎么用网站做远控谷歌seo关键词排名优化
  • 做网站用vs还是dw热狗seo外包
  • 苏州好的网站公司名称seo排名赚挂机
  • win2008r2搭建php网站网络营销的发展现状及趋势
  • 0基础做网站爱站长工具
  • wordpress菜单跳转页面青岛网络优化厂家
  • 佛山网站制作好处百度seo优化是做什么的
  • 1688网站可以做全屏吗怎样做百度推广
  • b2b网站开发费用南召seo快速排名价格
  • 武汉大学最新消息石家庄百度推广排名优化
  • 全国工程建设信息服务平台绍兴seo外包
  • 郑州网站制作生产厂商定制龙岗seo网络推广
  • 多少钱的英文外贸建站seo
  • 中英文双语网站 滑动切换最新免费网站收录提交入口
  • vs2008网站消息弹窗怎么做一个人怎么做独立站shopify
  • 网站横幅广告怎么做营销课程培训
  • 牙科医院网站设计怎么做免费数据统计网站
  • 全球网站排名前十百度推广客户端下载