package redis.inaction;

 import redis.clients.jedis.Jedis;
import redis.clients.jedis.ZParams; import java.util.*; public class Chapter01 {
private static final int ONE_WEEK_IN_SECONDS = 7 * 86400;
private static final int VOTE_SCORE = 432;
private static final int ARTICLES_PER_PAGE = 25; public static final void main(String[] args) {
new Chapter01().run();
} public void run() {
Jedis conn = new Jedis("192.168.7.146",6379);
conn.select(15);
conn.flushAll();
String articleId = postArticle(
conn, "username", "A title", "http://www.google.com");
System.out.println("We posted a new article with id: " + articleId);
System.out.println("Its HASH looks like:");
Map<String,String> articleData = conn.hgetAll("article:" + articleId);
for (Map.Entry<String,String> entry : articleData.entrySet()){
System.out.println(" " + entry.getKey() + ": " + entry.getValue());
} System.out.println(); articleVote(conn, "other_user", "article:" + articleId);
String votes = conn.hget("article:" + articleId, "votes");
System.out.println("We voted for the article, it now has votes: " + votes);
assert Integer.parseInt(votes) > 1; System.out.println("The currently highest-scoring articles are:");
List<Map<String,String>> articles = getArticles(conn, 1);
printArticles(articles);
assert articles.size() >= 1; addGroups(conn, articleId, new String[]{"new-group"});
System.out.println("We added the article to a new group, other articles include:");
articles = getGroupArticles(conn, "new-group", 1);
printArticles(articles);
assert articles.size() >= 1;
} public String postArticle(Jedis conn, String user, String title, String link) {
String articleId = String.valueOf(conn.incr("article:")); String voted = "voted:" + articleId;
conn.sadd(voted, user);
conn.expire(voted, ONE_WEEK_IN_SECONDS); long now = System.currentTimeMillis() / 1000;
String article = "article:" + articleId;
HashMap<String,String> articleData = new HashMap<String,String>();
articleData.put("title", title);
articleData.put("link", link);
articleData.put("user", user);
articleData.put("now", String.valueOf(now));
articleData.put("votes", "1");
conn.hmset(article, articleData);
conn.zadd("score:", now + VOTE_SCORE, article);
conn.zadd("time:", now, article); return articleId;
} public void articleVote(Jedis conn, String user, String article) {
long cutoff = (System.currentTimeMillis() / 1000) - ONE_WEEK_IN_SECONDS;
if (conn.zscore("time:", article) < cutoff){
return;
} String articleId = article.substring(article.indexOf(':') + 1);
if (conn.sadd("voted:" + articleId, user) == 1) {
conn.zincrby("score:", VOTE_SCORE, article);
conn.hincrBy(article, "votes", 1);
}
} public List<Map<String,String>> getArticles(Jedis conn, int page) {
return getArticles(conn, page, "score:");
} public List<Map<String,String>> getArticles(Jedis conn, int page, String order) {
int start = (page - 1) * ARTICLES_PER_PAGE;
int end = start + ARTICLES_PER_PAGE - 1; Set<String> ids = conn.zrevrange(order, start, end);
List<Map<String,String>> articles = new ArrayList<Map<String,String>>();
for (String id : ids){
Map<String,String> articleData = conn.hgetAll(id);
articleData.put("id", id);
articles.add(articleData);
} return articles;
} public void addGroups(Jedis conn, String articleId, String[] toAdd) {
String article = "article:" + articleId;
for (String group : toAdd) {
conn.sadd("group:" + group, article);
}
} public List<Map<String,String>> getGroupArticles(Jedis conn, String group, int page) {
return getGroupArticles(conn, group, page, "score:");
} public List<Map<String,String>> getGroupArticles(Jedis conn, String group, int page, String order) {
String key = order + group;
if (!conn.exists(key)) {
ZParams params = new ZParams().aggregate(ZParams.Aggregate.MAX);
conn.zinterstore(key, params, "group:" + group, order);
conn.expire(key, 60);
}
return getArticles(conn, page, key);
} private void printArticles(List<Map<String,String>> articles){
for (Map<String,String> article : articles){
System.out.println(" id: " + article.get("id"));
for (Map.Entry<String,String> entry : article.entrySet()){
if (entry.getKey().equals("id")){
continue;
}
System.out.println(" " + entry.getKey() + ": " + entry.getValue());
}
}
}
}

