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