zoukankan      html  css  js  c++  java
  • redis jedis存储对象简单操作,map list 自定义对象

    安装好redis,进行了基本的操作。包括对map list 和自定义对象的基本操作。笔记都在代码注释里,直接上代码。

    private Jedis jedis;
    
        @Before
        public void before() {
            jedis = new Jedis("127.0.0.1");
        }
    
        /**
         * 简单添加
         */
        @Test
        public void test1() {
            String name = "name";
            String value = "qq";
            jedis.set(name, value);
            System.out.println("追加前:" + jedis.get(name)); // 追加前:qq
    
            // 在原有值得基础上添加,如若之前没有该key,则导入该key
            jedis.append(name, "ww");
            System.out.println("追加后:" + jedis.get(name)); // 追加后:qqww
    
            jedis.append("id", "ee");
            System.out.println("没此key:" + jedis.get(name));
            System.out.println("get此key:" + jedis.get("id"));
    
        }
    
        /**
         * mset 是设置多个key-value值 参数(key1,value1,key2,value2,...,keyn,valuen) mget
         * 是获取多个key所对应的value值 参数(key1,key2,key3,...,keyn) 返回的是个list
         */
        @Test
        public void test2() {
            jedis.mset("name1", "aa", "name2", "bb", "name3", "cc");
            System.out.println(jedis.mget("name1", "name2", "name3"));
        }
    
        /**
         * map
         */
        @Test
        public void test3() {
            Map<String, String> map = new HashMap<String, String>();
            map.put("name", "fujianchao");
            map.put("password", "123");
            map.put("age", "12");
            // 存入一个map
            jedis.hmset("user", map);
    
            // map key的个数
            System.out.println("map的key的个数" + jedis.hlen("user"));
    
            // map key
            System.out.println("map的key" + jedis.hkeys("user"));
    
            // map value
            System.out.println("map的value" + jedis.hvals("user"));
    
            // (String key, String... fields)返回值是一个list
            List<String> list = jedis.hmget("user", "age", "name");
            System.out.println("redis中key的各个 fields值:"
                    + jedis.hmget("user", "age", "name") + list.size());
    
            // 删除map中的某一个键 的值 password
            // 当然 (key, fields) 也可以是多个fields
            jedis.hdel("user", "age");
    
            System.out.println("删除后map的key" + jedis.hkeys("user"));
    
        }
    
        /**
         * list
         */
        @Test
        public void test4() {
    
            jedis.lpush("list", "aa");
            jedis.lpush("list", "bb");
            jedis.lpush("list", "cc");
            System.out.println(jedis.lrange("list", 0, -1));
            System.out.println(jedis.lrange("list", 0, 1));
            System.out.println(jedis.lpop("list")); // 栈顶
            jedis.del("list");
        }
    
        /**
         * 自定义对象 User为例 id name
         * 
         * RedisTemplate 中有 序列化和反序列化
         * 如:template.getStringSerializer().serialize("name")
         */
        @Test
        public void test5() {
    
            User user = new User();
            user.setId(123);
            user.setName("fighter");
    
            // 存入一个 user对象
            jedis.set("user".getBytes(), SerializationUtil.serialize(user));
    
            // 获取
            byte[] bs = jedis.get("user".getBytes());
            User desUser = (User) SerializationUtil.deserialize(bs);
            System.out.println(desUser.getId() + ":" + desUser.getName());
    
        }

    对于自定义对象,需要进行序列化和反序列化:我这里提取出了一个工具类,

    SerializationUtil.java
    /**
     *  序列化就是将一个对象转换为二进制的数据流。这样就可以进行传输,或者保存到文件中。如果一个类的对象要想实现序列化,就必须实现serializable接口。在此接口中没有任何的方法,此接口只是作为一个标识,表示本类的对象具备了序列化的能力而已。
     *  反序列化:将二进制数据流转换成相应的对象。
     *  如果想要完成对象的序列化,则还要依靠ObjectOutputStream和ObjectInputStream,前者属于序列化操作,而后者属于反序列化操作。
     *  
     */
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    
    public class SerializationUtil {
        /**
         * 序列化
         * 
         * @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 (Exception e) {
            }
            return null;
        }
    
        /**
         * 反序列化
         * 
         * @param bytes
         * @return
         */
        public static Object deserialize(byte[] bytes) {
            ByteArrayInputStream bais = null;
            try {
                bais = new ByteArrayInputStream(bytes);
                ObjectInputStream ois = new ObjectInputStream(bais);
                return ois.readObject();
            } catch (Exception e) {
    
            }
            return null;
        }
    
    }

    还有都熟悉的User类。我只简单实用id和name,测试,也贴一下吧

    public class User implements Serializable {
        /**
         * 
         */
        private static final long serialVersionUID = -1530813282496676263L;
        private Integer id;
        private String name;
    
        
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }

    昨天也进行了与spring的整合。整理一下

     
  • 相关阅读:
    dos窗口运行java文件需要jar依赖
    java爬虫,爬取当当网数据
    java上传excel到后台解析入库
    springboot项目上传文件出现临时文件目录为空
    parse_url 解析url的函数
    PHP中计算两个时间相差的天数、小时数、分钟数、秒数
    编写函数取得上个月的最后一天
    原生SQL连接数据库
    linux查看磁盘剩余空间以及cpu使用情况
    laravel request 类进行form表单验证
  • 原文地址:https://www.cnblogs.com/781811964-Fighter/p/4273891.html
Copyright © 2011-2022 走看看