Redis配置类型1:
https://blog.youkuaiyun.com/weixin_40765763/article/details/79025738
JedisPoolConfig
JedisConnectionFactory
RedisTemplate
StringRedisTemplate
通过redisTemplate.opsForXxx().xx()方法进行读写缓存
Redis配置类型2:
https://blog.youkuaiyun.com/lssoop/article/details/78151134
JedisPoolConfig
JedisConnectionFactory
使用自定义中间类RedisCacheTransfer解决RedisCache静态注入
JedisConnectionFactory(没cache可用来做mysql二级缓存,但好像不太好用,或者说实用性不如在业务上缓存结果)
RedisCache——自定义类实现接口Cache
实现getObject、putObject 和 removeObject 进行读写缓存
Redis配置类型3:
https://blog.youkuaiyun.com/jy02268879/article/details/83095559
RedisCacheManager
RedisTemplate
StringRedisTemplate
然后又通过一篇文章的配置(大致明白这些东西的关系):
https://hanqunfeng.iteye.com/blog/2176172
JedisPoolConfig (连接池配置)、JedisConnectionFactory (连接工厂,生成连接对象) 配置到-》
RedisTemplate、StringRedisTemplate (封装连接,提供连接管理、序列化等功能) 配置到-》
RedisCache(实现接口Cache的自定义类) 配置到-》
RedisCacheManager(可管理多个Cache,也有直接使用Template进行实例化) 配置到-》
RedisCacheConfig (实现CachingConfigurerSupport)
(里面可配置 JedisConnectionFactory、RedisTemplate、CacheManager
并可自定义redis的key生成规则,如果不在注解参数中注明key=“”的话,就采用这个类中的key生成规则生成key)
如:
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
//规定 本类名+方法名+参数名 为key
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName()+"_");
sb.append(method.getName()+"_");
for (Object obj : params) {
sb.append(obj.toString()+",");
}
return sb.toString();
}
};
}
配置这么多应该不必要,但不知道哪种是最好的
好像有了解答:
spring的主配置
<cache:annotation-driven cache-manager=“redisCacheManager”/>
redis注解配置,需要用到配的CacheManager,否则注解用不了
挺详细的介绍
https://www.cnblogs.com/sxdcgaq8080/p/7228163.html
https://www.cnblogs.com/qlqwjy/p/8574121.html
myUser是注解中的value,也就是缓存数据库名字叫myUser
键名key为:\xAC\xED\x00\x05t\x00Jcom.sxd.controller.WelcomeController_welcome_com.sxd.entity.User@36e69d03,
键值对value值:\xAC\xED\x00\x05t\x00\x07success
使用例子,serve层
value是的内容是,存key的记录的名字,key不指定就使用默认KeyGenerotor()产生的
//查询出来的时候添加单个缓存
@Cacheable(value="user",key="'user'+#id.toString()")
@Override
public User findUserById(int id) throws Exception {
System.out.println("打印语句则没有走缓存");
return userMapper.findUserById(id);
}
//删除数据库的时候删除redis的缓存
@Override
@CacheEvict(value="user",key="'user'+#id.toString()")
public boolean deleteById(int id){
return true;
}