Redis设计与实现-第1篇.docx

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
? ? Redis设计与实现 ? ? 转载收藏一下这篇文章 Redis缓存设计? 设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效. ? 1) 缓存击穿:对于一些设置了过期时间的key, 刚好过期的时候,这时候有个高并发的请求,会导致直接访问数据库,危险.(批量放入时这么用的)先把缓存更新,再更新数据库。单个的时候先更新数据库,再更新缓存? 2) 缓存穿透:查询一个一定不存在的数据,导致直接访问数据库。 解决方法:如果一个查询返回的数据为空,我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。? 3) 缓存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效。 随机设置过期时间。 Redis五种基本数据结构? String类型? 这种数据结构的应用举例,设置过期时间,发短信的时候,设置验证码的过期时间。key一定是String类型,此时value用的是String类型。? List类型? 应用举例:最近访客可以用这种数据结构。采用双端队列的形式。此类型允许重复? Hash类型? 举例:在一些不确定有多少字段的时候可以使用。? Set集合? 应用举例:点赞功能实现,就是有喜欢的集合与不喜欢的集合。不允许重复? Sorted set集合? 应用举例:排名功能命令举例,分别为String类型,list类型, hash类型,hash过期时间设置, set类型, sorted set类型:? redis设计与实现之SDS?   /p/b51bde79be25?   设置过期时间,发短信的时候验证码的过期时间。还可以实现点赞啥的,高并发。    private void sendLoginMsgCode(AclUser aclUser, String sid) { long start = System.currentTimeMillis(); String code = String.valueOf(Math.round(Math.random() * (899999) + 100000)); String smsMsg = String.format(Constants.MOBILE_CODE_FORMAT, code); LOG.info(smsMsg);     sendMessageService.sendMessage(aclUser.getMobile(), smsMsg); final int smsType = 16021; smsMsg=code; smsPageonService.sendMessage(aclUser.getMobile(), smsMsg,smsType); ssoCacheService.setObject(smsKey(sid), 300, code); userService.saveMessageCode(aclUser.getLoginName(), smsMsg); LOG.info(sendLoginMsgCode {}, System.currentTimeMillis() - start); } redis设计与实现之双端队列?   /p/e57e126c81c7?   代码实践:redis list将缓存进行排序,过期的则清掉 private void saveLoginLogCache(String username){ LoginLogCache loginLogCache = new LoginLogCache(); loginLogCache.setIp((String)TraceContext.get(Constants.CONTEXT_IP_KEY)); loginLogCache.setTime(System.currentTimeMillis()); short type = (short)LoginLogType.USERNAME.getIndex(); if(TraceContext.get(Constants.CONTEXT_LOGIN_TYPE_KEY) != null){ type = ((Integer)TraceContext.get(Constants.CONTEXT_LOGIN_TYPE_KEY)).shortValue(); } loginLogCache.setTyp

文档评论(0)

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

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

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

1亿VIP精品文档

相关文档