本次是在 175的但單機版基礎上繼續的
單機版redis安裝:
https://my.oschina.net/springMVCAndspring/blog/1922742
1. 安裝好單機版redis(教程:上面鏈接)
2. 安裝redis集羣
2.1 準備
(0) 環境
a.執行環境
yum install ruby
b. 執行命令
yum install rubygems
c.導入集羣安裝插件
2.2 複製單機版的安裝成功後的文件
2.3 修改每一個集羣的配置文件
開通:9001 9002 ........9008 這8個端口
以9001舉例其他的一次類推
2.4 將9001的bin複製到其他7個文件夾
複製完成後將每一個配置文件的端口修改修改就行
2.5 修改每一個剩下7個的端口 並啓動這個8個服務
2.6 創建集羣
(1)複製集羣啓動文件
(2)創建集羣
注:如果下面代碼有問題 先放到text文檔中,有時候發生亂碼
./redis-trib.rb create --replicas 1 192.168.76.136:9001 192.168.76.136:9002 192.168.76.136:9003 192.168.76.136:9004 192.168.76.136:9005 192.168.76.136:9006 |
登錄集羣:
./redis-cli -c -h 192.168.76.136 -p 9001 |
查看9001的節點狀態
cluster info |
查看集羣節點的關係
cluster nodes |
3. 動態添加節點 分類存儲空間
3.1 添加節點
注:要添加的節點一定是啓動狀態
3.1.1 添加主節點
-- 參考節點,表示把9007添加到9001所在集羣 ./redis-trib.rb add-node 192.168.76.136:9007 192.168.76.136:9001 |
3.1.2 動態添加從節點
動態給主節點添加從節點: ./redis-trib.rb add-node --slave --master-id ce4954009a367177e1a5e569e8936d942edf56e8 192.168.76.136:9008 192.168.76.136:9001 add-node --slave:添加從節點 --master-id:主節點Id,表示添加從節點爲那個主節點的從節點 192.168.76.136:9001:參考節點,表示把9008添加到9001所在集羣 |
4. 給節點分配存儲空間
給新添加節點分配存儲空間: ./redis-trib.rb reshard 192.168.76.136:9001 |
5. 應用
5.1 redis客戶端
<!-- 1.5 Redis客戶端..................................................................................開始......--> <!-- Redis客戶端 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${jedis.version}</version> </dependency> <!-- 1.5 Redis客戶端..................................................................................結束......--> |
5.2 redis 配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 創建連接池配置對象 --> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 設置最大連接數 --> <property name="maxTotal" value="1000"></property> <property name="maxIdle" value="20"></property> </bean> <!-- 創建Jedis連接池對象:單機版 --> <!-- <bean class="redis.clients.jedis.JedisPool"> <constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg> <constructor-arg name="host" value="192.168.76.136"></constructor-arg> <constructor-arg name="port" value="6379"></constructor-arg> </bean> --> <!-- 創建Jedis集羣對象 --> <bean class="redis.clients.jedis.JedisCluster"> <constructor-arg name="nodes"> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.76.136"></constructor-arg> <constructor-arg name="port" value="9001"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.76.136"></constructor-arg> <constructor-arg name="port" value="9002"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.76.136"></constructor-arg> <constructor-arg name="port" value="9003"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.76.136"></constructor-arg> <constructor-arg name="port" value="9004"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.76.136"></constructor-arg> <constructor-arg name="port" value="9005"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.76.136"></constructor-arg> <constructor-arg name="port" value="9006"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.76.136"></constructor-arg> <constructor-arg name="port" value="9007"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.76.136"></constructor-arg> <constructor-arg name="port" value="9008"></constructor-arg> </bean> </set> </constructor-arg> <constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg> </bean> </beans> |
5.3 掃描接口
5.4 配置外部變量
爲了將一些需要變化的內容寫在資源文件中
參考:https://my.oschina.net/springMVCAndspring/blog/2249002
5.5 添加redis緩存
/** * 3.需求:跳轉到門戶系統首頁 */ @Override public List<ADPojo> queryBigADByCategoryId(Long categoryId) { //改進使用redis添加緩存 //3.1 先去緩存中查詢該緩存是否存在 使用的時候 可以將封裝的JedisDao 及實現類 JedisDaoImpl直接複製 String dataJson = jedisDao.hget(bigAD, categoryId+""); if(StringUtils.isNotBlank(dataJson)){ List<ADPojo> adList = JSON.parseArray(dataJson,ADPojo.class);//使用fastjson將資源json轉list集合 return adList; }else{ //3.2 去數據庫查詢 //用於封裝數據 List<ADPojo> resultList = new ArrayList<ADPojo>(); //根據分類id 去內容表(tb_content) List<TbContent> list = contentMapper.queryBigADByCategoryId(categoryId);//大廣告 for (TbContent tbContent : list) { ADPojo ad = new ADPojo(); //提示 信息 ad.setAlt(tbContent.getTitle()); //大廣告圖片高度 ad.setHeight(height); ad.setHeightB(heightB); //大廣告位圖片寬 ad.setWidth(width); ad.setWidthB(widthB); //跳轉鏈接 ad.setHref(tbContent.getUrl()); //照片路徑 ad.setSrc(tbContent.getPic()); ad.setSrcB(tbContent.getPic2()); //將每個對象封裝到list resultList.add(ad); } //3.3 如果緩存沒有數據,查詢數據庫,查詢數據同時需要把數據添加到redis緩存 jedisDao.hset(bigAD, categoryId+"", JSONObject.toJSONString(resultList)); return resultList; } } |
5.6 抽取的接口及實現類
package cn.guang.shopping.centent.jedis; public interface JedisDao { } |
package cn.guang.shopping.centent.jedis.impl; import org.springframework.beans.factory.annotation.Autowired; import cn.guang.shopping.centent.jedis.JedisDao; @Override @Override @Override @Override @Override @Override @Override @Override @Override } |