在之前的工作中配置过Redis集群用来共享session。但是仅仅用一个集群来共享session又有点浪费,于是在之前配置基础上再增加一些PV、UV的统计功能。但是这之中遇到了一个问题,就是关于redis配置和spring开发包版本的冲突问题。有两套方案,记录下来希望对将来的工作有帮助。
方案一:我所使用的spring的版本是4.2.(其中一定要使用4.0.0及以上版本的spring-web和spring-webmvc开发包)
配置如下
spring-session专用
使用的时候注入即可
@Autowired
@Qualifier("jedisConnectionFactory")
private JedisConnectionFactory jedisConnectionFactory;
@Qualifier("jedisConnectionFactory")
private JedisConnectionFactory jedisConnectionFactory;
jedisConnectionFactory bean下面有获取Jedis实例的方法,然后Jedis里面实现了各种对redis集群操作的具体方法
但是这种方法有一个问题,就是在spring低于4版本的时候,编译会抛出异常,创建bean with name redisSentinelConfiguration失败,因为找不到sentinels对应的setter方法。如果项目spring版本无法升级的话,只能另找办法,看到一个帖子,地址是 /zr520/p/,这种办法可以在公司项目(spring 3.2.4)下面实现,因为这种办法我们在使用redis连接时,直接使用redis的共享连接池。而前者方法是通过sentinel寻找当前的master(配置是master唯一可写,slave只读),所以sentinel配置bean注入很重要。
至于pv uv统计需求,我统计pv用了一个filter,过滤所有web请求,所有请求都算到pv里面,uv我是按照sessionId统计的(因为()返回的cookie数组里面我也不知道算哪个。。菜鸟是我),但是关于uv,我看网上有两种说话,一种是按照ip计算,一种是cookie计算,我觉得都不太合理,比如有的网络使用代理访问,那么共用一个ip,至于cookie,如果不设置生命时长,浏览器重启cookie消亡,再次访问就会导致uv过多统计。因为uv是unique visitor,如果可一,会不会用MAC地址会好一些。。。求教。。