Redis设计实战笔记.docx

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
? ? 第三章 Redis设计实战笔记 ? ? 一、基于Redis设计的投票网站实战 1、应用场景实战 文章投票功能模块需求 用户可以发表文章,发表时默认给自己的文章投了一票 用户在查看网站时可以按评分进行排列查看 用户也可以按照文章发布时间进行排序 为节约内存,一篇文章发表后,7天内可以投票,7天过后就不能再投票了 为防止同一用户多次投票,用户只能给一篇文章投一次票 2、关系数据库设计 文章基本信息表 t_article article_id??title??content post_time user_id 文章票数与分值表 t_vote_data article_id??votes??scores 文章投票详表 t_vote_details article_id??vote_time??user_id 3、应用场景Redis实现 投票网站应用场景会使用到的Redis相关指令如下: HASH类型命令: hset ?hincrBy ?hgetAll ??expire SET集合命令: sadd ?smembers ZSET集合命令: zadd ??zscore ?zincrby ?zrevrange 4、redis的Key设计思路 Key-Value键值对:比如set key value key的设计:一般以业务、功能模块或表名开头,后跟主键(或能表示数据唯一性的值) 例子:用户模块,其中用户ID 001,用户名称hankin,那么Key如何设计? set user:001:name hankin key为 user:001:name 5、记录已投票用户,防重投 已对002文章投票过的用户,使用SET存储(无序,不能重复) ? 6、记录文章分值 使用ZSET记录文章投票分数,和按文章发布的时间戳(有序列,不能重复) ? 7、Redis缓存设计实战 ? 8、缓存数据变化 1)004号用户对文章article:002投了1张票,文章的评分增加了400 ? 2)004号用户对article:002文章投票后,会被追加到已投票用户名单里 ? 9、代码环节 代码参考:redis-vote模块,git地址:/hankin_chj/redis-platform.git 业务接口方法: /** ?* 业务接口方法 ?*/ public interface RedisArticleService { ?????public String postArticle(String title, String content, String link, String userId); ?????public MapString, String hgetAll(String key); ?????public void articleVote(String userId, String articleId); ?????public String hget(String key, String votes); ?????public ListMapString,String getArticles(int page, String order); } 文章发布代码: /** * 文章发布使用redis技术 */ @Service public class RedisArticleServiceImpl implements RedisArticleService { ???@Resource ???private JedisUtils jedis; ???/** ???* 文章提交发布 ???* @param title 标题 ?内容 ?链接 ?用户ID ???* @return 文章的ID ???*/ ???@Override ???public String postArticle(String title, String content, String link, String userId) { ??????//article:001 ????????String articleId = String.valueOf(jedis.incr(article:)); // articleId=1 ????????//投票键: voted: ????????String voted = voted: + articleId; ????????jedis.sadd(voted, userId); ????????jedis.expire(voted, Constants.ONE_WEEK_IN_SECONDS); ????????long now = System.currentTimeMillis() / 1000; ????????Stri

文档评论(0)

科技之佳文库 + 关注
官方认证
内容提供者

科技赋能未来,创新改变生活!

版权声明书
用户编号:8131073104000017
认证主体重庆有云时代科技有限公司
IP属地重庆
统一社会信用代码/组织机构代码
9150010832176858X3

1亿VIP精品文档

相关文档