1. 程式人生 > >Redis 學習筆記(3)—— Redis List 型別

Redis 學習筆記(3)—— Redis List 型別

1 Redis List 型別

1.1 案例1

package mylist;

import redis.clients.jedis.BinaryClient;
import redis.clients.jedis.Jedis;

import java.util.List;

public class ListMain {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.del("光明頂");

        jedis.
lpush("光明頂", "喬峰", "段譽", "虛竹", "鳩摩智"); for (String name : jedis.lrange("光明頂", 0, -1)) { System.out.print(name + " "); } System.out.println("==============================="); //新來一個人,王語嫣,插隊到第一位 jedis.rpush("光明頂", "王語嫣"); List<String> list =
jedis.lrange("光明頂", 0, -1); for (String name : list) { System.out.print(name + " "); } System.out.println("==============================="); //劇情:鳩摩智很不高興,正好慕容復來了,說:慕容兄,你插我前面 jedis.linsert("光明頂", BinaryClient.LIST_POSITION.AFTER, "鳩摩智", "慕容復"); List<
String>
list1 = jedis.lrange("光明頂", 0, -1); for (String name : list1) { System.out.print(name + " "); } System.out.println("==============================="); //劇情:看到慕容復插隊大家很生氣,正好阿紫和遊坦之。讓阿紫和遊坦之依次插到虛竹的後面 jedis.linsert("光明頂", BinaryClient.LIST_POSITION.BEFORE, "虛竹", "阿紫"); jedis.linsert("光明頂", BinaryClient.LIST_POSITION.BEFORE, "阿紫", "遊坦之"); List<String> list2 =jedis.lrange("光明頂",0,-1); for(String name:list2){ System.out.print(name+" "); } System.out.println("==============================="); //劇情:插隊不文明,為了遏制這種不文明的現象,大決決定打一架。 鳩摩智被打跑了。 jedis.lpop("光明頂"); for(String name:jedis.lrange("光明頂",0,-1)){ System.out.print(name+" "); } System.out.println("==============================="); //劇情:慕容復一看情況不好,以表哥的身份忽悠王語嫣,把王語嫣打傷。 jedis.rpop("光明頂"); for(String name:jedis.lrange("光明頂",0,-1)){ System.out.print(name+" "); } System.out.println("==============================="); //劇情:在大家打架的時候,無名氏偷偷插隊 jedis.rpush("光明頂", "無名氏"); for (String name : jedis.lrange("櫃檯1", 0, -1)) { System.out.print(name + " "); } System.out.println("==============================="); //慕容覆被打跑了 jedis.lpop("光明頂"); for (String name : jedis.lrange("光明頂", 0, -1)) { System.out.print(name + " "); } System.out.println("==============================="); //劇情:星宿老怪 突然來了,把 阿紫和遊坦之同時弄走了。 String result = jedis.ltrim("光明頂", 2, 5); if ("OK".equals(result)) { for (String name : jedis.lrange("光明頂", 0, -1)) { System.out.print(name + " "); } } System.out.println("==============================="); //劇情:這時候,喬峰三人發現了無名氏,與之大戰三百回合,無名氏全身而退 String res = jedis.ltrim("光明頂", 0, 2); if ("OK".equals(res)) { for (String name : jedis.lrange("光明頂", 0, -1)) { System.out.print(name + " "); } } } }
D:\programs\Java\jdk1.8.0_181\bin\java.exe "-javaagent:D:\programs\JetBrains\IntelliJ IDEA 2018.2.4\lib\idea_rt.jar=50417:D:\programs\JetBrains\IntelliJ IDEA 2018.2.4\bin" -Dfile.encoding=UTF-8 -classpath D:\programs\Java\jdk1.8.0_181\jre\lib\charsets.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\deploy.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\javaws.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\jce.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\jfr.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\jsse.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\management-agent.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\plugin.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\resources.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\rt.jar;D:\Data\JavaProject\myredis\target\classes;C:\Users\tzb\.m2\repository\redis\clients\jedis\2.8.2\jedis-2.8.2.jar;C:\Users\tzb\.m2\repository\org\apache\commons\commons-pool2\2.4.2\commons-pool2-2.4.2.jar;C:\Users\tzb\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\tzb\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\tzb\.m2\repository\com\google\code\gson\gson\2.3.1\gson-2.3.1.jar mylist.ListMain
鳩摩智 虛竹 段譽 喬峰 ===============================
鳩摩智 虛竹 段譽 喬峰 王語嫣 ===============================
鳩摩智 慕容復 虛竹 段譽 喬峰 王語嫣 ===============================
鳩摩智 慕容復 遊坦之 阿紫 虛竹 段譽 喬峰 王語嫣 ===============================
慕容復 遊坦之 阿紫 虛竹 段譽 喬峰 王語嫣 ===============================
慕容復 遊坦之 阿紫 虛竹 段譽 喬峰 ===============================
===============================
遊坦之  阿紫  虛竹  段譽  喬峰  無名氏  ===============================
虛竹  段譽  喬峰  無名氏  ===============================
虛竹  段譽  喬峰  
Process finished with exit code 0

1.2 案例2

1.2.1 爬蟲測試

package mylist;


import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.io.IOException;

/*
 * 訪問單個新聞業
 * */
public class SingleArticle {
    public static void main(String[] args) throws IOException {
        String url = "http://www.huxiu.com/article/102062/1.html";
        Document document = Jsoup.connect(url).get();

        //解析頁面
        Elements titleElements = document.getElementsByTag("title");
        String title=titleElements.get(0).text();

        Elements elements=document.select("div #article_content");
        String content = elements.text();

        System.out.println("title: "+title);
        System.out.println("content: "+content);

    }
}

1.2.2 爬取的內容放到 redis

package mylist;

import org.jsoup.Jsoup;
import org.jsoup.helper.StringUtil;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import redis.clients.jedis.Jedis;

import java.util.Date;


public class Crawler {
    //定義需要爬取的url list
    private static final String redisUrlsWillKey = "crawler:urls:will";
    //如果需要去重的話,可以使用set儲存已經爬起過的url

