




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、傳智播客 Java學(xué)院 傳智.入云龍?zhí)蕴陨坛堑谄咛斓诹靸?nèi)容復(fù)習(xí)輪播圖的展示內(nèi)容管理的后臺(tái)。Cms系統(tǒng)內(nèi)容分類的管理內(nèi)容管理,需要指定內(nèi)容的分類前臺(tái)展示內(nèi)容需要服務(wù)層發(fā)布服務(wù)。Portal調(diào)用服務(wù)獲得數(shù)據(jù)。HttpClient調(diào)用服務(wù)獲得數(shù)據(jù)。獲得數(shù)據(jù)后,把數(shù)據(jù)轉(zhuǎn)換成需要的數(shù)據(jù)格式傳遞給jsp。課程計(jì)劃在業(yè)務(wù)邏輯中添加緩存緩存可以使用redis作為緩存。Redis集群在java代碼中使用redis單機(jī)版、集群版。在業(yè)務(wù)邏輯中添加緩存。搜索系統(tǒng)的實(shí)現(xiàn)創(chuàng)建一個(gè)搜索的工程使用solr實(shí)現(xiàn)搜索。Solr集群搭建緩存的添加Redis 的單機(jī)版安裝步驟:第一步:安裝gcc編譯環(huán)境yum install g
2、cc-c+第二步:把redis的源碼上傳到linux服務(wù)器。第三步:解壓縮。tar -zxvf redis-3.0.0.tar.gz第四步:make第五步:make install PREFIX=/usr/local/redis啟動(dòng)redis兩種啟動(dòng)方式,前端啟動(dòng)、后臺(tái)啟動(dòng)。前端啟動(dòng):./redis-server后臺(tái)啟動(dòng):復(fù)制redis.conf到redis的安裝目錄修改redis.conf。修改daemonize yesrootbogon redis# ./redis-server redis.conf客戶端redis-cli -p 端口 -h ip地址 連接集群時(shí)使用此參數(shù)默認(rèn)端口:637
3、9Ip:localhost()RedisDesktopManager:只能在單機(jī)版環(huán)境使用。不支持redis集群。Redis集群redis-cluster架構(gòu)圖架構(gòu)細(xì)節(jié):(1)所有的redis節(jié)點(diǎn)彼此互聯(lián)(PING-PONG機(jī)制),內(nèi)部使用二進(jìn)制協(xié)議優(yōu)化傳輸速度和帶寬.(2)節(jié)點(diǎn)的fail是通過(guò)集群中超過(guò)半數(shù)的節(jié)點(diǎn)檢測(cè)失效時(shí)才生效.(3)客戶端與redis節(jié)點(diǎn)直連,不需要中間proxy層.客戶端不需要連接集群所有節(jié)點(diǎn),連接集群中任何一個(gè)可用節(jié)點(diǎn)即可(4)redis-cluster把所有的物理節(jié)點(diǎn)映射到0-16383slot上,cluster 負(fù)責(zé)維護(hù)nodeslotvalueRedis 集群中
4、內(nèi)置了 16384 個(gè)哈希槽,當(dāng)需要在 Redis 集群中放置一個(gè) key-value 時(shí),redis 先對(duì) key 使用 crc16 算法算出一個(gè)結(jié)果,然后把結(jié)果對(duì) 16384 求余數(shù),這樣每個(gè) key 都會(huì)對(duì)應(yīng)一個(gè)編號(hào)在 0-16383 之間的哈希槽,redis 會(huì)根據(jù)節(jié)點(diǎn)數(shù)量大致均等的將哈希槽映射到不同的節(jié)點(diǎn)集群搭建集群中應(yīng)該至少有三個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)有一備份節(jié)點(diǎn)。需要6臺(tái)服務(wù)器。搭建偽分布式,需要6個(gè)redis實(shí)例。搭建集群的步驟:第一步:創(chuàng)建6個(gè)redis實(shí)例指定端口從7001到7006第二步:修改redis.conf 打開(kāi)Cluster-enable yes前面的注釋。第三步:需要一
5、個(gè)ruby腳本。在redis源碼文件夾下的src目錄下。redis-trib.rb第四步:把redis-trib.rb文件復(fù)制到到redis-cluster目錄下。第五步:執(zhí)行ruby腳本之前,需要安裝ruby環(huán)境。1、yum install ruby2、yum install rubygems3、安裝redis-trib.rb運(yùn)行依賴的ruby的包。rootbogon # gem install redis-3.0.0.gem第六步:?jiǎn)?dòng)所有的redis實(shí)例。第七步:使用redis-trib.rb創(chuàng)建集群。./redis-trib.rb create -replicas 1 53:7001
6、53:7002 53:7003 53:7004 53:7005 53:7006使用客戶端連接集群: redis01/redis-cli -p 7001 -c如何使用redis的java客戶端需要使用Jedis連接redis服務(wù)器。連接單機(jī)版先把jedis依賴的jar包添加到工程中。/單機(jī)版測(cè)試Testpublic void testJedisSingle() throws Exception /創(chuàng)建一個(gè)Jedis對(duì)象Jedis jedis = new Jedis(53, 6379);jedis.set(test, hello jedis);String string = jedis.get(t
7、est);System.out.println(string);jedis.close();使用連接池:/使用連接池Testpublic void testJedisPool() throws Exception /創(chuàng)建一個(gè)連接池對(duì)象/系統(tǒng)中應(yīng)該是單例的。JedisPool jedisPool = new JedisPool(53, 6379);/從連接池中獲得一個(gè)連接Jedis jedis = jedisPool.getResource();String result = jedis.get(test);System.out.println(result);/jedis必須關(guān)閉jedis.c
8、lose();/系統(tǒng)關(guān)閉時(shí)關(guān)閉連接池jedisPool.close();集群版使用Jedis/連接redis集群Testpublic void testJedisCluster() throws Exception /創(chuàng)建一個(gè)JedisCluster對(duì)象Set nodes = new HashSet();nodes.add(new HostAndPort(53, 7001);nodes.add(new HostAndPort(53, 7002);nodes.add(new HostAndPort(53, 7003);nodes.add(new HostAndPort(53, 7004);nod
9、es.add(new HostAndPort(53, 7005);nodes.add(new HostAndPort(53, 7006);/在nodes中指定每個(gè)節(jié)點(diǎn)的地址/jedisCluster在系統(tǒng)中是單例的。JedisCluster jedisCluster = new JedisCluster(nodes);jedisCluster.set(name, zhangsan);jedisCluster.set(value, 100);String name = jedisCluster.get(name);String value = jedisCluster.get(value);Sy
10、stem.out.println(name);System.out.println(value);/系統(tǒng)關(guān)閉時(shí)關(guān)閉jedisClusterjedisCluster.close();項(xiàng)目中使用jedis思路:創(chuàng)建一個(gè)redis操作的接口。分別創(chuàng)建兩個(gè)實(shí)現(xiàn)類對(duì)應(yīng)redis 的單機(jī)版和集群版。當(dāng)使用單機(jī)版redis時(shí),配置單機(jī)版的實(shí)現(xiàn)類,當(dāng)使用集群版本的時(shí)候,配置集群版的實(shí)現(xiàn)類。單機(jī)版實(shí)現(xiàn)類/* * redis客戶端單機(jī)版實(shí)現(xiàn)類 * Title: JedisClientSingle * Description: * Company: * author入云龍 * date2015年11月20日上午10
11、:13:58 * version 1.0 */public class JedisClientSingle implements JedisClientAutowiredprivate JedisPool jedisPool;Overridepublic String set(String key, String value) Jedis jedis = jedisPool.getResource();String result = jedis.set(key, value);jedis.close();return result;Overridepublic String get(Strin
12、g key) Jedis jedis = jedisPool.getResource();String result = jedis.get(key);jedis.close();return result;Overridepublic Long hset(String key, String item, String value) Jedis jedis = jedisPool.getResource();Long result = jedis.hset(key, item, value);jedis.close();return result;Overridepublic String h
13、get(String key, String item) Jedis jedis = jedisPool.getResource();String result = jedis.hget(key, item);jedis.close();return result;Overridepublic Long incr(String key) Jedis jedis = jedisPool.getResource();Long result = jedis.incr(key);jedis.close();return result;Overridepublic Long decr(String ke
14、y) Jedis jedis = jedisPool.getResource();Long result = jedis.decr(key);jedis.close();return result;Overridepublic Long expire(String key, int second) Jedis jedis = jedisPool.getResource();Long result = jedis.expire(key, second);jedis.close();return result;Overridepublic Long ttl(String key) Jedis je
15、dis = jedisPool.getResource();Long result = jedis.ttl(key);jedis.close();return result;集群版/* * redis客戶端集群版實(shí)現(xiàn)類 * Title: JedisClientCluster * Description: * Company: * author入云龍 * date2015年11月20日上午10:14:57 * version 1.0 */public class JedisClientCluster implements JedisClient Autowiredprivate JedisClu
16、ster jedisCluster;Overridepublic String set(String key, String value) return jedisCluster.set(key, value);Overridepublic String get(String key) return jedisCluster.get(key);Overridepublic Long hset(String key, String item, String value) return jedisCluster.hset(key, item, value);Overridepublic Strin
17、g hget(String key, String item) return jedisCluster.hget(key, item);Overridepublic Long incr(String key) return jedisCluster.incr(key);Overridepublic Long decr(String key) return jedisCluster.decr(key);Overridepublic Long expire(String key, int second) return jedisCluster.expire(key, second);Overrid
18、epublic Long ttl(String key) return jedisCluster.ttl(key);Spring的配置!- -測(cè)試:Testpublic void testJedisClientSpring() throws Exception /創(chuàng)建一個(gè)spring容器ApplicationContext applicationContext = new ClassPathXmlApplicationContext(classpath:spring/applicationContext-*.xml);/從容器中獲得JedisClient對(duì)象JedisClient jedisC
19、lient = applicationContext.getBean(JedisClient.class);/jedisClient操作redisjedisClient.set(cliet1, 1000);String string = jedisClient.get(cliet1);System.out.println(string);業(yè)務(wù)邏輯中添加緩存注意:添加緩存時(shí)不要影響正常的業(yè)務(wù)邏輯。Overridepublic List getContentList(Long cid) /添加緩存/查詢數(shù)據(jù)庫(kù)之前先查詢緩存,如果有直接返回try /從redis中取緩存數(shù)據(jù)String json =
20、 jedisClient.hget(REDIS_CONTENT_KEY, cid+);if (!StringUtils.isBlank(json) /把json轉(zhuǎn)換成ListList list = JsonUtils.jsonToList(json, TbContent.class);return list; catch (Exception e) e.printStackTrace();/ 根據(jù)cid查詢內(nèi)容列表TbContentExample example = new TbContentExample();Criteria criteria = example.createCriteri
21、a();criteria.andCategoryIdEqualTo(cid);/執(zhí)行查詢List list = contentMapper.selectByExampleWithBLOBs(example);/返回結(jié)果之前,向緩存中添加數(shù)據(jù)try /為了規(guī)范key可以使用hash/定義一個(gè)保存內(nèi)容的key,hash中每個(gè)項(xiàng)就是cid/value是list,需要把list轉(zhuǎn)換成json數(shù)據(jù)。jedisClient.hset(REDIS_CONTENT_KEY, cid+, JsonUtils.objectToJson(list); catch (Exception e) e.printStack
22、Trace();return list;緩存同步當(dāng)后臺(tái)修改內(nèi)容信息后,只需要把redis中緩存的數(shù)據(jù)刪除即可。后臺(tái)系統(tǒng)不直接操作redis數(shù)據(jù)庫(kù)。可以在taotao-rest中發(fā)布一個(gè)服務(wù),當(dāng)后臺(tái)對(duì)內(nèi)容信息修改后,調(diào)用服務(wù)即可。服務(wù)的功能就是根據(jù)cid刪除redis中緩存數(shù)據(jù)。發(fā)布服務(wù)Dao層使用JedisClient。Service層接收cid,根據(jù)cid調(diào)用JedisClient刪除redis中緩存的數(shù)據(jù)。返回結(jié)果TaotaoResult。Overridepublic TaotaoResult syncContent(Long cid) jedisClient.hdel(REDIS_CON
23、TENT_KEY, cid + );return TaotaoResult.ok();Controller層發(fā)布服務(wù),接收參數(shù)cid,返回結(jié)果TaotaoResult。RequestMapping(/sync/content/cid)ResponseBodypublic TaotaoResult sysncContent(PathVariable Long cid) try TaotaoResult result = contentService.syncContent(cid);return result; catch (Exception e) e.printStackTrace();re
24、turn TaotaoResult.build(500, ExceptionUtil.getStackTrace(e);調(diào)用緩存同步后臺(tái)系統(tǒng)中,只要內(nèi)容發(fā)生變化(增刪改操作)需要調(diào)用緩存同步的服務(wù)。商品類目展示添加緩存作業(yè)搜索系統(tǒng)搭建搜索功能需要發(fā)布服務(wù)共pc端、移動(dòng)端使用。根據(jù)關(guān)鍵詞搜索,得到j(luò)son格式的搜索結(jié)果。創(chuàng)建一個(gè)搜索系統(tǒng),發(fā)布搜索服務(wù)。系統(tǒng)架構(gòu):創(chuàng)建一個(gè)搜索工程:taotao-search搭建solr服務(wù)創(chuàng)建搜索系統(tǒng)可以參考taotao-rest創(chuàng)建。使用的技術(shù):MybatisSpringSpringmvc(發(fā)布服務(wù))SolrJ(solr服務(wù)的客戶端)Pom文件4.0.0com.
25、taotaotaotao-parent0.0.1-SNAPSHOTcom.taotaotaotao-search0.0.1-SNAPSHOTwarcom.taotaotaotao-manager-dao0.0.1-SNAPSHOTorg.springframeworkspring-contextorg.springframeworkspring-beansorg.springframeworkspring-webmvcorg.springframeworkspring-jdbcorg.springframeworkspring-aspectsorg.springframeworkspring-
26、context-supportjavax.servletservlet-apiprovidedjavax.servletjsp-apiprovidedorg.apache.solrsolr-solrjorg.apache.tomcat.maventomcat7-maven-plugin8083/框架整合Ssm整合。Solr服務(wù)的搭建需要在linux系統(tǒng)下搭建solr服務(wù)。需要安裝tomcat安裝jdkCentOS單機(jī)版安裝:第一步:安裝jdk、安裝tomcat第二步:解壓solr壓縮包。第三步:把dist/solr-4.10.3.war部署到tomcat下。第四步:解壓縮war包。啟動(dòng)tomc
27、at解壓。第五步:需要把/root/solr-4.10.3/example/lib/ext目錄下的所有的jar包添加到solr工程中。第六步:創(chuàng)建solrhome。把/root/solr-4.10.3/example/solr文件夾復(fù)制一份作為solrhome。第七步:告訴solr服務(wù)solrhome的位置。需要修改web.xml第八步:?jiǎn)?dòng)tomcat。配置中文分析器、自定義業(yè)務(wù)域分析器使用IKAnalyzer。使用方法:第一步:把IKAnalyzer依賴的jar包添加到solr工程中。把分析器使用的擴(kuò)展詞典添加到classpath中。第二步:需要自定義一個(gè)FieldType。Schema.
28、xml中定義??梢栽贔ieldType中指定中文分析器。 第三步:自定義域。指定域的類型為自定義的FieldType。Sql語(yǔ)句:SELECTa.id,a.title,a.sell_point,a.price,a.image, category_name,c.item_descFROMtb_item aLEFT JOIN tb_item_cat b ON a.cid = b.idLEFT JOIN tb_item_desc c ON a.id = c.item_idWHEREa.status = 1第四步:重新啟動(dòng)tomcat索引庫(kù)中導(dǎo)入數(shù)據(jù)Solrj的使用public class
29、 SolrJTest Testpublic void testSolrJ() throws Exception /創(chuàng)建連接SolrServer solrServer = new HttpSolrServer(54:8080/solr);/創(chuàng)建一個(gè)文檔對(duì)象SolrInputDocument document = new SolrInputDocument();/添加域document.addField(id, solrtest01);document.addField(item_title, 測(cè)試商品);document.addField(item_sell_point, 賣點(diǎn));/添加到索引庫(kù)
30、solrServer.add(document);/提交solrSmit();Testpublic void testQuery() throws Exception /創(chuàng)建連接SolrServer solrServer = new HttpSolrServer(54:8080/solr);/創(chuàng)建一個(gè)查詢對(duì)象SolrQuery query = new SolrQuery();query.setQuery(*:*);/執(zhí)行查詢QueryResponse response = solrServer.query(query);/取查詢結(jié)果SolrDocumentList solrDocumentLi
31、st = response.getResults();for (SolrDocument solrDocument : solrDocumentList) System.out.println(solrDocument.get(id);System.out.println(solrDocument.get(item_title);System.out.println(solrDocument.get(item_sell_point);導(dǎo)入數(shù)據(jù)分析從數(shù)據(jù)庫(kù)中根據(jù)sql語(yǔ)句查詢數(shù)據(jù),遍歷數(shù)據(jù)創(chuàng)建文檔對(duì)象,把文檔對(duì)象寫(xiě)入索引庫(kù)。Dao層Sql語(yǔ)句:SELECTa.id,a.title,a.sell_
32、point,a.price,a.image, category_name,c.item_descFROMtb_item aLEFT JOIN tb_item_cat b ON a.cid = b.idLEFT JOIN tb_item_desc c ON a.id = c.item_idWHEREa.status = 1需要?jiǎng)?chuàng)建一個(gè)mapper文件。接口:public interface ItemMapper List getItemList();Mapper文件:SELECTa.id,a.title,a.sell_point,a.price,a.image, category_name,c.item_descFROMtb_item aLEFT JOIN tb_item_cat b ON a.cid = b.idLEFT JOIN tb_item_desc c ON a.id = c.item_idWHEREa.status = 1Service層取商品列表,遍歷列表,創(chuàng)建文檔對(duì)象,把文檔對(duì)象寫(xiě)入索引庫(kù)。要操作索引庫(kù)需要SolrServer對(duì)象,可以把SolrServer放到spring容器中,注入到Service。Servicepublic class ItemS
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 池塘噴泉修繕施工方案
- 桁架施工方案
- 特殊施工方案
- 昆明石方爆破施工方案
- 二零二五年度文化旅游地產(chǎn)項(xiàng)目房屋及土地所有權(quán)轉(zhuǎn)讓協(xié)議
- 二零二五年度高校畢業(yè)生就業(yè)安置與就業(yè)服務(wù)保障合同
- 二零二五年度車庫(kù)購(gòu)置與車位共享運(yùn)營(yíng)協(xié)議
- 二零二五年度玉米種植補(bǔ)貼收購(gòu)合同
- 二零二五年度廉潔合作協(xié)議:公共資源交易項(xiàng)目監(jiān)管合同
- 二零二五年度飼料行業(yè)風(fēng)險(xiǎn)評(píng)估與保險(xiǎn)合同
- 口腔診所藥品管理制度
- 中醫(yī)子午流注十二時(shí)辰養(yǎng)生法
- 養(yǎng)老院風(fēng)險(xiǎn)管控手冊(cè)
- 標(biāo)準(zhǔn)田字格帶拼音模板空白A4直接打印
- 小學(xué)語(yǔ)文 部編版 六年級(jí)下冊(cè) 第二單元 習(xí)作《寫(xiě)作品梗概》
- 電子技術(shù)基礎(chǔ)(數(shù)字部分 五版 康華光)華中科大:TTL邏輯門電路
- 4.7 數(shù)學(xué)建模活動(dòng):生長(zhǎng)規(guī)律的描述教學(xué)設(shè)計(jì)
- 余杭區(qū)住宅房屋裝修備案申請(qǐng)表
- 住宅建筑工程施工重點(diǎn)與難點(diǎn)應(yīng)對(duì)措施方案
- 中醫(yī)婦科病證診斷療效標(biāo)準(zhǔn)
- GA∕T 787-2021 指掌紋圖像數(shù)據(jù)技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論