北京免费建站,公益广告,牡丹江建设行业协会网站,营销型网站策划 建设的考试题没听过换乐网#xff1f;没错#xff0c;它在我的电脑里
用法用途
在项目中#xff0c;redis主要用作缓存。而在作为缓存#xff0c;意义最大的是缓存计算结果#xff0c;因为有些计算是一个很耗时间和资源的过程#xff0c;而计算的结果不会经常改变#xff0c;这时使…没听过换乐网没错它在我的电脑里
用法用途
在项目中redis主要用作缓存。而在作为缓存意义最大的是缓存计算结果因为有些计算是一个很耗时间和资源的过程而计算的结果不会经常改变这时使用redis将结果缓存起来就非常有用。
缓存计算结果
在项目中有个需求显示一个类目下的所有商品分类可以是最终类目也可以不是。比如显示“生活用品”类目下的商品需要显示出“洗漱用品”“餐具”“雨伞”等等所有子类目下的商品。
这个操作近似于遍历树有一个递归查询的过程找到“洗漱用品”等直接子类如果这些子类不是最终类目继续向下查询。
这个计算过程很耗资源而且经常需要用到其计算结果所以放在redis里面缓存起来
Created with Raphaël 2.1.0开始redis有缓存返回结果结束计算结果yesno对于缓存的更新想到三种方案 1每次修改数据库的相关数据时顺便更新redis里面的数据。 2设置缓存的过期时间这样在某些情况下可以达到自动更新缓存的效果但不是什么情况下都可用一般如果缓存只用作显示的话这样做也无妨。 3或者设置一个更改标记每次修改了相关数据就把更改这个标记。这个标记的管理参看下部分“key管理”
缓存对象
缓存对象一般缓存 1使用频率很高的对象比如当前用户几乎每个页面都要使用到。 2临时对象。比如验证码。
项目中有个需求用户可以使用短信验证码登录验证码60s内只能发一次一天内同一个用户最多发送20条验证码5分钟内输入有效。
这里要达到限制每个用户发送条数的效果就必须记录用户发送的次数和ip地址这种数据用一个表或文档来存显得太笨重了而放在redis中则十分方便。
在项目中保存对象一般使用json应为对象是单一的而且保存为字符串的话可以设置过期时间。
作为计数器
作为计数器则redis是用得很多的一个方面。比如说上面的发短信验证码的需求可以用一个计数器来限制用户60S内只能发一条短信验证码用另外一个计数器来限制用户验证码2分钟内有效。
key管理
根据某一条原则key应该集中管理。
集中管理的好处就是使用方便结果一致当需要某个key时直接找管理者拿就好了不管调用多少次得到的key的值都是一样的。总之key统一管理是一个不错的选择。
在项目中对于用户保存在redis中的数据都定义一个key helper类来管理
商品类目的redis缓存结果key管理者
public class RedisGoodsClassEntity {private static final String subscritionPrefixSUBGOODSCLASS_; /** 获得存储该类下的所有final子类的json对象的redis key* param classNo 类目编号* return redis key*/public static String getSubClassListKey(int classNo){return subscritionPrefixclassNo;}}用户的redis缓存结果key管理者
package com.huanle.model.session;public class RedisUserEntity {private static final String subscritionPrefixSCRT_; //订阅信息的前缀/** 获得用户订阅在redis的缓存的key* param ip* return 用户订阅在redis的缓存的key*/public static String getSubscritionKeyByIp(String ip){ip ip.replace(., _);System.out.println(subscritionPrefixip);return subscritionPrefixip;}/** 获得用户订阅在redis的缓存的key* param ip* return 用户订阅在redis的缓存的key*/public static String getSubscritionKeyByAccount(String account){System.out.println(subscritionPrefixaccount);return subscritionPrefixaccount;}}