    public static void main(String[] args) throws Exception {
        //準備Url
        String startUrl = "https://www.huxiu.com/channel/22.html";
        String domain = "http://www.huxiu.com/";
        //獲取文章Url
        getUrls(startUrl, domain);
        //處理url,下載文章的內容並列印
        parserUrl();
    }

    private static void parserUrl() throws Exception {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //從右邊彈出一個url
        while (true) {
            String url = jedis.rpop(redisUrlsWillKey);
            try {
                Article article = parser(url);
                System.out.println(article);
            } catch (Exception e) {
//                jedis.lpush(redisUrlsWillKey, url);
            }
        }
    }

    private static Article parser(String url) throws Exception {
        Document articleDocument = Jsoup.connect(url).get();
        Article article = new Article();
        // 封裝作者的資訊
        Elements author = articleDocument
                .getElementsByClass("author-name");
        article.setAuthor(StringUtil.isBlank(author.text()) ? "jingzhongyue"
                : author.text());
        // 抽取文章日期
        Elements date = articleDocument
                .getElementsByClass("article-time");
        article.setDate(StringUtil.isBlank(date.text()) ? new Date()
                : DateUtil.getDate(date.text()));
        // 抽取文章標題
        Elements title = articleDocument.getElementsByTag("title");
        article.setTitle(title.text());
        // 抽取文章編號
        // http://www.huxiu.com/article/124698/1.html
        String id = url.substring(29);
        int index = id.indexOf("/");
        id = id.substring(0, index);
        article.setId(id);
        // 抽取文章正文
        StringBuffer stringBuffer = new StringBuffer();
        Elements contents = articleDocument
                .getElementsByAttribute("id");
        for (Element element : contents) {
            String idTag = element.attr("id");
            if ("article_content".equals(idTag)) {
                Elements childs = element.children();
                Elements pElements = childs.tagName("p");
                for (Element element2 : pElements) {
                    stringBuffer.append(element2.text());
                }
            }
        }
        return article;
    }

    private static void getUrls(String startUrl, String domain) throws Exception {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        Document document = Jsoup.connect(startUrl).get();
        Elements elements = document.getElementsByAttribute("href");
        for (Element element : elements) {
            String endUrl = element.attr("href");
            if (endUrl.contains("article")) {
                String url = domain + endUrl;
                System.out.println(url);
                jedis.lpush(redisUrlsWillKey, url);
            }
        }
    }

}

package mylist;

import java.util.Date;

import org.jsoup.helper.StringUtil;

public class Article {
	private String id;
	private String title;
	private String content;
	private String author;
	private Date date;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	@Override
	public String toString() {
		return "Article [id=" + id + ", title=" + title + ", content="
				+ content + ", author=" + author + ", date=" + date + "]";
	}
	
