Fun SpringBoot2.x de objetos em cache | programa de Força

Autor | mesa de lua

Fonte | CSDN blogue

Cabeça Figura | download pago a partir da China visuais

Exposição | CSDN (ID: CSDNnews)

prefácio

Mencionou a possibilidade de Redis a maioria das pessoas primeiro pensamento é armazenada em cache, então como objetos Java são armazenados em cache no projeto não? Isso é o que este artigo seguinte para introduzir: objeto cache. Este artigo leva você através SpringBoot entender rapidamente o projeto por Jedis no cache objeto para Redis.

Leia este artigo você precisa saber como projeto SpringBoot compilação, você precisa saber é outra versão deste artigo SpringBoot é 2.1.0.RELEASE. Sobre SpringBoot integrado Jedis consulte: rápida integração do cliente 2.x Fun SpringBoot Jedis (Edition)

Em seguida, vamos iniciar casos de código específico apresentá-lo!

Casos de código

Seguindo apresentação objeto de cache criado para a classe User Redis em particular, existem duas maneiras: de serialização, JSON. código de classe específica de usuário da seguinte forma:

 1public class User implements Serializable {
 2
 3    private String name;
 4    private Integer age;
 5
 6    public User(String name,Integer age){
 7        this.name = name;
 8        this.age = age;
 9    }
10    //省略 getter and setter 方法
11}

tempo de expiração sobre o tratamento e retorno ao pool de threads Jedis operações de rosca operação para pacote JedisCacheServiceSupport, o código específico da seguinte forma:

 1public abstract class JedisCacheServiceSupport {
 2    public static final long EXPIRE_MILLISECONDS_DEFAULT_LONG = 3*60*60*1000;
 3
 4    public Long getExpireTime(Long expireTime) {
 5        expireTime = (expireTime == null || expireTime.longValue() <= 0) ? EXPIRE_MILLISECONDS_DEFAULT_LONG : expireTime;
 6        return expireTime;
 7    }
 8
 9    public void close(Jedis jedis){
10        if(jedis != null){
11            jedis.close();
12        }
13    }
14}

serialização

forma serializados, agora convertido para um fluxo binário depois de objectos de armazenamento (serialização) para Redis então adquirida por uma chave de binário, fluxo binário para um objecto (deserialize) em.

Segurando objeto faça o seguinte:

Por ObjectOutputStream.writeObject (objecto) para converter o objecto para um byte matriz do utilizador, em seguida, psetex (chave byte [], longos milissegundos, byte [] Valor) a matriz byte [] é armazenado em Redis. entre

  • byte de chave []: chave tem de ser convertida em uma matriz de bytes.

  • longos milissegundos: sobrevivência do assunto é no tempo Redis, em milissegundos.

  • byte [] Valor: btye objeto na matriz.

Adquirir um objeto faça o seguinte:

