大数据之路Week10_day05 (JavaAPI 操作Redis 第一阶段)
剛開始學習JavaAPI的時候,主要是對redis中的字符串,字節位圖,列表,集合,有序集合進行操作,并能夠完成簡單的需求。
package com.wyh.redis; import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set; public class RedisApi {
public static void main(String[] args) {
Jedis master = new Jedis("master", 6379);
master.set("001","123");
String s = master.get("001");
System.out.println(s);
master.close(); } Jedis master;
JedisPool masterPool; @Before
public void init(){
master = new Jedis("master", 6379); JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(100);
jedisPoolConfig.setMaxIdle(10); masterPool = new JedisPool(jedisPoolConfig, "master", 6379); } /**
* 字符串練習
*/
@Test
public void String(){
Jedis resource = masterPool.getResource();
resource.set("002","xiaohu");
String s = resource.get("002");
System.out.println(s);
resource.close();
} /**
* bitmap練習
*/
@Test
public void bitmap(){
Jedis resource = masterPool.getResource();
resource.setbit("b1",1,true);
resource.setbit("b1",3,true);
resource.setbit("b1",5,true); //獲取當前位是1還是0 1返回true,0則返回false
Boolean b1 = resource.getbit("b1", 3);
System.out.println(b1); //獲取該鍵值中有多少個1
Long b11 = resource.bitcount("b1");
System.out.println(b11);
resource.close();
} /**
*list練習
*
*/
@Test
public void list(){
Jedis resource = masterPool.getResource();
resource.lpush("shujia06","王友虎","趙以浩","江蒗","尹可洋");
String shujia006 = resource.lpop("shujia06");
System.out.println(shujia006); //一次獲取該鍵的所有值
List<String> shujia0061 = resource.lrange("shujia06", 0, -1);
System.out.println(shujia0061);
resource.close();
} /**
*
* HashMap的練習 將學生表添加到redis
*/
@Test
public void hashMap(){ try {
BufferedReader br = new BufferedReader(new FileReader("D:\\shujia\\shujia006\\hadoop\\src\\data\\students.txt"));
String line;
while ((line=br.readLine())!=null){
String[] split = line.split(",");
String id = split[0]; String key = "student"+":"+id; String name = split[1];
String age = split[2];
String gender = split[3];
String clazz = split[4]; HashMap<String, String> map = new HashMap<>();
map.put("name",name);
map.put("age",age);
map.put("gender",gender);
map.put("clazz",clazz); master.hmset(key,map);
} Set<String> keys = master.keys("student*");
System.out.println(keys);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } /**
* 獲取所有學生信息
*/
@Test
public void hGetAll(){ Set<String> keys = master.keys("student*"); for (String key : keys) {
Map<String, String> stringStringMap = master.hgetAll(key);
for (Map.Entry<String, String> stringStringEntry : stringStringMap.entrySet()) {
String value = stringStringEntry.getValue();
System.out.print(value);
System.out.print("\t");
}
System.out.println();
}
} /**
* 共同好友(交集)
*
*/
@Test
public void sinter(){
master.sadd("weibo:王友虎","趙以浩");
master.sadd("weibo:王友虎","李宏燦");
master.sadd("weibo:王友虎","齊博源");
master.sadd("weibo:王友虎","李先鋒"); master.sadd("weibo:趙以浩","李先鋒");
master.sadd("weibo:趙以浩","王友虎");
master.sadd("weibo:趙以浩","齊博源");
master.sadd("weibo:趙以浩","黃天祥"); Set<String> sinter = master.sinter("weibo:王友虎", "weibo:趙以浩");
System.out.println("他們的共同好友為:");
System.out.println(sinter); } /**
* 有序集合
*/
@Test
public void numSet(){
master.zadd("shujia",1.0,"趙以浩");
master.zadd("shujia",1.0,"李宏燦");
master.zadd("shujia",1.0,"齊博源");
master.zadd("shujia",1.0,"李先鋒"); master.zadd("shujia",2.0,"李先鋒");
master.zadd("shujia",2.0,"王友虎");
master.zadd("shujia",2.0,"齊博源");
master.zadd("shujia",2.0,"黃天祥"); // HashMap<String, Integer> map = new HashMap<>();
//
Set<String> s1 = master.zrangeByScore("shujia", 1.0, 1.0);
// for (String s : s1) {
// map.put(s,1);
// }
//
Set<String> s2 = master.zrangeByScore("shujia", 2.0, 2.0);
// for (String s : s2) {
// map.put(s,1);
// }
//
// System.out.println("他們所有的好友為:");
// for (Map.Entry<String, Integer> stringIntegerEntry : map.entrySet()) {
// String key = stringIntegerEntry.getKey();
// System.out.println(key);
// } System.out.println(s1);
System.out.println(s2); } @After
public void close(){
masterPool.close();
master.close(); }
}
在其中,有一個新的知識點,就是 JedisPool ,可以先創建好jedis連接對象,在需要的時候,從里面拿,也可以設置個數。
但是注意:
1、我在代碼中設置的是100個最大,我在將學生信息往redis中添加的時候,卡住不動了,我以為是代碼出錯,結果檢查redis客戶端軟件發現,只插入了100條數據,剩下的900條數據都沒有添加,這是為什么,因為我的“池子”中最大是100個,將其換成普通的獲取連接就可以了,但是后面在寫代碼的過程中發現,我在循環添加的時候,并未添加一條就將這個連接關閉,邏輯上而是等全部添加完畢才將其關閉,啊。。原來原因在這,問題解決。
2、一開始我想使用有序集合去將兩個人的共同好友獲取出來,后面發現,我在添加的時候,就算score是可以重復的,value值都是不可以重復的,盡管score不一樣,在一個表中,它就是不可以重復的,后來經過查資料,我改用set集合,無序的,兩個不同的表,進行sinter的方法取交集,獲取到了共同好友。
3、這里我遺留了一個問題,發現了一個我覺得很重要,通過百度也發現它很重要的東西,就是scan,hscan等,在上面的一個問題中我通過觀察方法發現的,目前沒有仔細了解,后面會補充。
總結
以上是生活随笔為你收集整理的大数据之路Week10_day05 (JavaAPI 操作Redis 第一阶段)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: mongodb简单的函数
- 下一篇: 指标的可加性
