day72_淘淘商城專案_05_首頁輪播圖顯示實現 + redis的安裝及使用 + redis叢集環境搭建 + redis實現快取 + 快取同步_匠心筆記
淘淘商城專案_05
- 1、首頁輪播圖的展示
- 2、首頁大廣告展示流程圖
- 3、Redis的安裝及使用
- 4、Redis叢集的搭建
- 5、Java客戶端Jedis的使用方法
- 5.1、通過單例項連線redis伺服器單機版
- 5.2、通過連線池連線redis伺服器單機版
- 5.3、使用spring整合JedisPool連線redis伺服器單機版
- 5.4、使用JedisCluster類連線redis伺服器叢集版
- 5.5、使用spring整合JedisCluster連線redis伺服器叢集版
- 6、向業務邏輯中新增快取
- 7、附錄
課程計劃:
- 第五天
- 1、首頁輪播圖的展示
- 2、首頁大廣告展示流程圖
- 3、Redis的安裝及使用
- 4、Redis叢集的搭建
- 5、向業務邏輯中新增快取
- 6、Jedis的使用(redis的客戶端)
- 7、快取同步
1、首頁輪播圖的展示
taotao-portal-web工程中,動態展示內容資訊。
前端團隊:負責JS,html等開發。
後端團隊:負責後臺的開發並提供資料給前端。
1.1、功能分析
只需要動態生成一個json資料,輪播圖就可以動態展示。
taotao-portal-web工程下的index.jsp中:
Json資料格式:
[
{
"srcB": "http://image.taotao.com/images/2015/03/03/2015030304360302109345.jpg",
"height": 240,
"alt": "",
"width": 670,
"src": "http://image.taotao.com/images/2015/03/03/2015030304360302109345.jpg",
"widthB": 550,
"href": "http://sale.jd.com/act/e0FMkuDhJz35CNt.html?cpdad=1DLSUE",
"heightB": 240
},
{
"srcB": "http://image.taotao.com/images/2015/03/03/2015030304353109508500.jpg",
"height": 240,
"alt": "",
"width": 670,
"src": "http://image.taotao.com/images/2015/03/03/2015030304353109508500.jpg",
"widthB": 550,
"href": "http://sale.jd.com/act/UMJaAPD2VIXkZn.html?cpdad=1DLSUE",
"heightB": 240
},
......
]
分析:
taotao-portal-web 需要自己自定義的POJO的型別資料的列表。
taotao-content 是服務層公用的,可以被其他的系統(表現層的系統)來呼叫。
為了通用性:taotao-content 服務層中獲取tb_content的內容列表 即:list<TbContent>
taotao-portal-web 表現層需要拿到tb_content的列表,然後進行轉換成自定義的型別的資料列表即可。
從tb_content表中取資料,根據(葉子節點)內容分類id查詢列表(內容列表)。
內容分類id固定,需要配置在屬性檔案中
。
圖片的width、height配置在屬性檔案中
。
alt屬性從欄位sub_title中獲取。
src --> pic
srcB --> pic2
href --> url
URL:/index
引數:無。
返回值:首頁頁面(資料是JSON,設定在Model中)
業務邏輯:
1、根據分類的id 查詢內容列表(List<TbContent>)
2、服務層釋出服務。
3、表現層引入服務。
4、呼叫服務,轉換成自定義的資料型別(Ad1Node)
的列表。
5、將資料列表設定到Model
中,返回給頁面。
需要建立一個pojo轉換成頁面需要的json資料格式。放入taotao-portal-web工程的com.taotao.portal.pojo中。
AD1Node.java
/**
* 前臺大廣告位需要的pojo資料型別
* @author chenmingjun
* @date 2018年11月18日下午4:03:34
* @version 1.0
*/
public class AD1Node implements Serializable {
private static final long serialVersionUID = 1L;
private String srcB;
private Integer height;
private String alt;
private Integer width;
private String src;
private Integer widthB;
private String href;
private Integer heightB;
public String getSrcB() {
return srcB;
}
public void setSrcB(String srcB) {
this.srcB = srcB;
}
public Integer getHeight() {
return height;
}
public void setHeight(Integer height) {
this.height = height;
}
public String getAlt() {
return alt;
}
public void setAlt(String alt) {
this.alt = alt;
}
public Integer getWidth() {
return width;
}
public void setWidth(Integer width) {
this.width = width;
}
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
public Integer getWidthB() {
return widthB;
}
public void setWidthB(Integer widthB) {
this.widthB = widthB;
}
public String getHref() {
return href;
}
public void setHref(String href) {
this.href = href;
}
public Integer getHeightB() {
return heightB;
}
public void setHeightB(Integer heightB) {
this.heightB = heightB;
}
@Override
public String toString() {
return "AD1Node [srcB=" + srcB + ", height=" + height + ", alt=" + alt + ", width=" + width + ", src=" + src
+ ", widthB=" + widthB + ", href=" + href + ", heightB=" + heightB + "]";
}
}
1.2、Dao層
從tb_content表中取出資料,根據內容分類id查詢內容列表。可以使用逆向工程生成的Mapper。
1.3、Service層
引數:Long categoryId
返回值:List<TbContent>
@Override
public List<TbContent> getContentListByCategoryId(Long categoryId) {
TbContentExample contentExample = new TbContentExample();
Criteria criteria = contentExample.createCriteria();
criteria.andCategoryIdEqualTo(categoryId);
List<TbContent> list = contentMapper.selectByExample(contentExample);
return list;
}
1.3.1、釋出服務
在taotao-content-service工程applicationContext-service.xml中釋出服務
1.4、表現層
在taotao-portal-web中實現,查詢首頁輪播圖的內容。
1.4.1、引用服務
先在taotao-protal-web專案中引入對taotao-content-interface的依賴,如圖:
在taotao-content-web工程springmvc.xml中引入服務
1.4.2、Controller
在首頁展示之前,對資料進行處理,然後展示首頁,需要在IndexController中實現。
/**
* 前臺首頁展示Controller
* @author chenmingjun
* @date 2018年12月31日
* @version V1.0
*/
@Controller
public class IndexController {
@Autowired
private ContentService contentService;
@Value("${AD1_CATEGORY_ID}")
private Long AD1_CATEGORY_ID;
@Value("${AD1_HEIGHT}")
private Integer AD1_HEIGHT;
@Value("${AD1_HEIGHT_B}")
private Integer AD1_HEIGHT_B;
@Value("${AD1_WIDTH}")
private Integer AD1_WIDTH;
@Value("${AD1_WIDTH_B}")
private Integer AD1_WIDTH_B;
/**
* 展示前臺首頁,並展示首頁輪播圖(大廣告)+展示小廣告......
* @return
*/
@RequestMapping("/index")
public String showIndex(Model model) {
// 展示首頁輪播圖
// 1、引入服務
// 2、注入服務
// 3、呼叫方法查詢TbContent的列表
List<TbContent> contentList = contentService.getContentListByCategoryId(AD1_CATEGORY_ID);
// 4、把TbContent的列表轉換為AD1Node列表
List<AD1Node> aD1NodeList = new ArrayList<>();
for (TbContent tbContent : contentList) {
AD1Node aD1Node = new AD1Node();
aD1Node.setAlt(tbContent.getSubTitle());
aD1Node.setHref(tbContent.getUrl());
aD1Node.setSrc(tbContent.getPic());
aD1Node.setSrcB(tbContent.getPic2());
aD1Node.setHeight(AD1_HEIGHT);
aD1Node.setHeightB(AD1_HEIGHT_B);
aD1Node.setWidth(AD1_WIDTH);
aD1Node.setWidthB(AD1_WIDTH_B);
aD1NodeList.add(aD1Node);
}
// 5、把AD1Node列表轉換為JSON資料
String json = JsonUtils.objectToJson(aD1NodeList);
// 6、把JSON資料設定到request域中去(Model)
model.addAttribute("ad1", json);
// 展示小廣告......等等省略了,以後實現
return "index";
}
}
屬性檔案所在位置:
在taotao-portal-web中的springmvc.xml中還需要配置:
<!-- 配置載入屬性檔案 -->
<context:property-placeholder location="classpath:resource/resource.properties"/>
1.5、測試
後臺資料如下圖所示:
前臺瀏覽器顯示介面:
其他廣告位同理。
2、首頁大廣告展示流程圖
首頁是系統的門戶
,也就是系統的入口
。所以首頁的訪問量是這個系統最大的。如果每次展示首頁都從資料庫中查詢首頁的內容資訊,那麼勢必會對資料庫造成很大的壓力,所以需要使用快取來減輕資料庫壓力。
實現快取的工具有很多,現在比較流行的是redis。
首頁大廣告展示流程:
展示流程:先從快取取,如果不存在,從資料庫取出來,寫入快取,再返回頁面;如果存在key,直接從快取中取出來,展示到頁面。
同步快取:當事務提交(更新,刪除,插入)後,需要同步快取,直接根據Key刪除redis的key(清空快取),再展示時,由上邊的流程展示。
3、Redis的安裝及使用
3.1、redis的下載
官網地址:http://redis.io/
下載地址:http://download.redis.io/releases/redis-3.0.0.tar.gz
3.2、redis的安裝
安裝redis需要c語言的編譯環境,如果沒有gcc需要線上安裝。如下命令:
[[email protected] ~]# yum -y install gcc-c++
檢測是否有gcc環境,只需輸入命令:
[[email protected] ~]# gcc
[[email protected] ~]# gcc
gcc: 致命錯誤:沒有輸入檔案
編譯中斷。
[[email protected] ~]#
出現如上所述內容,表示gcc安裝成功。
安裝步驟:
第一步:將redis的原始碼包上傳到linux系統。
第二步:解壓縮redis的原始碼包。
第三步:進行編譯。cd到解壓後的目錄,輸入命令:make
第四步:進行安裝。輸入命令:make install PREFIX=/usr/local/redis
第五步:檢查目錄是否存在。在/usr/local/redis下有bin目錄,則說明安裝成功。
3.3、連線redis
3.3.1、redis的啟動
前端啟動:在redis的安裝目錄下直接啟動redis-server
[[email protected] bin]# pwd
/usr/local/redis/bin
[[email protected] bin]# ./redis-server
後臺啟動:
把/root/redis-3.0.0/redis.conf複製到/usr/local/redis/bin目錄下
[[email protected] redis-3.0.0]# cp redis.conf /usr/local/redis/bin/
修改配置檔案:將daemonize由no改為yes
再次啟動redis:
[[email protected] bin]# ./redis-server redis.conf
檢視redis程序:
[[email protected] bin]# ps aux | grep redis
root 5845 0.4 0.2 140888 2104 ? Ssl 22:51 0:00 ./redis-server *:6379
root 5858 0.0 0.0 112720 980 pts/1 R+ 22:51 0:00 grep --color=auto redis
[[email protected] bin]#
前端啟動,不能更換終端,影響下一步操作。而後臺啟動,只在程序中悄悄啟動。推薦使用後臺啟動。
3.3.2、使用redis自帶的客戶端redis-cli連線redis
使用redis-cli建立連線:
[[email protected] bin]# ./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
預設連線localhost執行在6379埠的redis服務。
連線其他ip和埠:
[[email protected] bin]# ./redis-cli -h 192.168.25.153 -p 6379
192.168.25.153:6379> ping
PONG
192.168.25.153:6379>
-h:連線的伺服器的地址
-p:服務的埠號
退出redis連線的三種方式:
第一種方式:
[[email protected] bin]# ./redis-cli
127.0.0.1:6379> quit
[[email protected] bin]#
第二種方式:
[[email protected] bin]# ./redis-cli
127.0.0.1:6379> exit
[[email protected] bin]#
第三種方式:
Ctrl+C
3.3.3、使用redis的桌面客戶端軟體連線redis
先安裝:redis-desktop-manager-0.7.9.809.exe,注意:該軟體只能連線redis單機版。
安裝好後,雙擊開啟軟體
redis預設有16個庫,如果不指定庫,預設儲存在索引為0的庫中。
3.3.4、關閉redis服務
第一種:通過使用redis自帶的客戶端redis-cli進行關閉,使用 shutdown 命令。
[[email protected] bin]# ./redis-cli
127.0.0.1:6379> shutdown
not connected>
第二種:使用 kill 命令。
找到對應的redis的程序id 然後使用命令:(pid為程序id)
[[email protected] bin]# kill -9 pid
3.4、redis五種資料型別
3.4.1、String:key-value
redis命令不區分大小寫,但是key區分大小寫
的。
redis中所有的資料都是字串
。
redis是單執行緒
的,所以不適合儲存比較大的資料,最好要存小且能快速處理完的東西。
使用incr
命令,如果key不存在,會自動建立key並自動+1。
set key value 設定值
get key 獲取值
incr key 加一
decr key 減一
127.0.0.1:6379> set key1 2
OK
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> get key1
"2"
127.0.0.1:6379> get key2
"value2"
127.0.0.1:6379> Get key2
"value2"
127.0.0.1:6379> incr key1
(integer) 3
127.0.0.1:6379> decr key1
(integer) 2
127.0.0.1:6379>
3.4.2、Hash: key-field-value
相當於一個key對應一個map (map中又是key-value),
一般應用於歸類。
hset key field value
hget key field
hincrby key field num
127.0.0.1:6379> hset hkey1 filed1 value1
(integer) 1
127.0.0.1:6379> hset hkey1 filed2 2
(integer) 1
127.0.0.1:6379> hget hkey1 filed1
"value1"
127.0.0.1:6379> hget hkey1 filed2
"2"
127.0.0.1:6379> hincrby hkey1 filed2 1
(integer) 3
127.0.0.1:6379> hincrby hkey1 filed2 -1
(integer) 2
127.0.0.1:6379>
3.4.3、List
List是有順序可重複(資料結構中的:雙鏈表,佇列)
。
可作為連結串列,可以從左新增元素,也可以從右新增元素。
lpush list a b c d (從左新增元素)
rpush list 1 2 3 4 (從右邊新增元素)
lrange list 0 -1 (從 0 到 -1 元素檢視:也就表示檢視所有)
lpop list (從左邊取,刪除)
rpop list (從右邊取,刪除)
127.0.0.1:6379> lpush list1 a b c d
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> rpush list1 1 2 3 4
(integer) 8
127.0.0.1:6379> lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "1"
6) "2"
7) "3"
8) "4"
127.0.0.1:6379> lpop list1
"d"
127.0.0.1:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"
7) "4"
127.0.0.1:6379> rpop list1
"4"
127.0.0.1:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"
127.0.0.1:6379>
3.4.4、Set
Set無順序,不能重複。
sadd set1 a b c d d (向set1中新增元素)元素不重複
smembers set1 (查詢元素)
srem set1 a (刪除元素)
127.0.0.1:6379> sadd set1 a a a b b c
(integer) 3
127.0.0.1:6379> smembers set1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> srem set1 a
(integer) 1
127.0.0.1:6379> smembers set1
1) "c"
2) "b"
127.0.0.1:6379>
3.4.5、SortedSet(zset)
SortedSet有順序,不能重複。
適合做排行榜 排序需要一個分數屬性。
zadd zset1 8 a 4 b 5 c 1 d (新增元素:zadd key score member)
zrange key start stop [WITHSCORES] (檢視所有元素:zrange key 0 -1 withscores)
如果要檢視分數,需要加上withscores
zrange zset1 0 -1 (從小到大)
zrevrange zset1 0 -1 (從大到小)
zincrby zset1 score member (對元素 member 增加 score)
127.0.0.1:6379> zadd zset1 8 a 4 b 5 c 1 d
(integer) 4
127.0.0.1:6379> zrange zset1 0 -1
1) "d"
2) "b"
3) "c"
4) "a"
127.0.0.1:6379> zadd zset1 9 a
(integer) 0
127.0.0.1:6379> zrange zset1 0 -1
1) "d"
2) "b"
3) "c"
4) "a"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "d"
2) "1"
3) "b"
4) "4"
5) "c"
6) "5"
7) "a"
8) "9"
127.0.0.1:6379> zrevrange zset1 0 -1
1) "a"
2) "c"
3) "b"
4) "d"
127.0.0.1:6379> zrevrange zset1 0 -1 withscores
1) "a"
2) "9"
3) "c"
4) "5"
5) "b"
6) "4"
7) "d"
8) "1"
127.0.0.1:6379>
3.5、key 命令
expire key second 設定key的過期時間
ttl key 檢視剩餘時間(-2 表示不存在,-1 表示已被持久化(永不過期),正數表示剩餘的時間)
persist key 清除過期時間,也即持久化,持久化成功體提示 1,不成功提示 0
del key 刪除key
exists key 若key存在,返回1,否則返回0。
select 0 表示選擇0號資料庫。預設是0號資料庫。
redis 預設有16個庫 select num 從0開始換庫
keys * 獲取redis裡面所有的key
dbsize 檢視當前資料庫的key的數量
flushdb 清空當前庫的所有key
flushall 清空所有庫的key
exists key 是否存在該key
move key db 把當前庫的key移到db號庫中
type key 檢視key的型別
3.6、redis持久化方案
redis 資料都放在記憶體中
。如果機器掛掉,記憶體的資料就不存在。
需要做持久化處理
,將記憶體中的資料儲存在磁碟,下一次啟動的時候就可以恢復資料到記憶體中。
方案1:RDB 快照形式(定期將當前時刻的資料儲存磁碟中)會產生一個dump.rdb檔案。
特點:會存在資料丟失,效能較好,資料備份。
方案2:AOF:append only file (所有對redis的操作命令記錄在aof檔案中),恢復資料,重新執行一遍即可。
特點:每秒儲存(也可能會存在資料丟失),資料比較完整,耗費效能。其實也可以設定成每次儲存,但是此就失去了快取的意義了。
redis預設開啟RDB。
如下圖:
redis.conf 中預設設定了儲存規則及時間間隔。
save 開頭的一行就是持久化配置,可以配置多個條件(每行配置一個條件),每個條件之間是“或”的關係。
save 900 1 表示15分鐘(900秒)內至少1個鍵被更改則進行快照。
save 300 10 表示5分鐘(300秒)內至少10個鍵被更改則進行快照。
save 60 10000 表示1分鐘(60秒)內至少10000個鍵被更改則進行快照。
AOF開啟設定,修改 redis.conf 檔案,如下圖:
將appendonly設定為yes即可。
同時開啟兩個持久化方案,則按照AOF的持久化放案恢復資料
。
預設是按照RDB的方式恢復資料,如果開啟了AOF,就是用AOF恢復資料,資料是存在於/usr/local/redis/bin/appendonly.aof檔案中。
4、Redis叢集的搭建
4.1、redis-cluster架構圖
架構細節詳解如下:
架構細節:
(1) 所有的 redis 節點彼此互聯(`PING-PONG機制`),內部使用`二進位制協議`優化傳輸速度和頻寬。
(2) 節點的 fail(失敗) 是通過叢集中`超過半數的節點檢測失效`時才生效。即`叢集搭建中主機的個數為奇數`。
(3) 客戶端與 redis 節點直連,不需要中間 proxy層,客戶端不需要連線叢集所有節點,連線叢集中任何一個可用節點即可。
(4) redis-cluster 把所有的物理節點對映到 [0-16383]slot(槽) 上,cluster 負責維護 node<-->slot<-->value
Redis 叢集中內建了 `16384 個雜湊槽`,當需要在 Redis 叢集中放置一個 key-value 時,redis 先對 key 使用 crc16 演算法算出一個結果,然後把結果`對 16384 求餘數`,這樣每個 key 都會對應一個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量`大致均等`的將雜湊槽對映到不同的節點。如下圖所示:
雜湊槽的圖解:
redis-cluster投票,容錯機制圖解:
4.2、redis叢集的搭建
因為有投票容錯機制
,所以需要至少3個節點(奇數),為了叢集的高可用
,為每一個節點增加一個備份機
(共6臺伺服器)。
搭建偽分散式叢集
方案:在一臺機器裡面執行6個redis例項。埠需要不同即可(7001-7006)。
4.2.1、叢集搭建環境
4.2.2、搭建步驟
參考文章連結:https://www.cnblogs.com/chenmingjun/p/9903889.html
建立叢集命令:
[[email protected] redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006
4.3、叢集的使用方法
redis-cli連線叢集。連線主節點或者從節點都可以。
[[email protected] redis-cluster]# 7001/redis-cli -h 192.168.25.153 -p 7006 -c
192.168.25.153:7006> set key1 123
-> Redirected to slot [9189] located at 192.168.25.153:7002
OK
192.168.25.153:7002> keys *
1) "key1"
192.168.25.153:7002> set key2 abc
-> Redirected to slot [4998] located at 192.168.25.153:7001
OK
192.168.25.153:7001> keys *
1) "key2"
192.168.25.153:7001> set key3 bbbb
OK
192.168.25.153:7001> set key4 cccc
-> Redirected to slot [13120] located at 192.168.25.153:7003
OK
192.168.25.153:7003>
-c:代表連線的是redis叢集
使用命令操作redis叢集是和單機版的redids是一樣的。
192.168.25.153:7003> cluster info #查詢叢集的資訊
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:3
cluster_stats_messages_sent:1623
cluster_stats_messages_received:1623
192.168.25.153:7003> cluster nodes #查詢叢集的節點
ecb5aafd409740004ac3bf298318e2243f562e4e 192.168.25.153:7004 slave b207611daffa174990c64499495fc42ce3978767 0 1542619629901 4 connected
30775ef3b509604b604b76a4407334fe1fb6304f 192.168.25.153:7006 slave c6514cdac6977ef8a8fbee8c7d5c3e4edd7df585 0 1542619634936 6 connected
fd369b55daa7cdd8640e1e1bfa8fa2ab9cfe39cd 192.168.25.153:7002 master - 0 1542619633928 2 connected 5461-10922
c6514cdac6977ef8a8fbee8c7d5c3e4edd7df585 192.168.25.153:7003 myself,master - 0 0 3 connected 10923-16383
75a701f4cd545ee704ded294c17bbfa3f02eaee1 192.168.25.153:7005 slave fd369b55daa7cdd8640e1e1bfa8fa2ab9cfe39cd 0 1542619631916 5 connected
b207611daffa174990c64499495fc42ce3978767 192.168.25.153:7001 master - 0 1542619632921 1 connected 0-5460
192.168.25.153:7003>
5、Java客戶端Jedis的使用方法
需要把jedis依賴的jar包新增到工程中。Maven工程中需要把jedis的座標新增到依賴。
推薦新增到服務層
。本例中是:taotao-content-service工程中。
第一步:新增jar包的依賴
在taotao-content-service中新增測試方法,測試如下:
5.1、通過單例項連線redis伺服器單機版
@Test
public void jedisClientTest() throws Exception {
// 1、建立一個Jedis的連線物件(單例項),需要指定服務端的ip及埠
Jedis jedis = new Jedis("192.168.25.153", 6379);
// 2、選擇要操作的資料庫
jedis.select(2);
// 3、執行redis命令,即使用Jedis物件操作資料庫,每個redis命令對應一個方法
jedis.set("s4", "曉藝,你還好嗎?");
// 從redis中取值
String result = jedis.get("s4");
// 列印結果
System.out.println(result);
// 4、關閉連線
jedis.close();
}
通過單例項連線redis伺服器,我們發現每一次連線都需要建立連線,建立連線是比較浪費資源的,所以我們需要使用連線池來連線redis資料庫。
5.2、通過連線池連線redis伺服器單機版
測試程式碼如下:
/**
* 通過連線池連線redis伺服器單機版
*/
@Test
public void jedisPoolTest() throws Exception {
// 1、建立一個連線池JedisPool物件(單例項),需要指定服務端的ip及埠
JedisPool jedisPool = new JedisPool("192.168.25.153", 6379);
// 2、從連線池JedisPool中獲取jedis會話物件
Jedis jedis = jedisPool.getResource();
// 3、使用redis命令操作redis資料庫(方法級別使用:用完之後就要關閉)
String result = jedis.get("s11");
System.out.println(result);
// 4、關閉連線,操作完畢後關閉jedis物件,連線池要回收資源。
jedis.close();
// 5、關閉連線池物件JedisPool
jedisPool.close();
}
5.3、使用spring整合JedisPool連線redis伺服器單機版
新增spring的jar包
配置spring配置檔案applicationContext.xml
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!-- 連線池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大連線數 -->
<property name="maxTotal" value="30" />
<!-- 最大空閒連線數 -->
<property name="maxIdle" value="10" />
<!-- 每次釋放連線的最大數目 -->
<property name="numTestsPerEvictionRun" value="1024" />
<!-- 釋放連線的掃描間隔(毫秒) -->
<property name="timeBetweenEvictionRunsMillis" value="30000" />
<!-- 連線最小空閒時間 -->
<property name="minEvictableIdleTimeMillis" value="1800000