Redis 学习1

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;
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值