package redis.inaction;
import redis.clients.jedis.Jedis;import redis.clients.jedis.ZParams;
import java.util.*;
public class Chapter01 {    private static final int ONE_WEEK_IN_SECONDS = 7 * 86400;    private static final int VOTE_SCORE = 432;    private static final int ARTICLES_PER_PAGE = 25;
    public static final void main(String[] args) {        new Chapter01().run();    }
    public void run() {        Jedis conn = new Jedis("192.168.7.146",6379);        conn.select(15);        conn.flushAll();        String articleId = postArticle(            conn, "username", "A title", "http://www.google.com");        System.out.println("We posted a new article with id: " + articleId);        System.out.println("Its HASH looks like:");        Map<String,String> articleData = conn.hgetAll("article:" + articleId);        for (Map.Entry<String,String> entry : articleData.entrySet()){            System.out.println("  " + entry.getKey() + ": " + entry.getValue());        }
        System.out.println();
        articleVote(conn, "other_user", "article:" + articleId);        String votes = conn.hget("article:" + articleId, "votes");        System.out.println("We voted for the article, it now has votes: " + votes);        assert Integer.parseInt(votes) > 1;
        System.out.println("The currently highest-scoring articles are:");        List<Map<String,String>> articles = getArticles(conn, 1);        printArticles(articles);        assert articles.size() >= 1;
        addGroups(conn, articleId, new String[]{"new-group"});        System.out.println("We added the article to a new group, other articles include:");        articles = getGroupArticles(conn, "new-group", 1);        printArticles(articles);        assert articles.size() >= 1;    }
    public String postArticle(Jedis conn, String user, String title, String link) {        String articleId = String.valueOf(conn.incr("article:"));
        String voted = "voted:" + articleId;        conn.sadd(voted, user);        conn.expire(voted, ONE_WEEK_IN_SECONDS);
        long now = System.currentTimeMillis() / 1000;        String article = "article:" + articleId;        HashMap<String,String> articleData = new HashMap<String,String>();        articleData.put("title", title);        articleData.put("link", link);        articleData.put("user", user);        articleData.put("now", String.valueOf(now));        articleData.put("votes", "1");        conn.hmset(article, articleData);        conn.zadd("score:", now + VOTE_SCORE, article);        conn.zadd("time:", now, article);
        return articleId;    }
    public void articleVote(Jedis conn, String user, String article) {        long cutoff = (System.currentTimeMillis() / 1000) - ONE_WEEK_IN_SECONDS;        if (conn.zscore("time:", article) < cutoff){            return;        }
        String articleId = article.substring(article.indexOf(':') + 1);        if (conn.sadd("voted:" + articleId, user) == 1) {            conn.zincrby("score:", VOTE_SCORE, article);            conn.hincrBy(article, "votes", 1);        }    }

public List<Map<String,String>> getArticles(Jedis conn, int page) {        return getArticles(conn, page, "score:");    }
    public List<Map<String,String>> getArticles(Jedis conn, int page, String order) {         int start = (page - 1) * ARTICLES_PER_PAGE;        int end = start + ARTICLES_PER_PAGE - 1;
        Set<String> ids = conn.zrevrange(order, start, end);        List<Map<String,String>> articles = new ArrayList<Map<String,String>>();        for (String id : ids){            Map<String,String> articleData = conn.hgetAll(id);            articleData.put("id", id);            articles.add(articleData);        }
        return articles;    }
    public void addGroups(Jedis conn, String articleId, String[] toAdd) {        String article = "article:" + articleId;        for (String group : toAdd) {            conn.sadd("group:" + group, article);        }    }
    public List<Map<String,String>> getGroupArticles(Jedis conn, String group, int page) {        return getGroupArticles(conn, group, page, "score:");    }
    public List<Map<String,String>> getGroupArticles(Jedis conn, String group, int page, String order) {        String key = order + group;        if (!conn.exists(key)) {            ZParams params = new ZParams().aggregate(ZParams.Aggregate.MAX);            conn.zinterstore(key, params, "group:" + group, order);            conn.expire(key, 60);        }        return getArticles(conn, page, key);    }
    private void printArticles(List<Map<String,String>> articles){        for (Map<String,String> article : articles){            System.out.println("  id: " + article.get("id"));            for (Map.Entry<String,String> entry : article.entrySet()){                if (entry.getKey().equals("id")){                    continue;                }                System.out.println("    " + entry.getKey() + ": " + entry.getValue());            }        }    }}

最新文章

  1. ListFragment的使用
  2. IOS 开发下拉刷新和上拉加载更多
  3. ubuntu(Mint-17)修改dns
  4. silverlinght 项目
  5. fetchField 和 fetchColumn
  6. hdfs工作原理
  7. java 集合(二)
  8. python验证码识别
  9. 安装Python和pip
  10. 走向DBA[MSSQL篇] 从SQL语句的角度 提高数据库的访问性能
  11. 修改表单元素中placeholder属性样式、清除IE浏览器中input元素的清除图标和眼睛图标
  12. 聊聊并发(一)深入分析Volatile的实现原理
  13. 详解mybatis配置文件
  14. 安卓基础之通过Intent跳转Activity
  15. 潭州课堂25班:Ph201805201 tornado 项目 第三课 项目 图片上传,展示 (课堂笔记)
  16. SQL Server聚合函数与聚合开窗函数 (转载)
  17. GYM 101173 K.Key Knocking(构造)
  18. 3611: [Heoi2014]大project|树形DP|虚树
  19. 移动app传统测试流程优化
  20. maven surefire plugin介绍

热门文章

  1. echarts属性的设置
  2. Java一些小例子
  3. 线程安全的Singleton要点
  4. 内存不足导致mysql关闭,CentOS6.5增加swap分区
  5. 服务器挂载 ntfs32 硬盘
  6. 架构师成长之路5.7-Saltstack数据系统
  7. Python数据驱动DDT的应用
  8. ELK监控交换机日志
  9. DNS信息探测
  10. keras多gpu训练