栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis使用及配置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis使用及配置

 1--依赖


    org.springframework.boot
    spring-boot-starter-data-redis



    org.apache.commons
    commons-pool2

2--账号配置

#配置springCache的实现为redis
cache:
  type: redis
#redis缓存配置
redis:
  host: ip
  port: 端口
  password: 账号
  timeout: 最大超时时间
  pool:
    max-wait: -1
    max-idle: 10
    min-idle: 0

3--配置消息订阅与发布及Redis过期时间

@Configuration
public class RedisCacheManagerConfig {
    
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                            MessageListenerAdapter listenerAdapter1,
                                            MessageListenerAdapter listenerAdapter2) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(listenerAdapter1, new PatternTopic("频道1"));
        container.addMessageListener(listenerAdapter2, new PatternTopic("频道2"));
        return container;
    }
    //频道一 方法接受的函数为你的频道类,return 为你的频道类和具体方法
    @Bean
    MessageListenerAdapter listenerAdapter1(SendSmsUtil receiver) {
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }
    //例子2
    @Bean
    MessageListenerAdapter listenerAdapter2(SendSmsUtil receiver) {
        return new MessageListenerAdapter(receiver, "receiveMessageChat");
    }
    @Bean
    StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
        return new StringRedisTemplate(connectionFactory);
    }

    
    @Bean
    public KeyGenerator keyGenerator() {
        return (target, method, params) -> {
            StringBuilder sb = new StringBuilder();
            sb.append(target.getClass().getName());
            sb.append(".");
            sb.append(method.getName());
            for (Object obj : params) {
                sb.append("#");
                sb.append(obj == null ? "" : obj.toString());
            }
            return sb.toString();
        };
    }

    
    @Bean
    @Primary
    public RedisCacheManager cacheManager1Month(RedisConnectionFactory connectionFactory) {
        RedisCacheConfiguration config = instanceConfig(3600L * 24 * 30);
        return RedisCacheManager.builder(connectionFactory)
                .cacheDefaults(config)
                .transactionAware()
                .build();
    }
    private RedisCacheConfiguration instanceConfig(Long ttl) {
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        objectMapper.registerModule(new JavaTimeModule());
        objectMapper.configure(MapperFeature.USE_ANNOTATIONS, false);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.activateDefaultTyping(LaissezFaireSubTypevalidator.instance,
                ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
        return RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(ttl))
                .disableCachingNullValues()
                .serializevaluesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));
    }
}
 

4--接受发送频道类

对指定发送消息
stringRedisTemplate.convertAndSend(Constant.REDIS_CHANNEL_CHAT, message);
//在普通类中,可以直接使用@Resource注入
//在WebSocket中使用这种注入方式
private StringRedisTemplate stringRedisTemplate = SpringUtils.getBean(RedisUtil.class).getStringRedisTemplate();
@Component
public class SendSmsUtil {
    //这里的message要以Json的形式接受,接收到了以后可以对它进行 JsonObject转化为类
    public void receiveMessage(String message) {
        new WxWebSocket().sendMessageToUser(message);
    }
}

6--工具类

@Data
@Log4j2
@Component
public class RedisUtil {

