Redis如何存储对象(Redis存储对象)

您所在的位置:网站首页 redis存储对象用什么类型 Redis如何存储对象(Redis存储对象)

Redis如何存储对象(Redis存储对象)

#Redis如何存储对象(Redis存储对象)| 来源: 网络整理| 查看: 265

目录Redis存储对象首先引入依赖创建一个Jedis实例方式一:将对象转化为JSON字符串存入redis方式二:将对象序列化后存到redis方式三:将对象用Hash数据类型存储Redis可以存储java对象吗答案:是可以

Redis存储对象

在以往面试中,多次被问到Redis怎么存储对象,我支支吾吾半天回答不上来,毕竟我只用过String类型,为了避免以后的尴尬,今天花点时间来整理一下。

本人用的Jedis客户端

首先引入依赖                     redis.clients             jedis             3.2.0        

创建一个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; /** * jedis获取工具类 */ 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); } /** * 获取一个Jedis实例 * @return */ 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 { /** * 序列化操作 * @param object * @return */ 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; } /** * 反序列化操作 * @param bytes * @return */ 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 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; @Configuration public class RedisConfiguration { /** * @return org.springframework.data.redis.core.RedisTemplate * @Author 徐柯 * @Description 改写redistemplate序列化规则 * @Date 13:20 2021/5/20 * @Param [redisConnectionFactory] **/ @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate 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; } }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。

美国稳定服务器

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3