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的整合。整理一下

 
更多相关文章
  • hiphop 来源:http://hi.baidu.com/securehiphop/blog/item/f5b3627a1768bcfc0ad187f5.html 源码下载:http://code.knowsky.com/down/14247.html今天一早起来吃早餐的时候去下载一套博客来看一下 ...
  • DEDE可以说是最容易上手的CMS.尝试过很多CMS程序,最后还是选择了DEDECMS.但是DEDE偶尔还是会出些小问题. DEDE可以说是最容易上手的CMS.尝试过很多CMS程序,最后还是选择了DEDECMS.但是DEDE偶尔还是会出些小问题. 刚装上dedecmsV5.1,更换了模板后,生成de ...
  • 已经碰见了好几次,在Exchange2007的场景中,前端角色所在服务器的w3wp.exe进程总是占用大量内存,以至于触发反压组件,停止了正常的邮件流投递,造成业务中断. 终于下决心查一下到底问题问题出在哪块,虽然Exchange 2007一直在出各种SP和rollUP声称解决了该问题(SP2,或者 ...
  • 数据库环境:SQL SERVER 2005 今天在生产库里抓到一条跑得慢的SQL,语句不是很复杂,返回的数据才有800多行, 却执行了34分钟,甚至更久. 先看一下执行结果 我贴一下SQL. SELECT a.dec_yt1 , b.dec_yt1 , a.dec_yt2 , b.dec_yt2 , ...
  • 数据库环境:SQL SERVER 2005 我们来看一下SQL语句及对应的数据量 SELECT COUNT(*) FROM cinvout_02 a WHERE ( a.dept_id IN ( SELECT RTRIM(dept_id) FROM ctlm2320 WHERE user1_id = ...
  • 由印度BPO之父拉曼罗伊创立的.全球外包一百强公司--柯特罗全球服务公司亚太区总裁柯普莱尼·普拉卡什发表主题演讲,题目为:融入外包浪潮--中国的一种增长策略.
一周排行
  • 与服务器交互获取数据,Json格式是比较普遍和简单的一种形式,下面就来利用Gson来快捷的解析数据: 1):在android项目libs文件夹下导入json-jar.jar(详细导包不再啰嗦) 2):封装工具类Jso ...
  • 使用这个命令查出文本中的单词出现频率按照由高到底排序 cat words.txt tr -cs "[a-z][A-Z]" "[\012*]"tr A-Z a-zsortuniq ...
  • youtube下载神器:https://github.com/rg3/youtube-dl 我擦咧 vim插件:https://github.com/Valloric/YouCompleteMe vim插件配置:ht ...
  • 最近一段时间,PHP凭借其功能强大,简单易用的特点被越来越多的人们所喜爱和接受,成为目前最为流行的脚本编程语言之一.本文将结合用户在使用PHP过程中经常容易出现的问题,包括语法错误,程序运行错误以及逻辑错误等展开详细 ...
  • 题目链接:http://codeforces.com/problemset/problem/216/D 题意: 对于一个梯形区域,如果梯形左边的点数!=梯形右边的点数,那么这个梯形为红色,否则为绿色, 问: 给定的蜘 ...
  • 编者按:从smart818的观点来看,线程池对性能的影响确实是非常大的,甚至可以把mariadb看成是mysql的企业版.在下面高并发测试显示,MySQL5.6.19的性能减少了50%,整个测试也说明了,MariaD ...
  • IntelliJ IDEA 6.0 最终版本发布了 IntelliJ IDEA是一个智能Java IDE,侧重于提高开发人员的工作效率.拥有一套高级开发工具,含以下主要功能和特性:重整.J2EE支持.Ant.Juni ...
  • 全民泡泡大战163关怎么过 全民泡泡大战163关三星通关攻略.一起跟随小编过来看看吧 全民泡泡大战163关三星通关攻略由小编给大家带来,希望大家喜欢. 全民泡泡大战163关三星通关攻略 缤纷海洋关三星通关指引. [过 ...
  • hdaudpropshortcut.exe - hdaudpropshortcut进程的详细介绍 进程文件: hdaudpropshortcut or hdaudpropshortcut.exe 进程名称: Univ ...
  • recommended movie: Happy Feet. The lovely little penguin, the song, the heel and toe sounding, the perfect 3 ...