俱乐部手机网站模板,网站制作评价,福永外贸网站建设公司,办公室装修图片数据库在用户数量多#xff0c;系统访问量大的时候#xff0c;系统性能会下降#xff0c;用户体验差。1.缓存优化作用#xff1a;1.降低数据库的访问压力2.提高系统的访问性能3.从而提高用户体验实现思路#xff1a;1.先查询缓存2.如果缓存有数据#xff0c;直接返回3.如…数据库在用户数量多系统访问量大的时候系统性能会下降用户体验差。1.缓存优化作用 1.降低数据库的访问压力 2.提高系统的访问性能 3.从而提高用户体验实现思路1.先查询缓存2.如果缓存有数据直接返回3.如果缓存中没有数据则需要查询数据库再将数据库查询的结果缓存到redis中。4.如果数据库中的数据发生修改缓存数据应当清空保证和数据库中的数据一致下一次查询会查询数据库然后最新的数据就到缓存了2.使用Redis缓存优化1.环境搭建1.导入maven坐标 !--spring Data Redis--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency2.修改配置文件# redis相关配置redis:host: ip地址port: 6379password: 密码database: 0 # 操作的是0号数据库jedis:#redis连接池配置pool:max-active: 8 #最大连接数max-wait: 1ms #连接池最大阻塞等待时间max-idle: 4 #连接池中最大空闲连接min-idle: 0 #连接池中最小空闲连接3.导入配置类/*** Redis配置类*/
Configuration
public class RedisConfig extends CachingConfigurerSupport {Beanpublic RedisTemplateObject,Object redisTemplate(RedisConnectionFactory connectionFactory){RedisTemplateObject, Object redisTemplate new RedisTemplate();//默认的key序列化器为JdkSerializationRedisSerializerredisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}
}2.使用RedisTemplate操作Redis在高并发的情况下频繁地查询数据库会导致系统性能下降服务端响应时间增加需要对这些Controller方法进行缓存优化提高系统的性能。实现思路 1.先查询redis如果redis中有就直接返回结果如果没有就去查询数据库并将查询到的结果放入Redis并指定有效期。 2.在新增删除和修改操作的时候清空对应的缓存保证数据库中数据和缓存中数据一致。3.Spring Cache(重点)Spring Cache是一个框架实现了基于注解的缓存功能只需要简单地加一个注解就能实现缓存功能。Spring Cache提供了一层抽象底层可以切换不同的cache实现具体就是通过CacheManager接口来统一不同的缓存技术。 ChacheManager是Spring提供的各种缓存技术抽象接口 EhCacheCacheManager :使用EhCache作为缓存技术 GuavaCacheManager:使用Google的GuavaCache作为缓存技术 RedisCacheManager:使用Redis作为缓存技术使用步骤1.导入Maven坐标:(使用redis缓存技术)!--spring cache--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId/dependency
!--spring Data Redis--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency2.配置application.ymlspring:cache:redis:time-to-live: 1800000 #设置缓存有效时间3.在启动类上加入EnableCaching注解开启缓存注解功能SpringBootApplication
EnableCaching
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}
}4.在Controller方法上加入Cacheable,CacheEvict等注解进行缓存操作EnableCaching开启缓存注解功能Cacheable在方法执行前spring先查看缓存中是否有数据如果有数据则直接返回缓存数据若没有数据调用方法并将方法返回值放到缓存中。CachePut将方法的返回值放到缓存中CacheEvict将一条或多条数据从缓存中删除注意在Spring Boot项目中使用缓存技术只需在项目中导入相关缓存技术的依赖包并在启动类上使用EnableCaching开启缓存支持即可。例如使用Redis作为缓存技术只需要导入Spring data Redis的maven坐标即可。对象在网络中传输需要实现序列化接口。Slf4j
RestController
RequestMapping(user)
public class UserController {Autowiredprivate UserService userService;Autowiredprivate CacheManager cacheManager;/** 缓存测试 Cacheable** Cacheable:* 作用* 1.可以在方法执行前先自动查询缓存如果缓存中存在数据就直接返回此方法不再执行* 2.如果缓存中没有数据执行此方法并且将方法返回值自动存入redis** 属性* cacheNames:key名称空间* key: 名称空间下的key* 最终redis存储的key[cacheNames::key]* 最终redis存储的key[userCache::1]*/Cacheable(cacheNames userCache,key #id)GetMapping(/{id})public User one(PathVariable Long id){User user userService.getById(id);log.info(缓存中没有查数据库);return user;}/** 测试缓存清理CacheEvict** CacheEvict* 作用* 当方法执行完毕后去清理对应的缓存数据** allEntries true代表把当前名称空间下的key都清理默认false* */
// CacheEvict(cacheNames userCache,allEntries true)CacheEvict(cacheNames userCache,key #id)DeleteMapping(/{id})public void delete(PathVariable Long id){userService.removeById(id);}CacheEvict(cacheNames userCache,key #user.id)PutMappingpublic User update(RequestBody User user){userService.updateById(user);return user;}
}cacheNames和key相当于这样的结构