数据缓存_笔记

数据缓存

抽象结构:[CacheProvider]、CacheManager、Cache、Entry、Expiry

  • Cache,类似Connection,执行缓存操作。CacheManager–DataSource。
  • Entry,<K,V>;缓存对象,K、V为String、byte[]类型。序列化。
  • Expiry,过期策略。

ConcurrentHashMap、Ehcache、redis
@EnableCaching;开启缓存
1,应用与缓存交互方式?是否需序列化?Entry
线程交互(堆内存、持久化)、进程交互(通信,序列化)。
缓存分类:本地缓存(堆内缓存-GC压力,堆外缓存-序列化)、进程间缓存、远程缓存
按介质分:内存缓存、持久化缓存
非堆内缓存,均需序列化、反序列化。
2,过期机制?Expiry
lru、lfu、fifo、random等
3,缓存刷新机制?
@CacheEvict,清空cache、或key;未有清空多个key。
@Caching,组织多个cache策略
Spring Cache仅支持清空cache、key。
具体缓存框架的Cache,可通过removeAll()等方法清除多个key。
4,springboot缓存结构
CacheManager、Cache、keyGenerator、serializer、注解
5,缓存
缓存-数据复用;数据存储、数据引用。
6,缓存清理
定时清理、服务端自动触发清理(如内存已满)、定期清理(定时判定)

EHCache User Guide

http://www.ehcache.org/generated/2.10.4/pdf/Ehcache_Cache_Server_User_Guide.pdf
Ehcache作为缓存服务器,通过war包,或独立服务器形式提供服务。
使用jar包时,为本地缓存形式,进程内缓存。
两类API:Restful、SOAP(Simple Object Access Protocol)
diskPersistent,boolean;是否持久化,若为true,缓存对象必须序列化。
若对象可能被持久化,建议实现序列化接口。序列化,Serializable接口。
Ehcache jar包为本地缓存,默认为堆内缓存。
Ehcache支持key、value均为对象;通过hashCode()判定key相等。

SpringBoot集成Ehcache

https://www.jianshu.com/p/729e3cc14361
导包:net.sf.ehcache@ehcache、spring-boot-starter-cache
配置:springboot自动配置,spring配置(EhCacheManagerFactoryBean/EhCacheCacheManager、Cache,均为spring包下)。配置manager,配置springboot的cachemanager封装。
配置:EhCacheManagerFactoryBean、CacheManager(EhCacheCacheManager)、[Cache]
API:

  • 注入Cache,执行查询
  • CacheManager.create()/newInstance();ehcache包下新建

注意:

  1. 缓存的类实现Serializable
  2. 代码缓存,结合Optional使用
  3. key为Object,通过hashCode判定相等。

序列化策略
K为String时,直接输出,为Object输出hashCode;V使用jdk序列化。
定制序列化策略:

  • key,通过注解指定
  • value,实现Externalizable接口。

持久化
配置,缓存内容可存到硬盘。
过期策略:lru、lfu、fifo

Redis

in-memory database。
bean构建、配置、序列化器、keyGenerator
导包:spring-boot-starter-cache、spring-boot-starter-data-redis(基于spring-data实现);如需使用连接池,导入org.apache.commons#commons-pool2
配置:RedisCacheConfigutation、RedisCacheManager
配置参考:https://blog.csdn.net/haveqing/article/details/86519992
持久化:RDB快照、AOF日志;类比MySQL同步

spring data redis

配置:RedisConnectionFacotry、RedisTemplate/StringRedisTemplate
LettuceConnectionFactory、JedisConnectionFactory实现RedisConnectionFactory

序列化策略

类比MessageConverter。
持久化、网络传输;IO流操作,基础流:字节流、字符流;故需将对象转为byte[]、String表示,而后传输、输出。
K序列化器为String泛型,若K为Object,使用ConversionService转为String。
V序列化器为Object泛型,默认为jdk;一般改为json。

过期策略

https://www.jianshu.com/p/76d2ad374fcd
内存满后淘汰数据。有过期时间的为volatile

  • volatile-lru;最近最少使用
  • volatile-ttl;过期时间
  • volatile-random;随机
  • allkeys-lru;
  • allkeys-random;
  • no-eviction;不淘汰

其他

持久化策略:RDB数据快照、AOF日志;redis数据只存放于内存,持久化仅作数据备份。

作为Nosql数据库

redisClient:springboot1.5–jedis,springboot2.x–lettuce
redis、jedis
https://blog.csdn.net/zxl646801924/article/details/82770026
redis基于工厂方法,包spring-data-redis;核心类:JedisConnectionFactory、RedisTemplate
jedis基于连接池,包redis.clients@jedis;核心类:JedisPool、Jedis

SpringBoot整合

jpa
https://www.jianshu.com/p/feef1421ab0b
配置项:spring.redis.*
配置:RedisConnectionFacotry、RedisTemplate/StringRedisTemplate
LettuceConnectionFactory、JedisConnectionFactory实现RedisConnectionFactory
cache
https://www.jianshu.com/p/6943bb8a9ab8
配置项:spring.cache.、spring.cache.redis.
配置:RedisCacheConfigutation、RedisCacheManager

RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory)
                // 一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
                .initialCacheNames(cacheNames)
                .withInitialCacheConfigurations(configMap)
                .build();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值