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