tomcat+redis实现session共享缓存
一:linux下redis安装
1.wget http://download.redis.io/releases/redis-3.2.4.tar.gz
2.tar xzf redis-3.2.4.tar.gz
3.rm -rf redis-3.2.4.tar.gz
4.cd redis-3.2.4
5.make
这个过程需要等一小会
6.cd src
7. ./redis-server /usr/local/redis-3.2.4/redis.conf
注意:默认要在redis的src目录下启动 ./redis-server,同时最好指定redis.conf,这样redis启动就会按照指定的redis.conf配置执行
(redis.conf文件修改好后再启动,或者修改后再重启)
以上redis安装完毕
二:redis配置修改
vi /usr/local/redis-3.2.4/redis.conf
测试环境时将bind 127.0.0.1注释掉(前面加上#),正式环境打开。
为了安全起见,redis一般都是监听127.0.0.1 但是有时候又有同网段能连接的需求,当然可以绑定0.0.0.0 用iptables来控制访问权限,或者设置redis访问密码来保证数据安全
不设置将处理所有请求,建议生产环境中设置,有个误区:bind是用来限制外网IP访问的,其实不是,限制外网ip访问可以通过iptables;如:-A INPUT -s 10.10.1.0/24 -p tcp -m state --state NEW -m tcp --dport 9966 -j ACCEPT ;
实际上,bind ip 绑定的是redis所在服务器网卡的ip,当然127.0.0.1也是可以的
如果绑定一个外网ip,就会报错:Creating Server TCP listening socket xxx.xxx.xxx.xxx:9966: bind: Cannot assign requested address
bind 127.0.0.1 10.10.1.3
# 假设绑定是以上ip,使用 netstat -anp|grep 9966 会发现,这两个ip被bind,其中10.10.1.3是服务器网卡的ip
# tcp 0 0 10.10.1.3:9966 0.0.0.0:* LISTEN 11188/redis-server
# tcp 0 0 127.0.0.1:9966 0.0.0.0:* LISTEN 11188/redis-server
找到# requirepass foobared ,修改为 requirepass 123456
123456为redis密码
记录操作命令[ Append-only file(缩写aof)的方式](较安全持久化)
appendonly yes #启用aof 持久化方式
# appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
# appendfsync no //完全依赖os,性能最好,持久化没保证
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 ###重定义命令,例如将CONFIG命令更名为一个很复杂的名字:
# rename-command CONFIG "" 取消这个命令;
以上两行,任意打开一个,即去掉前面的#
#daemonize no 默认情况下, redis 不是在后台运行的,生成模式时一般需要在后台运行,把该项的值更改为 yes
daemonize yes
改为yes后就看不到以下启动窗口了
还要看下这篇文章:
http://www.cnblogs.com/shihaiming/p/5938191.html
以上改完配置后需要重启服务
端口占用查看
1
|
netstat -tunpl | grep 6379<br><br> |
redis客户端启动
./redis-cli -h 127.0.0.1 -p 6379
有密码时输入 auth 123456
或者直接输入(有密码时 -a 123456)
./redis-cli -h 127.0.0.1 -p 6379 -a 123456
keys *
可以查看redis所有的key
三:tomcat关联redis
在tomcat8.0.37版本测试可用,8.5的tomcat不能用,应该是jar包不支持,暂时还不知道怎么解决
在tomcat安装目录下的lib中放入以下jar,每个tomcat实例都要这样做。
在context.xml中加入以下代码
<!-- 单点配置-->
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="192.168.1.249"
port="6379"
password="123456"
database="0"
maxInactiveInterval="60" />
host为redis所在服务的ip,port为redis的端口,password为redis密码,高版本的redis要设置密码,不然就会报连接池打开异常。
<!-- 集群配置-->
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
maxInactiveInterval="60"
password="123456"
sentinelMaster="mymaster"
sentinels="192.168.1.249:7000,192.168.1.249:7001,192.168.1.249:7002,192.168.1.248:7003,192.168.1.248:7004,192.168.1.248:7005"/>