redis 的缓存策略

配置redis成为一个缓存,如果redis当做一个缓存来用,所有的key都有过期时间
1.配置缓存
1)设定最大内存使用量
maxmemory 2mb
2)设定过期策略
#maxmemory-policy allkeys-lru 该设置并不需要我们的应用使用EXPIRE(或相似的命令)命令去设置每个key的过期时间,因为只要内存使用量到达2M,redis就会使用类LRU算法自动删除某些key。
#maxmemory-policy allkeys-random:随机移除任何key。
#maxmemory-policy volatile-lru:利用LRU算法移除设置过过期时间的key。
#maxmemory-policy volatile-random:随机移除设置过过期时间的key。
#maxmemory-policy volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL)
#maxmemory-policy noeviction:不移除任何key,只是返回一个写错误,让用户对缓存内容进行处理,用户根据需要删除自己想删除的内容。
备注:
a.最大内存达到后redis将不再接收写请求,只接收get请求。
b.lru,即最近最少使用
c.ttl,即Time to Live,意思就是生存时间
d.至于选择哪个策略,一切根据需求来
2.缓存的应用举例
1.见图“tomcat集群下session共享.png”
2.按图所示,两次产生的session值不一样,将会产生什么问题?
会让用户一直登陆,无法使用系统。需要“单点登录”配置。
session!=null(错误)
session.getAtitute("username")!=null(正确)
3.问题2的解决方案?
使用redis缓存web集群环境下的session值,如下几步:
1)首先,启动一个redis实例作为缓存
启动6379端口的redis,强烈建议用一台单独的redis作为缓存。
2)配置tomcat/conf/context.xml
a.如果是单点redis则配置代码如下:
<Valve className="com.orangefunction.tomcat.redissessions.redisSessionHandlerValve" />    
<Manager className="com.orangefunction.tomcat.redissessions.redisSessionManager" 
host="127.0.0.1" 
port="6379" 
database="0" 
password="aaaa"
maxInactiveInterval="60" />
b.如果是sentinel-redis集群则配置代码如下:
<Valve className="com.orangefunction.tomcat.redissessions.redisSessionHandlerValve" />    
<Manager className="com.orangefunction.tomcat.redissessions.redisSessionManager" 
maxInactiveInterval="60"
sentinelMaster="mymaster"
sentinels="127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382" />
备注:maxInactiveInterval含义为最大不活动时间,应该是每接受一次请求就重新起算,单位秒
3)在tomcat/lib中导入一下jar包
tomcat-juli-adapters.jar
tomcat-redis-session-manager1.2.jar
jedis-2.6.2.jar
tomcat-juli.jar
commons-pool2-2.4.1.jar
4)共享原理
tomcat在启动的时候,每一个tomcat实例连接redis,当有用户访问的时候再写入session信息,其他tomcat实例根据指定的配置文件从redis实例中读取该session。
4.演示
配置好context.xml后,重启tomcat,访问页面验证每次打印的sessionid是否一致。
5.注意
1)即使是context.xml总配置maxInactiveInterval默认60秒,只要web.xml中的sessionConfig默认配置30分钟,则session的失效时间还是30分钟。
2)tomcat仍然为每一个访问的用户创建他的session.
3)只是连上了服务器但是没有输入用户名密码登录的情况下session创建了吗?YES
4)关闭浏览器后原来的session消失了吗?NO
5)所有的tomcat实例的context.xml配置必须都相同的,只有相同才能保证所有的tomcat实例访问的是同一个sessions。
6)如果redis访问需要密码,需要在context.xml中配置password属性指定密码。
7)session是基于cookie的,在以后的访问请求中会包含该sessionid,其他的tomcat就是根据包含的这个id到redis中查看它是否存在,如果存在则不创建新session否则就创建并写入新session.
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值