码迷,mamicode.com
首页 > 其他好文 > 详细

redis-缓存设计-文章管理

时间:2020-07-09 15:28:27      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:通过   tostring   hashmap   public   json   loading   安全   post   content   

需求

文章根据创建时间排序,用户可以给文章分,影响排序,用户指定时间只能打一次分,不能重复打。文章支持分组

key定义

   /**
     * content表的id生成器
     *
     */
    public final static String CONTENT_ID_GENERATOR="cs:id:generator:content";
    /**
     * 数据key %s为数据id
     * hash
     */
    public final static String CONTENT_KEY = "cs:content:%s";
    /**
     * 维护各个group的数据 %s为groupId
     * zset
     */
    public final static String GROUP_KEY = "cs:content:group:%s";
    /**
     * 记录文章打分 后的排序文章排序
     * zset
     */
    public final static String CONTENT_SCORE_KEY = "cs:content:routing:score";

    /**
     * 记录指定文章的用户打分记录 %s为文章id
     * zset
     */
    public final static String CONTENT_VOTE_KEY = "cs:content:routing:score:%s";


    /**
     * 记录所有文章的排序 创建时间排序
     * zset
     */
    public final static String CONTENT_SORT_KEY = "cs:content:routing:sort";

    /**
     * 7天的秒数 86400位1天的秒数
     */
    public final static long ONE_WEEK_IN_SECONDS = 7 * 86400;

发布文章

代码

   /**
     * 发布指定文章
     * @param conn
     * @param title
     * @param content
     * @param link
     */
    public static void postArticle(Jedis conn,String title,String content,String link){
        Long contentId=conn.incr(CONTENT_ID_GENERATOR);
        //数据 hash key
        String key = String.format(CONTENT_KEY, contentId);
        Long now=System.currentTimeMillis();
        HashMap<String,String> data=new HashMap<>();
        data.put("id",contentId.toString());
        data.put("title",title);
        data.put("content",content);
        data.put("link",link);
        data.put("votes","0");
        //保存 数据
        conn.hmset(key,data);
        //设置创建时间排序
        conn.zadd(CONTENT_SORT_KEY,now,contentId.toString());
        //设置打分排序
        conn.zadd(CONTENT_SCORE_KEY,now+1,contentId.toString());

    }

此处利用hash存储文章信息,并通过2个zset维护创建时间排序和打分排序 id使用redis.incr是原子性的 线程安全的

数据json

技术图片
[{
    "id": 1,
    "title": "我爱成都大熊猫",
    "content": "哈哈哈哈",
    "link": "wwww.baidu.com"
},
{
    "id": 2,
    "title": "我爱广州小蛮腰",
    "content": "哈哈哈哈",
    "link": "wwww.baidu.com"
}
]
View Code

 

数据图解

技术图片

给文章分组

代码

    /**
     * 将 指定文章分配到指定分组
     * @param conn
     * @param contentId
     * @param group
     */
    public static void addGroup(Jedis conn,Long contentId,String group){
        conn.sadd(String.format(GROUP_KEY, group),contentId.toString());
    }

通过set来保存组信息

图解

如将添加文章的数据 分别新增2个广州文章专区和 成都文章专区

技术图片

 

redis-缓存设计-文章管理

标签:通过   tostring   hashmap   public   json   loading   安全   post   content   

原文地址:https://www.cnblogs.com/LQBlog/p/13273511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!