    @Resource
    private RedisTemplate redisTemplate;
    @Resource
    private StringRedisTemplate stringRedisTemplate;

    
    public Object get(String key) {
        return key == null ? null : redisTemplate.opsForValue().get(key);
    }

    
    public boolean set(String key, Object value) {
        try {
            redisTemplate.opsForValue().set(key, value);
            return true;
        } catch (Exception e) {
            log.error("redis set value exception:{}", e);
            return false;
        }
    }

    
    public boolean setex(String key, Object value, long expire) {
        try {
            //TimeUnit.SECONDS指定类型为秒
            redisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);
            return true;
        } catch (Exception e) {
            log.error("redis set value and expire exception:{}", e);
            return false;
        }
    }

    
    public boolean expire(String key, long expire) {
        try {
            //这儿没有ops什么的是因为每种数据类型都能设置过期时间
            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
            return true;
        } catch (Exception e) {
            log.error("redis set key expire exception:{}", e);
            return false;
        }
    }

    
    public long ttl(String key) {
        return redisTemplate.getExpire(key);
    }

    
    public void del(String... keys) {
        if (keys != null && keys.length > 0) {
            redisTemplate.delete((Collection) CollectionUtils.arrayToList(keys));
        }
    }

    
    public long incrBy(String key, long step) {
        return redisTemplate.opsForValue().increment(key, step);
    }

    
    public boolean setnx(String key, Object value) {
        return redisTemplate.opsForValue().setIfAbsent(key, value);
    }

    
    public boolean setnxAndExpire(String key, Object value, long expire) {
        return redisTemplate.opsForValue().setIfAbsent(key, value, expire, TimeUnit.SECONDS);
    }

    
    public Object getAndSet(String key, Object value) {
        return redisTemplate.opsForValue().getAndSet(key, value);
    }

    
    public boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }

    
    public long llen(String key) {
        return redisTemplate.opsForList().size(key);
    }

    
    public Object lgetByIndex(String key, long index) {
        try {
            return redisTemplate.opsForList().index(key, index);
        } catch (Exception e) {
            log.error("redis lgetByIndex error,key:{},index:{}exception:{}", key, index, e);
            return null;
        }
    }

    
    public boolean lrpush(String key, Object value) {
        try {
            redisTemplate.opsForList().rightPush(key, value);
            return true;
        } catch (Exception e) {
            log.error("redis lrpush error,key:{},value:{}exception:{}", key, value, e);
            return false;
        }
    }

    
    public boolean lrpush(String key, Object value, long time) {
        try {
            redisTemplate.opsForList().rightPush(key, value);
            if (time > 0)
                expire(key, time);
            return true;
        } catch (Exception e) {
            log.error("redis lrpush error,key:{},value:{},timeL{},exception:{}", key, value, time, e);
            return false;
        }
    }

    
    public boolean lrpush(String key, List value) {
        try {
            redisTemplate.opsForList().rightPushAll(key, value);
            return true;
        } catch (Exception e) {
            log.error("redis lrpush error,key:{},value:{},exception:{}", key, value, e);
            return false;
        }
    }

    
    public boolean lrpush(String key, List value, long time) {
        try {
            redisTemplate.opsForList().rightPushAll(key, value);
            if (time > 0)
                expire(key, time);
            return true;
        } catch (Exception e) {
            log.error("redis lrpush error,key:{},value:{},time:{},exception:{}", key, value, time, e);
            return false;
        }
    }

    
    public boolean lUpdateByIndex(String key, long index, Object value) {
        try {
            redisTemplate.opsForList().set(key, index, value);
            return true;
        } catch (Exception e) {
            log.error("redis lUpdateByIndex error,key:{},index:{},value:{},exception:{}", key, index, value, e);
            return false;
        }
    }

    
    public long lrem(String key, long count, Object value) {
        try {
            Long remove = redisTemplate.opsForList().remove(key, count, value);
            return remove;
        } catch (Exception e) {
            log.error("redis lrem error,key:{},count:{},value:{},exception:{}", key, count, value, e);
            return 0;
        }
    }
    

    
    public boolean hset(String key, String field, Object value) {
        try {
            redisTemplate.opsForHash().put(key, field, value);
            return true;
        } catch (Exception e) {
            log.error("redis hset eror,key:{},field:{},value:{}", key, field, value);
            return false;
        }
    }

    
    public boolean hset(String key, String field, Object value, long seconds) {
        try {
            redisTemplate.opsForHash().put(key, field, value);
            expire(key, seconds);//调用通用方法设置过期时间
            return true;
        } catch (Exception e) {
            log.error("redis hset and expire eror,key:{},field:{},value:{},exception:{}", key, field, value, e);
            return false;
        }
    }

    
    public Object hget(String key, String field) {
        return redisTemplate.opsForHash().get(key, field);
    }

    
    public Map hmget(String key, String... fields) {
        Map map = new HashMap<>();
        for (String field : fields) {
            map.put(field, hget(key, field));
        }
        return map;
    }

    
    public Map hmget(String key) {
        return redisTemplate.opsForHash().entries(key);
    }
} 

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号