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

主机搭建网站教程/视频号链接怎么获取

主机搭建网站教程,视频号链接怎么获取,网站推广的主要途径,php网站开发技术文章目录总结CacheManager接口方法Cache接口方法自定义SpringCache总结 SpringCache定义了Cacheable、CachePut、CacheEvict三个注解,分别对应查询、更新、删除时对缓存的处理只需要在Server类添加该注解,就可以通过AOP自动代理实现缓存查询、缓存更新、…

文章目录

  • 总结
  • CacheManager接口方法
  • Cache接口方法
  • 自定义SpringCache

总结

  1. SpringCache定义了@Cacheable、@CachePut、@CacheEvict三个注解,分别对应查询、更新、删除时对缓存的处理
  2. 只需要在Server类添加该注解,就可以通过AOP自动代理实现缓存查询、缓存更新、缓存删除,使用形式如下,@Cacheable、@CachePut会在unless条件成立时将返回值添加进缓存,而@Cacheable在有缓存时不会执行Server类方法。@CacheEvict会直接删除缓存名为value的缓存中的键值对的键为key的键值对
 @Override@Cacheable(value = "userCache", key = "#id", unless = "#result == null")public User getUserById(Long id) {System.out.println("运行");return userMapper.selectById(id);}@Override@CachePut(value = "userCache", key = "#user.id", unless = "#result == null")public User updateUser(User user) {userMapper.updateById(user);return userMapper.selectById(user.getId());}@Override@CacheEvict(value = "userCache", key = "#id")public void deleteUserById(Long id) {userMapper.deleteById(id);}
  1. 缓存的name为userCache,也就是下面接口方法对应的缓存名字,key就是通过name获取后,该缓存类似Map结构,可以根据key存储值和取出值,@Cacheable也是根据每次需要执行的代码key是否在缓存中存在来决定是否执行,存在则不执行

  2. 而SpringCache通过注解实现缓存实际上的逻辑是在CacheManager和Cache中定义的,在CacheManager使用缓存名字value,获取缓存Cache,然后缓存Cache中定义了对键值对增删查改的方法,通过这种接口抽象,可以自定义缓存,也可以整合第三方缓存,如本地缓存Caffeine和分布式缓存Redisson

  3. 整合本地缓存Caffeine和分布式缓存Redisson,只需使用注解@EnableCaching,这是SpringCache的注解,在该注解下的类注册一个CacheManager即整合成功

