Redis怎么存储对象
短信预约 -IT技能 免费直播动态提醒
这篇“Redis怎么存储对象”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis怎么存储对象”文章吧。
Redis存储对象
首先引入依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency>
创建一个Jedis实例
package com.xiateng.util;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig; public class JedisUtil { private static JedisPool jedisPool; private static final Logger logger = LoggerFactory.getLogger(JedisUtil.class); static { // 初始化连接池 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(20); jedisPoolConfig.setMaxIdle(10); jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379); logger.info("jedisPool连接池初始化====" + jedisPool); } public synchronized static Jedis getJedis(){ Jedis jedis = jedisPool.getResource();// jedis.auth("123456");//密码 return jedis; }}
下面我们来实现存储对象
方式一:将对象转化为JSON字符串存入redis
Jedis jedis = JedisUtil.getJedis();TUser tUser = new TUser();tUser.setUserName("你好");tUser.setPassword("2342342");jedis.set("xiateng", JSON.toJSONString(tUser)); String sss = jedis.get("xiateng");TUser ssss = JSON.parseObject(sss,TUser.class);jedis.del("xiateng");System.out.println("---------------------------: "+ssss.toString());
方式二:将对象序列化后存到redis
封装序列化跟反序列化方法
package com.xiateng.util; import java.io.*; public class SerializeUtil { public static byte[] serialize(Object object){ ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; try { // 序列化 baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(object); byte[] bytes = baos.toByteArray(); return bytes; } catch (IOException e) { e.printStackTrace(); } return null; } public static Object unSerialize(byte[] bytes){ ByteArrayInputStream bais = null; try { bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais); return ois.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; }}
保存对象
Jedis jedis = JedisUtil.getJedis(); jedis.set("code".getBytes(), SerializeUtil.serialize(tUser));byte[] bytes = jedis.get("code".getBytes());TUser o = (TUser)SerializeUtil.unSerialize(bytes);jedis.del("code");System.out.println(o.toString());
方式三:将对象用Hash数据类型存储
Jedis jedis = JedisUtil.getJedis();jedis.hset("user", "id", "3");jedis.hset("user", "name", "xiateng");jedis.hset("user", "password", "123455");jedis.hget("user","id");List<String> user = jedis.hmget("user", new String[]{"id","name","password"});System.out.println("---------------------------: "+user); // 输出结果 [3,xiateng,123455]
注意:以序列化的方式存储的对象需要实现 Serializable 接口
Redis可以存储java对象吗
答案:是可以
但是你对象必须要序列化。
redis没有办法把一个没有序列化的对象存储到redis中。
package com.kuangstudy.entiy;import lombok.Data;public class User implements java.io.Serializable{ private Integer id; private String nickname; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
这样太麻烦了,并且存储中文会有乱码,那如何解决呢?只能重新定义一个redisTemplate
package com.kuangstudy.config;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.GenericJackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;@Configurationpublic class RedisConfiguration { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 创建一个json的序列化方式 GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); // 设置value用jackjson进行处理 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // 设置key用string序列化方式 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; }}
以上就是关于“Redis怎么存储对象”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341