- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- Python网络程序设计教学要点与案例分享.docx
- python网络通信器设计.docx
- Python计算生态概览.docx
- Python设计模式面向对象编程.docx
- Python语言程序设计-学习笔记和练习.docx
- Python语言程序设计-学习笔记和课后练习.docx
- Python语言程序设计-文件和数据格式化.docx
- Python语言程序设计基础.docx
- Python课程设计爬虫篇.docx
- QT学习1:设计可视化窗口的框架-Ui-Class.docx
- 中国行业标准 GM/T 0126-2023HTML密码应用置标语法.pdf
- 《JJF 2121-2024恒转速源校准规范》.pdf
- 餐饮服务中20条处理要点.docx
- 《GM/T 0011-2023可信计算 可信密码支撑平台功能与接口规范》.pdf
- 《JJF 2134-2024旋转流变仪校准规范》.pdf
- JJF 2121-2024恒转速源校准规范.pdf
- 计量规程规范 JJF 2121-2024恒转速源校准规范.pdf
- 《JJF 2118-2024压力式六氟化硫气体密度控制器校验仪校准规范》.pdf
- JJF 2134-2024旋转流变仪校准规范.pdf
- 计量规程规范 JJF 2134-2024旋转流变仪校准规范.pdf
文档评论(0)