@Configuration
@EnableCaching
public class CaffeineConfig {@Beanpublic Caffeine caffeineConfig() {returnCaffeine.newBuilder().maximumSize(10000).expireAfterWrite(60, TimeUnit.MINUTES);}@Beanpublic CacheManager cacheManager(Caffeine caffeine) {CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();caffeineCacheManager.setCaffeine(caffeine);return caffeineCacheManager;}
}
@Configuration
@EnableCaching
public class RedissonConfig {@Bean(destroyMethod = "shutdown")public RedissonClient Redisson() {Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379");return Redisson.create(config);}@BeanCacheManager cacheManager(RedissonClient RedissonClient) {Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();config.put("UserCache",new CacheConfig(24 * 60 * 1000,12 * 60 * 1000));return new RedissonSpringCacheManager(RedissonClient, config);}
}

CacheManager接口方法

方法名作用
Cache getCache(String name)获取与给定名称关联的缓存
Collection< String> getCacheNames()获取此管理器已知的缓存名称的集合

Cache接口方法

方法名作用
String getName()返回缓存的名称,也就是缓存关联的名称
Object getNativeCache()返回基础缓存提供程序
ValueWrapper get(Object key)在该缓存中查找该键key对应的值。如果缓存不包含该键的映射,则直接返回null,否则,缓存的值将在ValueWrapper中返回,ValueWrapper内只有一个get()方法用于获取值,这样设计的原因是表示存在该缓存,但其值为空
T get(Object key, Class type)返回此缓存将指定键key映射到的值,并将其转换为类Class的对象
T get(Object key, Callable valueLoader)返回此缓存将指定键key映射到的值,必要时从Callable类调用方法获取该值,这个必要时完全取决于自己实现,可以将在该缓存不存在时调用Callable的call方法获取一个值并返回
void put(Object key, Object value)将指定的值value与此缓存中的指定键key相关联。如果缓存以前包含此键的映射,则旧值将替换为指定值
void evict(Object key)如果存在此键key的映射,则从缓存中删除该键值对
void clear()清空缓存中所有映射,即清空所有键值对

自定义SpringCache

MyCacheConfig.java
配置类

@Configuration
@EnableCaching
public class MyCacheConfig {@BeanCacheManager cacheManager() {return new MyCacheManager();}
}

MyCacheManager.java
缓存管理器类,实现CacheManager接口

public class MyCacheManager implements CacheManager {private Map<String, Cache> map = new HashMap<>();@Nullable@Overridepublic Cache getCache(String name) {Cache cache = map.get(name);if (cache == null) {cache = new MyCache(name);map.put(name, cache);}return cache;}@Overridepublic Collection<String> getCacheNames() {return map.keySet();}
}

MyCache.java
缓存类,实现Cache接口

public class MyCache implements Cache {private String name;private Map<Object, ValueWrapper> map = new HashMap<>();public MyCache(String name) {this.name = name;}@Overridepublic String getName() {return name;}@Overridepublic Object getNativeCache() {return map;}@Nullable@Overridepublic ValueWrapper get(Object key) {return map.get(key);}@Nullable@Overridepublic <T> T get(Object key, @Nullable Class<T> type) {ValueWrapper valueWrapper = map.get(key);if (valueWrapper != null) {return (T) valueWrapper.get();}return null;}@Nullable@Overridepublic <T> T get(Object key, Callable<T> valueLoader) {ValueWrapper valueWrapper = map.get(key);if (valueWrapper != null) {return (T) valueWrapper.get();}T call = null;try {call = valueLoader.call();} catch (Exception e) {e.printStackTrace();}return call;}@Overridepublic void put(Object key, @Nullable Object value) {map.put(key, new ValueWrapper() {private Object v = value;@Nullable@Overridepublic Object get() {return v;}});}@Overridepublic void evict(Object key) {map.remove(key);}@Overridepublic void clear() {map.clear();}
}
http://www.lbrq.cn/news/1057573.html

相关文章:

  • 影楼网站推广/seo五大经验分享
  • 企业网站模块介绍/如何做网站推广及优化
  • 我做微信淘宝客网站/优秀软文案例
  • 做网站加手机app需要多少钱/百度pc端入口
  • 南京定制网站建设公司/网站推广要点
  • 定制制作网站公司/个人网站模板
  • 十大赚钱小程序/seo牛人
  • php网站源码/杭州优化公司哪家好
  • 常用网站png/网上商城推广13种方法
  • 用asp怎么做网站/网络营销软件排行
  • 中国建设银行辽宁分行网站/首页排名优化公司
  • 哪个网站可以做英文兼职/网络营销到底是干嘛的
  • 河北省住房与建设厅网站/新站整站优化
  • 莱西做网站公司/搜索引擎营销的英文缩写是
  • 网站的建设要多少钱/网页做推广
  • wordpress have posts/佛山做网络优化的公司
  • wordpress hotnews/武汉本地seo
  • 沈阳企业定制网站建设/最新引流推广方法
  • 做网站是什么软件/淘宝关键词排名优化技巧
  • 泰州网站制作推广/企业网
  • 我自己做网站/焊工培训班
  • wordpress qq在线聊天/网站设计优化
  • 用tomcat做网站/plc培训机构哪家最好
  • 专做校园购物网站/农产品网络营销
  • 网上做网站怎么赚钱/广州百度竞价托管
  • 合肥装饰公司做的好的网站/利于seo的建站系统有哪些
  • 工商管理局注册查询/谷歌seo详细教学
  • 网站设计团队/今天实时热搜榜排名
  • 微信链接网页网站制作/seo薪酬水平
  • 商城网站建设方案书/南宁seo手段
  • Ubuntu设置
  • zyh贪心类题目补题报告
  • 类内部方法调用,自注入避免AOP失效
  • 【慕伏白】Android Studio 配置国内镜像源
  • C++入门自学Day5-- C/C++内存管理(续)
  • 学习游戏制作记录(实现克隆攻击的克隆复制和水晶代替克隆)8.3