• SpringBoot整合Redis作为缓存


    Redis是一款NOSQL数据库,同时可以充当缓存中间件。在 Spring Boot 中,默认集成的 Redis 就是 Spring Data Redis,默认底层的连接池使用了 lettuce ,开发者可以自行修改为自己的熟悉的,例如 Jedis。

    Spring Data Redis 针对 Redis 提供了非常方便的操作模板 RedisTemplate.

    基于SpringBoot 2.x版本

    1. 快速入门
    2. 开启缓存

    一、快速入门

    1、创建springboot项目,勾选NOSQL选项下的redis选项,或者在项目创建完毕后再pom中加入依赖。

     <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
    

    2、在application.properties文件中加入以下redis配置。

    spring.redis.port=6379
    spring.redis.host=127.0.0.1
    
    

    3.创建一个Controller类,其中代码如下,该控制器类会返回JSON数据。

    	@Autowired
        RedisTemplate redisTemplate;
    	@ResponseBody
        @RequestMapping("/rt")
        public String redis(){
           ValueOperations ops= redisTemplate.opsForValue();
           ops.set("one","成功!");
            Object one = ops.get("one");
            System.out.println(one.toString());
            return one.toString();
        }
    

    4.开启redis服务端,找到redis-server.exe,双击开启。

    5.在浏览器访问。访问成功后会返回数据到页面上。

    二、SpringBoot Data Redis开启缓存

    1.加入依赖进入pom文件

       <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
                <version>2.4.2</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-cache</artifactId>
            </dependency>
    

    2.在properties文件中加入redis配置

    spring.redis.host=127.0.0.1
    
    spring.redis.port=6379
    
    spring.redis.lettuce.pool.max-active=8
    spring.redis.lettuce.pool.min-idle=0
    spring.redis.lettuce.pool.max-idle=8
    spring.redis.lettuce.pool.max-wait=10000ms
    spring.redis.lettuce.shutdown-timeout=100ms
    

    3.创建实体类User.

    public class User {
        private Integer id;
        private String name;
        private String gender;
    
      //toString()省略
    
        public User(Integer id, String name, String gender) {
            this.id = id;
            this.name = name;
            this.gender = gender;
        }
    
        public User() {
        }
    }
    
    

    4.创建service层,并加入注解@CacheConfig(cacheNames = {"user"})和@Cacheable。

    @Service
    @CacheConfig(cacheNames = {"user"})
    public class UserService {
    
        @Cacheable
        public User findUser() {
            System.out.println("无缓存时执行下面代码,获取zhangsan,Time:");
            return new User(1, "Dave", "male");// 模拟从持久层获取数据
        }
    }
    
    

    5.创建RedisCacheConfig 类,配置redis。

    @Configuration
    @EnableCaching
    public class RedisCacheConfig extends CachingConfigurerSupport {
    
        // 自定义key生成器
        @Bean
        public KeyGenerator keyGenerator(){
            return (o, method, params) ->{
                StringBuilder sb = new StringBuilder();
                sb.append(o.getClass().getName()); // 类目
                sb.append(method.getName()); // 方法名
                for(Object param: params){
                    sb.append(param.toString()); // 参数名
                }
                return sb.toString();
            };
        }
    
        // 配置缓存管理器
        @Bean
        public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                    .entryTtl(Duration.ofSeconds(60)) // 60s缓存失效
                    // 设置key的序列化方式
                    .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))
                    // 设置value的序列化方式
                    .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer()))
                    // 不缓存null值
                    .disableCachingNullValues();
    
            RedisCacheManager redisCacheManager = RedisCacheManager.builder(connectionFactory)
                    .cacheDefaults(config)
                    .transactionAware()
                    .build();
    
            return redisCacheManager;
        }
    
      /*  @Bean
        public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory){
            RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(connectionFactory);
            redisTemplate.setKeySerializer(keySerializer());
            redisTemplate.setHashKeySerializer(keySerializer());
            redisTemplate.setValueSerializer(valueSerializer());
            redisTemplate.setHashValueSerializer(valueSerializer());
            logger.info("序列化完成!");
            return redisTemplate;
        }*/
    
        // key键序列化方式
        private RedisSerializer<String> keySerializer() {
            return new StringRedisSerializer();
        }
    
        // value值序列化方式
        private GenericJackson2JsonRedisSerializer valueSerializer(){
            return new GenericJackson2JsonRedisSerializer();
        }
    }
    
    

    6.创建Controller,测试。

    @RestController
    public class UserController {
        @Autowired
        UserService userService;
        @RequestMapping("/find")
        public User findUser(){
            System.out.println("....");
            return userService.findUser();
        }
    }
    

    此时缓存已经开启。

  • 相关阅读:
    linux系统备份
    VNC轻松连接远程Linux桌面
    Cacti监控服务器配置教程(基于CentOS+Nginx+MySQL+PHP环境搭建)
    Linux tar命令高级用法——备份数据
    在linux下使用debugfs恢复rm删除的文件
    Linux系统MySQL开启远程连接
    查看LINUX进程内存占用情况
    JavaScript使用数组
    JavaScript计时器
    大话三层架构
  • 原文地址:https://www.cnblogs.com/cgl-dong/p/13846020.html
Copyright © 2020-2023  润新知