六安建设厅网站自学免费网站建设
2026/4/18 4:21:04 网站建设 项目流程
六安建设厅网站,自学免费网站建设,少儿培训,wordpress文章外链简介 Cache#xff08;缓存#xff09;#xff0c;已经是项目中不可缺失的存在#xff0c;登录时#xff0c;存储用户信息、操作权限、Token 等#xff0c;高并发场景#xff0c;存储热点信息、实时信息等。按照类型分类#xff0c;可分为本地缓存和分布式缓存#xf…简介Cache缓存已经是项目中不可缺失的存在登录时存储用户信息、操作权限、Token 等高并发场景存储热点信息、实时信息等。按照类型分类可分为本地缓存和分布式缓存前者重启服务失效后者可以持久化按照设置的过期时间或策略失效。一旦项目中需要使用到缓存就需要考虑到数据一致性问题即缓存数据与数据库数据的一致性问题本文介绍在 Spring Boot 项目中如何使用 Spring 自带的注解来进行数据一致性的维护。整合Spring 自带了缓存维护的注解如果你的项目就是 Spring/Spring Boot 项目不需要额外引入依赖但如果你需要缓存不会因项目重启而失效可以引入 Redis把 Redis 当作缓存容器需引入 Redis 依赖。基本所有的项目都会用到 Redis当然引入了就需要保证系统与 Redis 的连通。!-- 引入 Redis --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency在项目中创建一个 Redis 缓存配置类里面对缓存进行统一的配置如过期时间等。importorg.springframework.cache.annotation.EnableCaching;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.cache.RedisCacheConfiguration;importorg.springframework.data.redis.cache.RedisCacheManager;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;importorg.springframework.data.redis.serializer.RedisSerializationContext;importorg.springframework.data.redis.serializer.StringRedisSerializer;importjava.time.Duration;/** * Redis 缓存配置 */ConfigurationEnableCachingpublicclassRedisCacheConfig{BeanpublicRedisCacheManagercacheManager(RedisConnectionFactoryconnectionFactory){RedisCacheConfigurationconfigRedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(30)).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(newStringRedisSerializer())).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(newGenericJackson2JsonRedisSerializer()));returnRedisCacheManager.builder(connectionFactory).cacheDefaults(config).build();}}配置文件中添加 Redis 配置。spring:redis:host:localhostport:6379使用配合下面几个注解使用可以加在接口上如下cacheNames是设置缓存名称key设置缓存的 key 值可以用#与方法入参关联如#id表示 key 值取自方法入参 id 的值。Cacheable(cacheNames “缓存名”, key “#id”)添加缓存CachePut(cacheNames “缓存名”, key “#id”)执行方法后添加缓存CacheEvict(cacheNames “缓存名”, key “#id”)使缓存失效需要注意的是这套缓存作用的机制是关联方法入参与返回当方法入参相同时返回缓存中的结果不再执行代码。所以只有相同的入参才能用得上缓存。验证创建下面这四个接口查询方法添加缓存新增方法执行后添加缓存删除和更新方法删除缓存。importorg.example.service.CacheService;importorg.springframework.cache.annotation.CacheEvict;importorg.springframework.cache.annotation.CachePut;importorg.springframework.cache.annotation.Cacheable;importorg.springframework.web.bind.annotation.*;importjavax.annotation.Resource;RestControllerRequestMapping(/cache)publicclassCacheController{ResourceprivateCacheServicecacheService;GetMapping(/getOne)Cacheable(cacheNamescacheName,key#id)publicStringgetOne(RequestParamStringid){returncacheService.getOne();}PostMapping(/createOne)CachePut(cacheNamescacheName,key#id)publicStringcreateOne(RequestParamStringid){returncacheService.createOne();}PostMapping(/deleteOne)CacheEvict(cacheNamescacheName,key#id)publicStringdeleteOne(RequestParamStringid){returncacheService.deleteOne();}PostMapping(/updateOne)CacheEvict(cacheNamescacheName,key#id,allEntriestrue)publicStringupdateOne(RequestParamStringid){returncacheService.updateOne();}}对应的实现类代码。importorg.springframework.stereotype.Service;ServicepublicclassCacheServiceImplimplementsCacheService{OverridepublicStringgetOne(){returnSelect is a cache data.;}OverridepublicStringcreateOne(){returnCreate is a cache data.;}OverridepublicStringdeleteOne(){returnDeleted is a cache data.;}OverridepublicStringupdateOne(){returnUpdated is a cache data.;}}启动项目测试一下。首次查询断点卡在查询方法实现类这里执行了实现类方法。再次查询直接返回了结果。Redis 中增加了一个缓存。参数换一下传入 id1。发送请求断点卡住了说明没走缓存。新增了一个 id1 的缓存。再试下更新方法更新 id1 的记录。发送请求查看 Redis缓存都没了。本来可以只让符合条件的即 id1 的缓存失效上面都失效了是因为我在更新方法的注解上额外加了一个属性。allEntries true名称相同的所有缓存都失效默认 false。再试下删除方法我没加这个属性。调用删除方法删除 id1 的记录。这回只有 id1 的缓存被删除。另外再试下创建方法创建方法会再执行完创建方法后主动将返回值添加到缓存中。实际开发中可以在某个创建接口完成后将完整的对象数据返回无缝衔接就不用首次查询还要走一遍实现层。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询