redis 學習之一(資料結構)
阿新 • • 發佈:2018-12-25
通用方法 incr decr incrby decrby
redis string方法 get set mset mget setex expire
儲存物件的兩種方式//儲存序列化之後的物件 jedis.set("user:liudehua:obj".getBytes(), getBytesByProduct(person) ); //jedis.set("user:liudehua:obj".getBytes(), "fasdf"); 不能用這種形式 byte[] productBytes = jedis.get("user:liudehua:obj".getBytes()); Person pByte = getProductByBytes(productBytes); System.out.println(pByte.getName()+" " +pByte.getAge()); //儲存Json化之後的物件 jedis.set("user:liudehua:json", new Gson().toJson(person)); String personJson = jedis.get("user:liudehua:json"); Person pjson = new Gson().fromJson(personJson, Person.class); System.out.println(pjson.getName()+" "+ pjson.getAge());
應用場景:儲存物件的時候
redis map 中的所有方法都以h開頭 hgetALL hkeys hvals hincrBy hdel
應用場景:購物車
redis list 中只有 lrange這個方法沒有 rrange這個方法不要想多了
insert 也只有 linsert這個方法
jedis.linsert("櫃檯1", BinaryClient.LIST_POSITION.AFTER, "鳩摩智", "慕容復"); jedis.linsert("櫃檯1", BinaryClient.LIST_POSITION.BEFORE,"鳩摩智","令狐沖"); List<String> list1 = jedis.lrange("櫃檯1", 0, -1); for (String name : list1) { System.out.print(name + " "); } System.out.println();
trim也是隻有個 ltrim 它是用來修剪得
String res = jedis.ltrim("櫃檯1", 0, 2); (0,2)是保留下來的資料,其他的都被修剪了。
if ("OK".equals(res)) {
for (String name : jedis.lrange("櫃檯1", 0, -1)) {
System.out.print(name + " ");
}
}
lpush rpush 倒是有的
相對應的 lpop rpop 也是有的
應用場景:網頁爬蟲的時候
redis set 都是以s開頭 map是以h開頭不是m開頭,m開頭的是string的mget mset
sadd方法:
jedis.sadd("biwu:dengji", daxias); //daxias是一個數組,可以直接往set裡面新增陣列
和sadd配對的是smembers方法
Set<String> daxiaSet = jedis.smembers("biwu:dengji");
for (String name : daxiaSet) {
System.out.print(name + " "); //set集合的特點:無序、無重複元素
}
System.out.println();
sismember 判斷是否有存在元素
scard 計算redis的set中有多少個元素
//計算兩個Set之間的交集
Set<String> users = jedis.sinter("biwu:dengji", "guoji:dengji");
for (String name : users) {
System.out.print(name + " ");
}
System.out.println();
//計算兩個Set之間的並集
users = jedis.sunion("biwu:dengji", "guoji:dengji");
for (String name : users) {
System.out.print(name + " ");
}
System.out.println();
System.out.println("井中月出來了");
//計算兩個集合的差集
users = jedis.sdiff("biwu:dengji", "guoji:dengji");
for (String name : users) {
System.out.print(name + " ");
}
System.out.println();
System.out.println();
//將兩個集合計算出來的差集儲存起來,升級為超級Vip
jedis.sdiffstore("vipdaxia","biwu:dengji", "guoji:dengji");
for (String name : jedis.smembers("vipdaxia")) {
System.out.print(name + " ");
}
應用場景:計算轉化率的時候
redis orderset 方法都是以z開頭的
jedis.zadd("比武成績", 10, "喬峰"); jedis.zadd("比武成績", 5, "王重陽"); jedis.zadd("比武成績", 7, "虛竹"); jedis.zadd("比武成績", 2, "王語嫣"); jedis.zadd("比武成績", 5, "段譽"); jedis.zadd("比武成績", 4, "峨眉師太"); jedis.zadd("比武成績", 20, "張三丰"); //獲取sortSet中所有的元素 Set<String> names = jedis.zrange("比武成績", 0, -1); for (String name : names) { System.out.println(name + " 排名: " //列印使用者升序排行 + jedis.zrank("比武成績", name) + " 贏的場次: " //列印使用者的比武成績 + jedis.zscore("比武成績", name)); } System.out.println("=============================="); names = jedis.zrevrange("比武成績", 0, -1); for (String name : names) { System.out.println(name + " " + jedis.zrevrank("比武成績", name) + " " + jedis.zscore("比武成績", name)); } System.out.println("=============================="); //修改使用者的分數 jedis.zincrby("比武成績",100,"王語嫣"); names = jedis.zrevrange("比武成績", 0, -1); for (String name : names) { System.out.println(name + " " + jedis.zrevrank("比武成績", name) + " " + jedis.zscore("比武成績", name)); } }