zoukankan      html  css  js  c++  java
  • springboot 搭配redis缓存

    1.引入依赖

    <dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-data-redis</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.commons</groupId>
    			<artifactId>commons-pool2</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.projectlombok</groupId>
    			<artifactId>lombok</artifactId>
    			<optional>true</optional>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.12</version>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    

    2.application.properties

    spring.port=8080
    # Redis数据库索引(默认为0)
    spring.redis.database=0  
    # Redis服务器地址
    spring.redis.host=localhost
    # Redis服务器连接端口
    spring.redis.port=6379
    # Redis服务器连接密码(默认为空)
    spring.redis.password=
    # 连接池最大连接数(使用负值表示没有限制) 默认 8
    spring.redis.lettuce.pool.max-active=8
    # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
    spring.redis.lettuce.pool.max-wait=-1
    # 连接池中的最大空闲连接 默认 8
    spring.redis.lettuce.pool.max-idle=8
    # 连接池中的最小空闲连接 默认 0
    spring.redis.lettuce.pool.min-idle=0
    

    3.配置redisConfig

    @Configuration
    public class RedisConfig extends CachingConfigurerSupport {
    
        @Bean("oneKeyGenerator")
        public KeyGenerator getKeyGenerator (){
            return new KeyGenerator() {
                @Override
                public Object generate(Object target, Method method, Object... params) {
                    StringBuilder sb = new StringBuilder();
                    sb.append(target.getClass().getName());
                    sb.append(method.getName());
                    for (Object obj : params) {
                        sb.append(obj.toString());
                    }
                    return sb.toString();
                }
            } ;
        }
    }
    

    4.测试接口

    package com.example.cache.service;
    
    import com.example.cache.domain.User;
    
    public interface UserService {
        User addUser(User user);
    
        User updateUser(Integer id);
    
        User selectUser(Integer id);
    
        void deleteUser(Integer id);
    }
    
    

    5.实现类

    @Service
    public class UserServiceImpl implements UserService {
    
        // 生成redis中的key名字为userCache::
        @CachePut(value = "userCache",key = "#user.id")
        @Override
        public User addUser(User user) {
            return user;
        }
    
         // 生成redis中的key名字为userCache::1
        @Cacheable(cacheNames = "userCache",key = "#id",sync = true)
        @Override
        public User selectUser(Integer id) {
            User user = new User();
            user.setId(id);
            user.setName("cicada5mile");
            System.out.println("执行数据库查询");
            return user;
        }
    
        // 删除缓存中的key名字为userCache::1
        @CacheEvict(value = "userCache",key = "#id",beforeInvocation = true)
        @Override
        public void deleteUser(Integer id) {
    
        }
    }
    

    6.测试方法

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = CacheApplication.class)
    public class UserTest {
    
        @Resource
        UserService userService;
    
        @Test
        public void testAdd (){
            User user = new User() ;
            user.setId(1);
            user.setName("cicada");
            userService.addUser(user) ;
        }
    
        @Test
        public void testSelect (){
            userService.selectUser(1) ;
        }
    
        @Test
        public void testDelete (){
            userService.deleteUser(3) ;
        }
    }
    

    7.补充说明

    @Cacheable
    @CacheEvict
    使用@Cacheable标记的方法在执行后Spring Cache将缓存其返回结果,
    而使用@CacheEvict标记的方法会在方法执行前或者执行后移除Spring Cache中的某些元素
    @CachePut也可以声明一个方法支持缓存功能。与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
    

    8.redis样例

    image

  • 相关阅读:
    2dsphere索引
    geoNear查询 near查询的升级版
    geoWithin查询 多边形查询
    [TJOI2013]最长上升子序列
    「bzoj3956: Count」
    「bzoj3687: 简单题」
    「SDOI2008沙拉公主的困惑」
    郑州Day6
    「Luogu-U18201」分析矿洞
    【[COCI2011-2012#5] POPLOCAVANJE】
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/14782459.html
Copyright © 2011-2022 走看看