redis+tomcat session共享

環境準備java


Reidsredis

1/ 先去官網下載源碼:數據庫

wget http://redis.googlecode.com/files/redis-2.4.6.tar.gztomcat

2/ 解壓:tar –zxvf redis-2.4.6.tar.gz服務器

3/ 編譯session

須要說明的事,redis的安裝很是簡單,已經有現成的Makefile文件,直接運行make命令便可。app

makejsp

make install工具

Redis 由四個可執行文件:redis-benchmark、redis-cli、redis-server、redis-stat 這四個文件,加上一個redis.conf就構成了整個redis的最終可用包。它們的做用以下:性能

redis-server:Redis服務器的daemon啓動程序

redis-cli:Redis命令行操做工具。固然,你也能夠用telnet根據其純文本協議來操做

redis-benchmark:Redis性能測試工具,測試Redis在你的系統及你的配置下的讀寫性能

redis-stat:Redis狀態檢測工具,能夠檢測Redis當前狀態參數及延遲情況

如今就能夠啓動redis了,redis只有一個啓動參數,就是他的配置文件路徑。

redis-server /etc/redis.conf

注意,默認複製過去的redis.conf文件的daemonize參數爲no,因此redis不會在後臺運行,這時要測試,咱們須要從新開一個終端。修改成yes則爲後臺運行redis。另外配置文件中規定了pid文件,log文件和數據文件的地址,若是有須要先修改,默認log信息定向到stdout.

4/ 下面是redis.conf的主要配置參數的意義:

daemonize:是否之後臺daemon方式運行

pidfile:pid文件位置

port:監聽的端口號

timeout:請求超時時間

loglevel:log信息級別

logfile:log文件位置

databases:開啓數據庫的數量

save * *:保存快照的頻率,第一個*表示多長時間,第三個*表示執行多少次寫操做。在必定時間內執行必定數量的寫操做時,自動保存快照。可設置多個條件。

rdbcompression:是否使用壓縮

dbfilename:數據快照文件名(只是文件名,不包括目錄)

dir:數據快照的保存目錄(這個是目錄)

appendonly:是否開啓appendonlylog,開啓的話每次寫操做會記一條log,這會提升數據抗風險能力,但影響效率。

appendfsync:appendonlylog如何同步到磁盤(三個選項,分別是每次寫都強制調用fsync、每秒啓用一次fsync、不調用fsync等待系統本身同步)

5/ 這時你能夠打開一個終端進行測試了,配置文件中默認的監聽端口是6379

咱們能夠開啓一個Redis客戶端進行測試

[zhangqi.dzq@v069197102 /usr/local/redis-3.0.6]$ src/redis-cli 

127.0.0.1:6379> 

6/ 遠程java鏈接測試

 下載jar包

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.0.0</version>
</dependency>

上傳到服務器,個人上傳位置~/classpath/jedis-2.0.0.jar

編寫java代碼

import redis.clients.jedis.Jedis;
public class RedisJava {
   public static void main(String[] args) {
      //Connecting to Redis server on localhost
      Jedis jedis = new Jedis("100.69.197.102",6379);
      System.out.println("Connection to server sucessfully");
      //check whether server is running or not
      System.out.println("Server is running: "+jedis.ping());
 }
}

編譯運行java類,成功

[root@iZ23bw4wy5uZ ~/java]#javac -cp /home/zhangqi.dzq/classpath/jedis-2.8.0.jar /home/zhangqi.dzq/jscript/RedisJava.java
[root@iZ23bw4wy5uZ ~/java]#java -cp /home/zhangqi.dzq/classpath/jedis-2.8.0.jar:/home/zhangqi.dzq/jscript RedisJava
Connection to server sucessfully
Server is running: PONG

Tomcat配置RedisSessionManager


下載配置tomcat

下載4個jar包(請注意版本,版本不合適會報異常)到tomcat的lib下

編輯context.xml

文本形式(供拷貝^_^)

<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
    <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
         host="localhost"
         port="6379"
         database="0"
         maxInactiveInterval="60" />

啓動tomcat:./bin/startup.sh,查看logs/catalina.out的信息中包含如下內容,則RedisSessionManager配置生效

Jan 07, 2016 8:07:41 PM com.radiadesign.catalina.session.RedisSessionManager startInternal
INFO: Attached to RedisSessionHandlerValve
Jan 07, 2016 8:07:41 PM com.radiadesign.catalina.session.RedisSessionManager initializeSerializer
INFO: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer
Jan 07, 2016 8:07:41 PM com.radiadesign.catalina.session.RedisSessionManager startInternal
INFO: Will expire sessions after 1800 seconds


將當期tomcat目錄命名爲tomcat1,從新拷貝一份命名爲tomcat2(同一臺機器環境模擬集羣的狀況,須要修改server.xml下的http、ajp端口號,保證tomcat1與tomcat2端口不相同)

測試


啓動redis、tomcat一、tomcat2

1 / 查看redis全部數據,能夠看出爲空。

[root@iZ23bw4wy5uZ ~]# redis-cli 
127.0.0.1:6379> keys *
(empty list or set)

2/ 訪問tomcat1下的應用頁面後

http://120.26.223.48:8080/site/login.jsp

查看redis數據,sessionId已經保存下來。

[root@iZ23bw4wy5uZ ~]# redis-cli 
127.0.0.1:6379> keys *
1) "D49AD5115560A12185DBDF372637BAD5"

3/ 訪問tomcat2下的應用頁面後

http://120.26.223.48:8090/site/login.jsp

查看redis數據,是同一個sessionId

[root@iZ23bw4wy5uZ ~]# redis-cli 
127.0.0.1:6379> keys *
1) "D49AD5115560A12185DBDF372637BAD5"
相關文章
相關標籤/搜索