zoukankan      html  css  js  c++  java
  • 【Redis】RedisTemplate初试

    今天配置了一把SpringBoot里面整合Redis并使用其RedisTemplate,有点烦了,先把过程记录在此把。

    源码下载:https://files.cnblogs.com/files/heyang78/myBank_redisTemplate_210920.rar

    第一步:pom.xml里引入依赖

            <!-- Spring Redis Support -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-redis</artifactId>
                <version>1.4.1.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.3</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </dependency>

    第二步:在application.properties里填redis的配置

    # Redis
    spring.redis.database=0
    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    spring.redis.password=ufo
    spring.redis.timeout=5000
    # 连接池最大连接数(使用负值表示没有限制) 默认 8
    spring.redis.pool.max-active=8
    # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
    spring.redis.pool.max-wait=-1
    # 连接池中的最大空闲连接 默认 8
    spring.redis.pool.max-idle=8
    # 连接池中的最小空闲连接 默认 0
    spring.redis.pool.min-idle=0

    第三步:撰写RedisConfig类

    import java.lang.reflect.Method;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cache.CacheManager;
    import org.springframework.cache.annotation.CachingConfigurerSupport;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.cache.interceptor.KeyGenerator;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.cache.RedisCacheManager;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    
    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    @Configuration
    @EnableCaching
    public class RedisConfig extends CachingConfigurerSupport{
        @Value("${spring.redis.host}")
        private String host;
        @Value("${spring.redis.port}")
        private int port;
        @Value("${spring.redis.timeout}")
        private int timeout;
        @Value("${spring.redis.password}")
        private String password;
        @Value("${spring.redis.pool.max-active}")
        private int maxActive;
        @Value("${spring.redis.pool.max-wait}")
        private int maxWait;
        @Value("${spring.redis.pool.max-idle}")
        private int maxIdle;
        @Value("${spring.redis.pool.min-idle}")
        private int minIdle;
        
        @Bean
        public KeyGenerator wiselyKeyGenerator(){
            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();
                }
            };
        }
        
        @Bean
        public JedisConnectionFactory redisConnectionFactory() {
            JedisConnectionFactory factory = new JedisConnectionFactory();
            factory.setHostName(host);
            factory.setPort(port);
            factory.setTimeout(timeout); //设置连接超时时间
            factory.setPassword(password);
            factory.getPoolConfig().setMaxIdle(maxIdle);
            factory.getPoolConfig().setMinIdle(minIdle);
            factory.getPoolConfig().setMaxTotal(maxActive);
            factory.getPoolConfig().setMaxWaitMillis(maxWait);
            return factory;
        }
        
      /*  @Bean
        public CacheManager cacheManager(RedisTemplate redisTemplate) {
            RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
            // Number of seconds before expiration. Defaults to unlimited (0)
            cacheManager.setDefaultExpiration(10); //设置key-value超时时间
            return cacheManager;
        } */
        
        @Bean
        public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
            StringRedisTemplate template = new StringRedisTemplate(factory);
            setSerializer(template); //设置序列化工具,这样ReportBean不需要实现Serializable接口
            template.afterPropertiesSet();
            return template;
        }
        
        private void setSerializer(StringRedisTemplate template) {
            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            jackson2JsonRedisSerializer.setObjectMapper(om);
            template.setValueSerializer(jackson2JsonRedisSerializer);
        }
    }

    第四步:在测试中使用RedisTemplate

    import static org.junit.jupiter.api.Assertions.assertEquals;
    
    import java.util.List;
    
    import javax.annotation.Resource;
    
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    
    @SpringBootTest
    class MyBankApplicationTests {
        
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
        
        @Autowired
        private RedisTemplate redisTemplate;
        
        @Test
        void test1() {
            redisTemplate.opsForValue().set("apple","100");
            System.out.println(redisTemplate.opsForValue().get("pig"));
        }
    ...
    }

    控制台输出:

    2021-09-20 14:06:28.557  INFO 9104 --- [           main] com.hy.mybank.MyBankApplicationTests     : Started MyBankApplicationTests in 49.437 seconds (JVM running for 51.519)
    1234
    2021-09-20 14:06:29.660  INFO 9104 --- [ionShutdownHook] o.s.a.r.l.SimpleMessageListenerContainer : Waiting for workers to finish.

    看来取到pig的值了

    打开Redis控制台看看:

    127.0.0.1:6379> get apple
    "\"100\""
    127.0.0.1:6379>

    看来设置值也成功了。

    代码比较乱,饭还没吃,大家先凑活看吧。

    参考文档:https://blog.csdn.net/weixin_40623736/article/details/98097708

    END

  • 相关阅读:
    远程网络时间同步在分布式测控与实时仿真系统应用
    GPS对时装置(北斗卫星同步时钟)应用市场调研分析
    时间同步服务器(NTP时钟同步服务器)如何正确的选购?
    NTP授时服务器(卫星同步时钟)与物联网十大应用
    App 自动化环境搭建(基于 Appium)
    let var作用域
    vue methods和computed效率比较
    vue computed
    vue computed
    vue v-bind:style
  • 原文地址:https://www.cnblogs.com/heyang78/p/15314230.html
Copyright © 2011-2022 走看看