千家信息网

redis中list存储对象的方法

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下redis中list存储对象的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果需要用到Redis存
千家信息网最后更新 2026年11月02日redis中list存储对象的方法

小编给大家分享一下redis中list存储对象的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

如果需要用到Redis存储List对象,而list又不需要进行操作,可以按照MC的方式进行存储,不过Jedis之类的客户端没有提供API,可以有两种思路实现:

1. 分别序列化 elements ,然后 set 存储

2. 序列化List对象,set存储

这两种方法都类似MC的 Object方法存储,运用这种方式意味着放弃Redis对List提供的操作方法。

import net.spy.memcached.compat.CloseUtil;import net.spy.memcached.compat.log.Logger;import net.spy.memcached.compat.log.LoggerFactory;import redis.clients.jedis.Client;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import java.io.*;import java.util.ArrayList;import java.util.List;import java.util.Random;/** * Created by IntelliJ IDEA. * User: lifeng.xu * Date: 12-6-11 * Time: 上午11:10 * To change this template use File | Settings | File Templates. */public class JedisTest {    private static Logger logger = LoggerFactory.getLogger(JedisTest.class);    /**     * Jedis Pool for Jedis Resource     * @return     */    public static JedisPool buildJedisPool(){        JedisPoolConfig config = new JedisPoolConfig();        config.setMaxActive(1);        config.setMinIdle(50);        config.setMaxIdle(3000);        config.setMaxWait(5000);        JedisPool jedisPool = new JedisPool(config,                "*****", ****);        return jedisPool;    }    /**     * Test Data     * @return     */    public static List buildTestData(){        User a = new User();        a.setName("a");        User b = new User();        b.setName("b");        List list = new ArrayList();        list.add(a);        list.add(b);        return list;    }    /**     * Test for     */    public static void testSetElements(){        List testData = buildTestData();        Jedis jedis = buildJedisPool().getResource();        String key = "testSetElements" + new Random(1000).nextInt();        jedis.set(key.getBytes(), ObjectsTranscoder.serialize(testData));        //验证        byte[] in = jedis.get(key.getBytes());        List list = ObjectsTranscoder.deserialize(in);        for(User user : list){            System.out.println("testSetElements user name is:" + user.getName());        }    }    public static void testSetEnsemble(){        List testData = buildTestData();        Jedis jedis = buildJedisPool().getResource();        String key = "testSetEnsemble" + new Random(1000).nextInt();        jedis.set(key.getBytes(), ListTranscoder.serialize(testData));        //验证        byte[] in = jedis.get(key.getBytes());        List list = (List)ListTranscoder.deserialize(in);        for(User user : list){            System.out.println("testSetEnsemble user name is:" + user.getName());        }    }    public static void main(String[] args) {        testSetElements();        testSetEnsemble();    }    public static void close(Closeable closeable) {        if (closeable != null) {            try {                closeable.close();            } catch (Exception e) {                logger.info("Unable to close %s", closeable, e);            }        }    }    static class User implements Serializable{        String name;        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }    }    static class ObjectsTranscoder{                public static byte[] serialize(List value) {            if (value == null) {                throw new NullPointerException("Can't serialize null");            }            byte[] rv=null;            ByteArrayOutputStream bos = null;            ObjectOutputStream os = null;            try {                bos = new ByteArrayOutputStream();                os = new ObjectOutputStream(bos);                for(User user : value){                    os.writeObject(user);                }                os.writeObject(null);                os.close();                bos.close();                rv = bos.toByteArray();            } catch (IOException e) {                throw new IllegalArgumentException("Non-serializable object", e);            } finally {                close(os);                close(bos);            }            return rv;        }        public static List deserialize(byte[] in) {            List list = new ArrayList();            ByteArrayInputStream bis = null;            ObjectInputStream is = null;            try {                if(in != null) {                    bis=new ByteArrayInputStream(in);                    is=new ObjectInputStream(bis);                    while (true) {                        User user = (User) is.readObject();                        if(user == null){                            break;                        }else{                            list.add(user);                        }                    }                    is.close();                    bis.close();                }            } catch (IOException e) {                logger.warn("Caught IOException decoding %d bytes of data",                        in == null ? 0 : in.length, e);            } catch (ClassNotFoundException e) {                logger.warn("Caught CNFE decoding %d bytes of data",                        in == null ? 0 : in.length, e);            } finally {                CloseUtil.close(is);                CloseUtil.close(bis);            }            return list;        }    }        static class ListTranscoder{        public static byte[] serialize(Object value) {            if (value == null) {                throw new NullPointerException("Can't serialize null");            }            byte[] rv=null;            ByteArrayOutputStream bos = null;            ObjectOutputStream os = null;            try {                bos = new ByteArrayOutputStream();                os = new ObjectOutputStream(bos);                os.writeObject(value);                os.close();                bos.close();                rv = bos.toByteArray();            } catch (IOException e) {                throw new IllegalArgumentException("Non-serializable object", e);            } finally {                close(os);                close(bos);            }            return rv;        }        public static Object deserialize(byte[] in) {            Object rv=null;            ByteArrayInputStream bis = null;            ObjectInputStream is = null;            try {                if(in != null) {                    bis=new ByteArrayInputStream(in);                    is=new ObjectInputStream(bis);                    rv=is.readObject();                    is.close();                    bis.close();                }            } catch (IOException e) {                logger.warn("Caught IOException decoding %d bytes of data",                        in == null ? 0 : in.length, e);            } catch (ClassNotFoundException e) {                logger.warn("Caught CNFE decoding %d bytes of data",                        in == null ? 0 : in.length, e);            } finally {                CloseUtil.close(is);                CloseUtil.close(bis);            }            return rv;        }    }}

PS:Redsi中存储list没有封装对Object的API,是不是也是倾向于只存储用到的字段,而不是存储Object本身呢?Redis是一个In-Mem的产品,会觉得我们应用的方式。

以上是redis中list存储对象的方法的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

存储 方法 对象 方式 内容 序列 篇文章 验证 不怎么 产品 倾向 大部分 字段 客户 客户端 思路 意味 更多 知识 行业 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 重庆互联网络科技 互联网金融 科技 紫鲸互联网科技 互联网科技革命 撒么互联网科技公司 上海卓越科技 互联网 一五八零互联网科技 佰商互联网科技有限公司 成都仁贤领冠互联网科技有限公司 顶级互联网科技成果有哪些 宝灵互联网科技有限公司 朱啸虎曾投资哪些互联网科技企业 华中科技大学互联网的牛人 互联网与数字科技关系 科技互联网经济论坛 互联网科技和医药行业 互联网科技创新创业项目 北京品多多互联网科技有限公司 互联网科技快速发展优美句子 云之行互联网科技 紫鲸互联网科技 易通互联网络科技有限公司 福州新华互联网科技学校 知乎 注册互联网科技公司经营范围大全 成都互联网科技公司工作好不好 烟台灵鸽互联网科技有限公司 启辰互联网科技 陕西彩京云互联网科技有限公司 武汉亿视互联网科技有限公司
0