zoukankan      html  css  js  c++  java
  • SpringBoot使用Redis缓存

    (1)、添加依赖

    1         <dependency>
    2             <groupId>org.springframework.boot</groupId>
    3             <artifactId>spring-boot-starter-data-redis</artifactId>
    4         </dependency>

    (2)、配置Redis

    1 spring.redis.host=192.168.205.128

    (3)、使用

    配置好Redis后,缓存注解就会把数据缓存到Redis中了,如果我们想要手动添加缓存可以使用

    • StringRedisTemplate  仅仅操作字符串
    • RedisTemplate  操作Key-Value对象

    **Redis默认使用Jdk序列化机制(将对象序列化到Redis中必须要实现Serializable接口且缓存的数据是二进制),若要将数据以Json的形式序列化,可采用以下两种方式

      1.使用第三方jar包将对象转化为json

      2.更改redisTemplate默认的序列化规则

     1 package cn.coreqi.config;
     2 
     3 import cn.coreqi.entities.User;
     4 import org.springframework.context.annotation.Bean;
     5 import org.springframework.context.annotation.Configuration;
     6 import org.springframework.context.annotation.Primary;
     7 import org.springframework.data.redis.cache.RedisCacheConfiguration;
     8 import org.springframework.data.redis.cache.RedisCacheManager;
     9 import org.springframework.data.redis.cache.RedisCacheWriter;
    10 import org.springframework.data.redis.connection.RedisConnectionFactory;
    11 import org.springframework.data.redis.core.RedisTemplate;
    12 import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    13 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    14 import org.springframework.data.redis.serializer.RedisSerializationContext;
    15 import org.springframework.data.redis.serializer.RedisSerializer;
    16 
    17 import java.time.Duration;
    18 
    19 @Configuration
    20 public class MyRedisConfig {
    21     @Bean
    22     public RedisTemplate<Object, User> userRedisTemplate(RedisConnectionFactory redisConnectionFactory){
    23         RedisTemplate<Object, User> template = new RedisTemplate<>();
    24         template.setConnectionFactory(redisConnectionFactory);
    25         template.setDefaultSerializer(new Jackson2JsonRedisSerializer<User>(User.class));
    26         return template;
    27     }
    28 
    29     @Primary
    30     @Bean
    31     public RedisCacheManager userCacheManager(RedisConnectionFactory redisConnectionFactory) {
    32         //初始化一个RedisCacheWriter
    33         RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
    34         //设置CacheManager的值序列化方式为json序列化
    35         RedisSerializer<Object> jsonSerializer = new GenericJackson2JsonRedisSerializer();
    36         RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair
    37                 .fromSerializer(jsonSerializer);
    38         RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig()
    39                 .serializeValuesWith(pair);
    40         //设置默认超过期时间是30秒
    41         defaultCacheConfig.entryTtl(Duration.ofSeconds(30));
    42         //初始化RedisCacheManager
    43         return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
    44     }
    45 }
    1 @Service
    2 @CacheConfig(cacheNames = "user",cacheManager = "userCacheManager")   //抽取缓存的公共配置
    3 //可以使用@Caching注解在方法上运用多个缓存注解
    4 public class UserService {
    5   .......      
    6 }

    *如何在代码中获取缓存

    1     @Qualifier("userCacheManager")
    2     @Autowired
    3     private RedisCacheManager userCacheManager;
    4 
    5     public User cache(){
    6         Cache user = userCacheManager.getCache("user");
    7         user.put("2",new User("gaoxing","fanqisoft",1));
    8         return user.get("1",User.class);
    9     }
  • 相关阅读:
    linux-网卡故障
    css hack
    IE7的overflow失效的解决方法
    Js中 关于top、clientTop、scrollTop、offsetTop的用法
    javascript作用域(Scope),简述上下文(context)和作用域的定义
    统计代码行数的小技巧
    sql复制表、拷贝表、临时表
    string.format
    手机号正则验证
    getBoundingClientRect() 来获取页面元素的位置
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10351016.html
Copyright © 2011-2022 走看看