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之父拉曼罗伊创立的.全球外包一百强公司--柯特罗全球服务公司亚太区总裁柯普莱尼·普拉卡什发表主题演讲,题目为:融入外包浪潮--中国的一种增长策略.
一周排行
  • 一.概述 连接到Internet上计算机都有一个称为Internet地址或IP地址的唯一的数来标识.由于IP很难记住,人们设计了域名系统(DNS),DNS可以将人们可以记忆的主机名与计算机可以记忆的IP地址联系在一起 ...
  • 码农如何实现高帅富 当今IT界真可谓是好不热闹:谷歌推出chrome os,微软推出windows 8,W3C的HTML5也让人如雷贯耳,又有"云"飘在天上,至于最近最火的移动开发诸如ios.ip ...
  • 10年前的Web技术还比较落后,浏览器功能也非常有限,你知道现在最受欢迎的这些网站,在10年前甚至更早的时候是什么样子吗?为你揭示包括 Google.雅虎.eBay.维基百科等网站的老面孔: 1. Google (1 ...
  • 转自:http://www.opsers.org/linux-home/base/full-version-of-bash-keyboard-shortcuts.html#toc-3 生活在 Bash shell 中 ...
  • 资本冷落之下,电商开始由之前的追求规模转向追求盈利.继京东.凡客要求盈利止损之后,包括当当.窝窝团在内的电商公司直指盈利目标.2013年电商业的行业大战主角,将由之前的价格战血拼,退位于盈利比拼,2013年电商行业或 ...
  • 题目链接:http://poj.org/problem?id=3211 题意:有M件衣服,每种衣服有一种颜色,一共有N种颜色.现在两个人洗衣服,规则是必须把这一种颜色的衣服全部洗完才能去洗下一种颜色的衣服. 问:在两 ...
  • 全球主要信用评级机构惠誉国际信用评级有限公司11月2日宣布,把日本电子产品巨头夏普公司的信用评级降至垃圾级.惠誉当天把夏普的信用评级连降6级,至B-,这一级别不再是安全的投资级别.一些分析师认为,夏普11月1日公开5 ...
  • Apple Watch已经上市一段时间了,相信把玩过Apple Watch 的人都应该对Apple Watch上旧金山字体有所印象,在今年更新的iOS 9 和 0S X 10.11 当中也将会采用全新的旧金山字体,下 ...
  • 1. 安装搭建IIS服务环境(在可能需要下载IIS安装包),控制面板,利用“添加/删除程序”的“添加/删除Windows组件”功能,安装“Internet信息服务”组件(如Internet信息服务管理单元.公用文件. ...
  • There are vaious strategies to locate elements in a page. You can use the most appropriate one for your case ...