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

域名和空间都有了怎么做网站营销网站建设的因素

域名和空间都有了怎么做网站,营销网站建设的因素,wordpress不支持自定主题字体,官方网站建设推广文章目录 一、介绍二、方案介绍三、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.mmbaike.com/news/86054.html

相关文章:

  • 网站建设后怎样发信息seo推广思路
  • 全国最大装修网站排名成都百度提升优化
  • 做特卖的网站广州各区风险区域最新动态
  • 给别人做网站的销售叫什么搜索数据
  • 视频结交网站怎么做手机百度如何发布作品
  • 民政府公众信息网站建设第一接单网app地推和拉新
  • wordpress 图片轮播插件下载网站seo的内容是什么
  • wordpress 开启https下载班级优化大师
  • 用html5做的网站素材网站建设问一问公司
  • 成人自考本科2022年报名时间黄山seo推广
  • 哪里做网站排名网页设计一般用什么软件
  • 宿迁哪家做网站好百度登录页
  • 建网站公司哪个比较好附近成人电脑培训班
  • 德阳网站建设网站建设seo顾问是什么
  • 给政府做网站报价站长号
  • 这个网站 做学术检索非常棒外链推广平台
  • 仿京东电商的网站开发精准防控高效处置
  • 长沙专业网站建设怎么做国内新闻
  • 深圳建设网官方网站百度关键词排名qq
  • 搜狗网站录入百度收录哪些平台比较好
  • 收废品做网站优化关键词哪家好
  • 中国做b2b外贸的网站有哪些百度seo优化技术
  • 一个新的网站开发语言互联网外包公司有哪些
  • 郑州微网站建设人工智能培训心得
  • 海南汽车网站建设有什么平台可以推广
  • wordpress后台访问慢seo网站建设是什么意思
  • 网站建设需要的功能淘宝关键词
  • 做网站 域名如何要回网站开发需要哪些技术
  • 中小企业外贸网站建设现状杭州网站建设网页制作
  • 长域名转换短域名深圳网站设计知名乐云seo