-Se um objecto de matriz de bytes é convertido por o (tecla byte []) Obter do utilizador, em seguida, ObjectInputStream.readObject) conversão (objeto do utilizador para uma matriz.

Salvar e recuperar objetos código específico da seguinte forma serialização por:

  1@Service
  2public class JedisCacheService extends JedisCacheServiceSupport  {
  3
  4    private static Logger logger = LoggerFactory.getLogger(JedisCacheService.class);
  5
  6
  7
  8    @Autowired
  9    private JedisPool jedisPool;
 10
 11    /**
 12     * 获取缓存中的对象
 13     * @param key
 14     * @return
 15     */
 16    public Object getObject(String key) {
 17        Jedis jedis = null;
 18        Object object = null;
 19        try {
 20            jedis = jedisPool.getResource();
 21            byte[] ObjectByteArray = jedis.get(key.getBytes());
 22            object = unserialize(ObjectByteArray);
 23        }catch (Exception e){
 24            e.printStackTrace();
 25        }finally {
 26            close(jedis);
 27        }
 28        return object;
 29    }
 30
 31    /**
 32     *  将对象缓存到Redis中,设置默认过期时间
 33     * @param key
 34     * @param value
 35     */
 36    public void putObject(String key, Object value) {
 37        putObject(key,value,null);
 38    }
 39    /**
 40     *  将对象缓存到Redis中,自定义认过期时间
 41     * @param key
 42     * @param value
 43     */
 44    public void putObject(String key, Object value, Long expireTime) {
 45        Jedis jedis = null;
 46        try {
 47            jedis = jedisPool.getResource();
 48            jedis.psetex(key.getBytes(),getExpireTime(expireTime),serialize(value));
 49        }catch (Exception e){
 50            e.printStackTrace();
 51        }finally {
 52            close(jedis);
 53        }
 54    }
 55
 56
 57    /**
 58     * 序列化
 59     * @param object
 60     * @return
 61     */
 62    public static byte[] serialize(Object object) {
 63        ObjectOutputStream oos = null;
 64        ByteArrayOutputStream baos = null;
 65        try {
 66            baos = new ByteArrayOutputStream();
 67            oos = new ObjectOutputStream(baos);
 68            oos.writeObject(object);
 69            byte[] bytes = baos.toByteArray();
 70            return bytes;
 71        } catch (Exception e) {
 72            logger.error(e.getMessage(), e);
 73        } finally {
 74            IOUtil.closeStream(oos);
 75            IOUtil.closeStream(baos);
 76        }
 77        return null;
 78    }
 79
 80    /**
 81     * 反序列化
 82     * @param bytes
 83     * @return
 84     */
 85    public static Object unserialize(byte[] bytes) {
 86        if (bytes == null) return null;
 87
 88        ByteArrayInputStream bais = null;
 89        ObjectInputStream ois = null;
 90        try {
 91            bais = new ByteArrayInputStream(bytes);
 92            ois = new ObjectInputStream(bais);
 93            return ois.readObject();
 94        } catch (Exception e) {
 95            logger.error(e.getMessage(), e);
 96        } finally {
 97            IOUtil.closeStream(bais);
 98            IOUtil.closeStream(ois);
 99        }
100        return null;
101    }
102}

Fechando a entrada e saída de fluxos de código específico ferramentas da seguinte forma:

 1public class IOUtil {
 2    public static void closeStream(InputStream inputStream) {
 3        if (inputStream != null) {
 4            try {
 5                inputStream.close();
 6            } catch (IOException e) {
 7                e.printStackTrace();
 8            }
 9
10        }
11    }
12
13    public static void closeStream(OutputStream outputStream) {
14        if (outputStream != null) {
15            try {
16                outputStream.close();
17            } catch (IOException e) {
18                e.printStackTrace();
19            }
20
21        }
22    }
23}

serialização de demonstração

Teste JedisCacheService putObject (um objeto colocado no cache), o getObject (obter o objeto do cache), o código específico é a seguinte:

 1@RunWith(SpringRunner.class)
 2@SpringBootTest
 3public class JedisCacheServiceTest {
 4    private  Logger logger = LoggerFactory.getLogger(JedisCacheService.class);
 5    @Autowired
 6    private JedisCacheService jedisCacheService;
 7
 8    @Test
 9    public void putObject() {
10        User user = new User("zhuoqiammingyue",19);
11        jedisCacheService.putObject("user01",user);
12        logger.info("缓存用户成功!");
13    }
14
15    @Test
16    public void getObject() {
17        User user = (User)jedisCacheService.getObject("user01");
18        logger.info("User name={},age={}",user.getName(),user.getAge());
19    }
20}

putObject informações de log:

12020-02-26 22:08:50.320  INFO 26748 --- [           main] cn.lijunkui.cache.JedisCacheServiceTest  : Started JedisCacheServiceTest in 7.157 seconds (JVM running for 9.357)
22020-02-26 22:08:51.144  INFO 26748 --- [           main] cn.lijunkui.cache.JedisCacheService      : 缓存用户成功!

getObject registrar informações:

12020-02-26 22:09:57.492  INFO 9612 --- [           main] cn.lijunkui.cache.JedisCacheServiceTest  : Started JedisCacheServiceTest in 7.07 seconds (JVM running for 8.902)
22020-02-26 22:09:58.143  INFO 9612 --- [           main] cn.lijunkui.cache.JedisCacheService      : User name=zhuoqiammingyue,age=19

Json maneira

Json maneira é para salvar o objeto em uma string legível para Json Redis seguida string JSON adquirida pela chave, no objeto Json amarrados. JSON objeto em uma string no Gson pelo Google concluída, é necessário introduzir Gson dependente, dependente do código específico da seguinte forma:

1<dependency>
2    <groupId>com.google.code.gson</groupId>
3    <artifactId>gson</artifactId>
4    <version>2.8.5</version>
5</dependency>

operação json específico alvo de armazenamento é a seguinte:

Por Gson.toJson (src Object) converter o objeto em um usuário Json corda, psetex então (String chave, milissegundos longos, String value) na cadeia de JSON em Redis.

Adquirir um objeto Json faça o seguinte:

Por get (String key) objeto Usuário de string JSON, então Gson.fromJson (json String, Class <T> classOfT) para converter a string em Json objeto Usuário.

Salvar e recuperar objetos código específico Json como segue pelo caminho:

 1@Service
 2public class JedisJsonCacheService extends JedisCacheServiceSupport {
 3
 4    private static Logger logger = LoggerFactory.getLogger(JedisJsonCacheService.class);
 5
 6    @Autowired
 7    private JedisPool jedisPool;
 8
 9    /**
10     * 获取缓存中的对象
11     * @param key
12     * @param clazz
13     * @return
14     */
15    public Object getObject(String key,Class clazz) {
16        Jedis jedis = null;
17        Object object = null;
18        try {
19            jedis = jedisPool.getResource();
20            String objectJson = jedis.get(key);
21             object = toObjce(objectJson,clazz);
22        }catch (Exception e){
23            e.printStackTrace();
24        }finally {
25            close(jedis);
26        }
27        return object;
28    }
29
30    /**
31     * 将对象缓存到Redis中,设置默认过期时间
32     * @param key
33     * @param value
34     */
35    public void putObject(String key, Object value) {
36        putObject(key, value,null);
37    }
38
39    /**
40     * 将对象缓存到Redis中,自定义认过期时间
41     * @param key
42     * @param value
43     * @param expireTime
44     */
45    public void putObject(String key, Object value, Long expireTime) {
46        Jedis jedis = null;
47        try {
48            jedis = jedisPool.getResource();
49            jedis.psetex(key,getExpireTime(expireTime),toJson(value));
50        }catch (Exception e){
51            e.printStackTrace();
52        }finally {
53            close(jedis);
54        }
55    }
56
57
58
59    /**
60     * 将对象转换成Json串
61     * @param value
62     * @return
63     */
64    private String toJson(Object value) {
65        Gson gson = new Gson();
66        return gson.toJson(value);
67    }
68
69    /**
70     * 将Json串转换成对象
71     * @param json
72     * @param clazz
73     * @return
74     */
75    private Object  toObjce(String json,Class clazz) {
76        Gson gson = new Gson();
77        return gson.fromJson(json,clazz);
78    }
79}

serialização de demonstração

Teste JedisJsonCacheServiceTest putObject (um objeto colocado no cache), o getObject (obter o objeto do cache), o código específico é a seguinte:

 1@RunWith(SpringRunner.class)
 2@SpringBootTest
 3public class JedisJsonCacheServiceTest {
 4
 5    private Logger logger = LoggerFactory.getLogger(JedisJsonCacheServiceTest.class);
 6    @Autowired
 7    private JedisJsonCacheService jedisJsonCacheService;
 8
 9    @Test
10    public void putObject() {
11        User user = new User("zhuoqiammingyue2",20);
12        jedisJsonCacheService.putObject("user02",user);
13        logger.info("缓存用户成功!");
14    }
15
16    @Test
17    public void getObject() {
18        User user = (User)jedisJsonCacheService.getObject("user02",User.class);
19        logger.info("User name={},age={}",user.getName(),user.getAge());
20    }
21}

putObject informações de log:

12020-02-27 07:57:16.184  INFO 3692 --- [           main] c.l.cache.JedisJsonCacheServiceTest      : Started JedisJsonCacheServiceTest in 7.92 seconds (JVM running for 10.786)
22020-02-27 07:57:16.852  INFO 3692 --- [           main] c.l.cache.JedisJsonCacheServiceTest      : 缓存用户成功!

getObject registrar informações:

12020-02-27 07:57:56.359  INFO 27624 --- [           main] c.l.cache.JedisJsonCacheServiceTest      : Started JedisJsonCacheServiceTest in 7.364 seconds (JVM running for 9.256)
22020-02-27 07:57:56.824  INFO 27624 --- [           main] c.l.cache.JedisJsonCacheServiceTest      : User name=zhuoqiammingyue2,age=20

resumo

seqüências JSON e estas duas maneiras, no desenvolvimento real pode escolher de acordo com suas preferências. forma JSON usando Gson claro que você também pode usar FASTJSON, utilizando uma sequência de serialização e desserialização Java nativa, mas você também pode mudar para uma serialização Hessian mais eficiente e desserialização.

O código de exemplo

Meu ambiente local da seguinte forma:

  • SpringBoot Versão: 2.1.0.RELEASE

  • Apache Maven Versão: 3.6.0

  • Java Versão: 1.8.0_144

  • IDEA: IDEA IntellJ

Durante a operação, tal como os problemas podem nos meus springbootexamples repositório GitHub no módulo chamado spring-boot-2.x redis- jedis-ObjectCache comparar Ver projeto

GitHub: https: //github.com/zhuoqianmingyue/springbootexamples

link original: https: //blog.csdn.net/ljk126wy/article/details/104519059

【Fim】

"Plano de Força [segundo trimestre] - a capacidade de aprendizagem Challenge" começou!
A partir de agora até 21 de março, deve fluir para apoiar o autor original, a medalha de exclusividade [mais] esperando por você para desafio

Leitura recomendada 

programa pequeno QQ micro-canal foi fechado por causa de irregularidades; grande chance da Microsoft em maiores botnets do mundo; Código VS 1,43 libertação | Geeks manchetes

propaganda oficial! Ali em 5G, o estabelecimento da nova infra-estrutura laboratorial vigor XG

tecnologia de ponta quest: processos e métodos de construção mapa do conhecimento

na Alemanha Wuhan programador nas áreas afetadas: dados de download de manhã cedo, a obra velocidade de impacto

vulnerabilidades e ameaças nuvem que nativa? Como é seguro nuvem nativa? Aqui está tudo o que você precisa saber!

programação do sistema Bitcoin analógico branco simples, uma onda da mão e levá-lo para escrever! (Com código) | Bowen Destaque

Você olha para cada ponto, eu seriamente como favorita

Lançado 1817 artigos originais · ganhou elogios 40000 + · Visualizações 16,440,000 +

Acho que você gosta

Origin blog.csdn.net/csdnnews/article/details/104832409
Recomendado
Clasificación