	public boolean isNotNull() {
		if (StringUtil.isBlank(content)) {
			return false;
		}
		return true;
	}

}

package mylist;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {
	
	private static SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	
	public static Date getDate(String dString) throws Exception{
		return simpleDateFormat.parse(dString);
	}
	
	public static String getString(Date date) {
		return simpleDateFormat.format(date);
	}

}

D:\programs\Java\jdk1.8.0_181\bin\java.exe "-javaagent:D:\programs\JetBrains\IntelliJ IDEA 2018.2.4\lib\idea_rt.jar=60901:D:\programs\JetBrains\IntelliJ IDEA 2018.2.4\bin" -Dfile.encoding=UTF-8 -classpath D:\programs\Java\jdk1.8.0_181\jre\lib\charsets.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\deploy.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\javaws.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\jce.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\jfr.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\jsse.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\management-agent.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\plugin.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\resources.jar;D:\programs\Java\jdk1.8.0_181\jre\lib\rt.jar;D:\Data\JavaProject\myredis\target\classes;C:\Users\tzb\.m2\repository\redis\clients\jedis\2.8.2\jedis-2.8.2.jar;C:\Users\tzb\.m2\repository\org\apache\commons\commons-pool2\2.4.2\commons-pool2-2.4.2.jar;C:\Users\tzb\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\tzb\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\tzb\.m2\repository\com\google\code\gson\gson\2.3.1\gson-2.3.1.jar;C:\Users\tzb\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar mylist.Crawler
http://www.huxiu.com//article/265397.html
http://www.huxiu.com//article/265362.html
http://www.huxiu.com//article/265365.html
http://www.huxiu.com//article/265356.html
http://www.huxiu.com//article/265328.html
http://www.huxiu.com//article/265321.html
http://www.huxiu.com//article/265318.html
http://www.huxiu.com//article/265160.html
http://www.huxiu.com//article/265278.html
http://www.huxiu.com//article/265228.html
http://www.huxiu.com//article/265224.html
http://www.huxiu.com//article/265176.html
http://www.huxiu.com//article/265198.html
http://www.huxiu.com//article/265074.html
http://www.huxiu.com//article/264936.html
http://www.huxiu.com//article/264972.html
http://www.huxiu.com//article/264935.html
http://www.huxiu.com//article/264951.html
http://www.huxiu.com//article/264945.html
http://www.huxiu.com//article/264917.html
Article [id=, title=月活堪比QQ,版權碾壓同行……年度最強文娛公司要上市了-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:41 CST 2018]
Article [id=, title=一下科技的十字路口-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:41 CST 2018]
Article [id=, title=《李茶的姑媽》遇冷,高速狂奔的開心麻花該“換擋”了?-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:42 CST 2018]
Article [id=, title=我們與那些沒能出現在《影》中的人聊了聊-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:42 CST 2018]
Article [id=, title=抓娃娃,心理“陷阱”下的消費魔爪-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:43 CST 2018]
Article [id=, title=搏擊 VS 拳擊:嘴炮喧囂背後的商業化“迷途”-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:43 CST 2018]
Article [id=, title=張藝謀的雜念與執念-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:44 CST 2018]
Article [id=, title=橫店靜悄悄-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:44 CST 2018]
Article [id=, title=清白做人,認真演戲,這才配叫“角兒”-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:45 CST 2018]
Article [id=, title=蘋果:“More Than iPhones”之“影視內容”觀察-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:45 CST 2018]
Article [id=, title=中國盜版DVD二十年:一段隱祕的地下史-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:46 CST 2018]
Article [id=, title=媒體人國慶節片單出爐:這7部電影映照傳媒世界的魔幻現實-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:46 CST 2018]
Article [id=, title=抖音 VS 快手:從產品理念來看短視訊的功能設計-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:47 CST 2018]
Article [id=, title=“桃色緋聞”未平又陷商業糾紛 《軍師聯盟》給吳秀波帶來太多“驚喜”與“驚嚇”-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:47 CST 2018]
Article [id=, title=歌手臧天朔的人生往事:搖滾老炮、江湖大哥、身陷囹圄-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:48 CST 2018]
Article [id=, title=怎樣理解B站的社群生態與內容策略-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:48 CST 2018]
Article [id=, title=中國不配有好遊戲?-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:49 CST 2018]
Article [id=, title=B站離不開遊戲-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:50 CST 2018]
Article [id=, title=湖南衛視,“妖孽”二十年-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:50 CST 2018]
Article [id=, title=大資料分析全球電影市場型別,原來中國觀眾最愛的不是愛情喜劇-虎嗅網, content=null, author=jingzhongyue, date=Wed Oct 03 10:24:51 CST 2018]