美文网首页
java_redis快速使用

java_redis快速使用

作者: 七枷琴子 | 来源:发表于2019-12-10 18:01 被阅读0次

    新建一个枚举用来管理redis的过期时间

    package com.shareworx.apm.datacenter.redisCache;
    
    import java.util.concurrent.TimeUnit;
    
    /**
     * redis缓存时间控制枚举
     */
    
    
    public enum CacheKeyPrefix {
    
        TestRedis("test_redis", "测试redis使用", TimeUnit.SECONDS.toSeconds(10))
        ;
    
        private CacheKeyPrefix(String key, String desc) {
            this.key = key;
            this.desc = desc;
        }
    
        private CacheKeyPrefix(String value, String desc, long timeout) {
            this.key = value;
            this.desc = desc;
            this.timeout = timeout;
        }
    
        private String key;
        private String desc;
        private long timeout;
    
    
        public String getKey() {
            return key;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public long getTimeout() {
            return timeout;
        }
    
    }
    
    

    注入服务

    package com.shareworx.apm.datacenter.redisCache;
    
    import org.assertj.core.util.Lists;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.annotation.Resource;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    
    @RestController
    @RequestMapping(value = "/redis")
    public class RedisCacheAction {
    
        @Resource(name = "redisTemplate")
        private RedisTemplate<String, List<String>> cacheTest;
    
    
        @GetMapping(value = "/test1/{cacheKey}")
        public String test1(@PathVariable String cacheKey) {
            cacheTest.opsForValue().set(cacheKey, Lists.newArrayList("111223", "中文中文"), CacheKeyPrefix.TestRedis.getTimeout(), TimeUnit.SECONDS);
            return "缓存成功,key:" + cacheKey;
        }
    
        @GetMapping(value = "/test2/{cacheKey}")
        public String test2(@PathVariable String cacheKey) {
            String str = "";
            if (!cacheTest.hasKey(cacheKey)) {
                str = "null";
                return str;
            }
            List<String> result = cacheTest.opsForValue().get(cacheKey);
            for (String s : result) {
                System.out.println(s);
                str = str + " " + s;
            }
            return str;
        }
    }
    
    

    但是因为序列化方式是jdk的,所以用Redisdeskmanager等软件连接,看到的是乱码,故而要进行序列化后操作

    package com.shareworx.apm.datacenter.redisCache;
    
    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.springframework.cache.annotation.CachingConfigurerSupport;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    
    /**
     * Redis缓存配置类
     *
     */
    @Configuration
    @EnableCaching
    public class RedisConfigurer extends CachingConfigurerSupport {
    
        /**
         * 注意设置过期时间
         */
    //    @Bean
    //    public CacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) {
    //        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
    //        Map<String, Long> expires = new HashMap<>();
    //        expires.put("access_token_cache", 1800L);//过期时间秒为单位,默认为30分钟
    //        expires.put("nonce_cache", 600L);//默认为10分钟
    //        expires.put("allotting_autocancel", 300L);//默认五分钟
    //        cacheManager.setExpires(expires);
    //        return cacheManager;
    //    }
        @Bean(name = "apmRedisTemplate")
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    //        StringRedisTemplate template = new StringRedisTemplate(factory);
    ////        template.setConnectionFactory(factory);
    //        //key序列化
    //        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
    
            //value序列化,value hashmap序列化
            Jackson2JsonRedisSerializer<Object> 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);
            RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
            template.setConnectionFactory(factory);
            template.setKeySerializer(jackson2JsonRedisSerializer);
            template.setValueSerializer(jackson2JsonRedisSerializer);
            template.setHashKeySerializer(jackson2JsonRedisSerializer);
            template.setHashValueSerializer(jackson2JsonRedisSerializer);
            template.afterPropertiesSet();
    
            return template;
        }
    
    }
    

    相关文章

      网友评论

          本文标题:java_redis快速使用

          本文链接:https://www.haomeiwen.com/subject/noiggctx.html