搜索

搭建个人存储服务器NAS

用过了各种网盘,各种限制,各种害怕数据泄露,于是就踏上了搭建自己存储服务器这条路,如果有条件赶紧试试吧。

掌上菜谱-微菜谱等你来解锁

像我这种不会做饭的人,偶尔兴趣来潮,想动手做做饭,泡泡茶,那么就需要一本菜谱来指引了,为此,我专门开发了一款菜谱小程序,欢迎体验。

Java抽象类的使用

我们在实际开发中会有一定的业务流程,很多流程的步骤是一样的,但是具体的业务逻辑需要不同的场景去完成,这时候我们首先想到的是抽象类和接口。

Java使用redis缓存数据

redis的好处就不用多说了,存储速度快,操作简单,缓存一些配置信息,业务加锁等场景都可以胜任,很不错的选择。

不愿多说废话,直接上码。

1、依然使用spring cloud,引用maven依赖:

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

 

2、配置redis,可以自己写配置类,也可以直接使用配置文件进行配置参数:

spring:
  redis:
    port: 6379
    host: 127.0.0.1
    database: 0
    timeout: 6000ms

 

3、封装自己的工具类:

package com.vlihub.common.helper;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.vlihub.common.exception.VlihubException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

/**
 * 创建人:  537974(韦立)
 * 创建时间: 2020-12-31 18:24
 */
@Service
@Component
@Slf4j
public class RedisHelper {
    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    public <T> T getValue(Class<T> tClass, String key) {
        try {
            if (redisTemplate == null) {
                log.info("redis配置异常");
            }
            log.info("redis:" + redisTemplate.getConnectionFactory().toString());
            Object value = redisTemplate.opsForValue().get(key);
            return tClass.cast(value);
        } catch (Exception e) {
            throw new VlihubException(e);
        }
    }

    public void setValue(String key, Object value) {
        try {
            redisTemplate.opsForValue().set(key, value);
        } catch (Exception e) {
            throw new VlihubException(e);
        }
    }

    public void setValue(String key, Object value, Long timeOut, TimeUnit timeUnit) {
        try {
            redisTemplate.opsForValue().set(key, value, timeOut, timeUnit);
        } catch (Exception e) {
            throw new VlihubException(e);
        }
    }

    public void deleteObj(String key) {
        try {
            redisTemplate.delete(key);
        } catch (Exception e) {
            throw new VlihubException(e);
        }
    }

    @Bean("redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        // 使用Jackson2JsonRedisSerialize 替换默认序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        // 设置value的序列化规则和 key的序列化规则
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

4、使用示例:

    @Resource
    private RedisHelper redisHelper;

// 设置
redisHelper.setValue(RedisKey.ARTICLE_LIST_HOT, hotResult);

// 获取
List<ArticleCard> list = redisHelper.getValue(List.class, RedisKey.ARTICLE_LIST_HOT);

 

根据自己的需求扩展自己的工具类,至此就可以开心的开车了tongue-out

留 言