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!
Você olha para cada ponto, eu seriamente como favorita