Redis 學習筆記(3)—— Redis List 型別
阿新 • • 發佈:2018-12-13
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]